커뮤니티
예스스팟 Q&A
답변완료
트레일링 스탑 적용시 에러(정말 빠른 답변 부탁드립니다.)
안녕하세요.
아래수식을 보아 주시고 제가 이 수식을 오늘 당장 적용해야하므로 가능하시다면 정말 빠르게 답변을 부탁드립니다.
//계좌객체 Account1
function Main_OnStart()
{
Main.SetTimer(1,2000);//5초 단위 체크
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
//총수익 누적할 변수
var sumPL = 0;
var sells = 0;
var buys = 0 ;
var profits = 0 ;
var hh =0 ;
//계좌의 종목수
var num = Account1.GetTheNumberOfBalances();
//종목이 2개 이상일때만
if (num >= 1)
{
//잔고 종목 총손익 계산
for (i = 0; i < num;i++)
{
Account1.SetBalanceIndex(i);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
sumPL = sumPL + (Account1.Balance.avgUnitCost - Account1.Balance.current)*Account1.Balance.count;
sells=Account1.Balance.count;
}
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
sumPL = sumPL + (Account1.Balance.current - Account1.Balance.avgUnitCost)*Account1.Balance.count;
buys=Account1.Balance.count;
}
}
profits= sumPL*100 - (sells + buys)*2*7.5 ;
if ( profits >hh )
{ hh = profits ;
}
Main.MessageLog(" profits"+ profits+"달러") ;
Main.MessageLog(" hh" + hh+" ") ;
Main.MessageLog(" buys"+ buys+"개") ;
Main.MessageLog(" sells"+ sells+"개") ;
//총손익이 특정값(0)보다 크면 전체 종목 청산
if ( hh > 20 && (profits < ( hh * 0.5 )) )
{
hh = 0 ;
for (i = 0; i < num;i++)
{
Account1.SetBalanceIndex(i);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1);
}
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1);
}
}
}
//총손익이 순수익 트레일링 스탑으로 전체종목 청산
}
}
}
에서 profits는 비용까지 계산한 순수한 순수익입니다.
profits가 20달러 이상 된 후에 트레일링 스탑을 profits의 최고가 (즉 hh)에서 50% 떨어지면
강제청산하려고 위에서
profits= sumPL*100 - (sells + buys)*2*7.5 ;
if ( profits > hh )
{ hh = profits ;
}
처럼 구성했습니다.
종목이 2종목이상이므로 순수익으로만 트레일링 스탑을 구성하려고 했습니다.
profits가 고가hh를 오버할 때만 새로운 고가hh가 되어야 하는데요.
Main.MessageLog(" hh" + hh+" ") ; 으로 확인해보면
고가hh 값은 profits값하고 이상하게 항상 동일한 값으로 나옵니다.
수식을 목표한 트레일링스탑이 가능하도록 수정해 주시면 감사드리겠습니다.
2018-08-30
2971
글번호 224580
답변완료
문의
미완성신호값이 제대로 않나오는 이유를 발혀주시면 감사합겠읍니다
아래에 스팟식 첨부했읍니다
-------------------------------------------------------------------------
var 완성15신호값, 완성2신호값, 완성120신호값, 미완성15신호값, 미완성2신호값, 미완성120신호값, 미완성15신호, 미완성2신호,미완성120신호, 완성15신호, 완성2신호, 완성120신호 ;
var cc = order1.current ;
function Main_OnStart()
{
Main.MessageLog("시작") ;
a1.Refresh() ;
완성15신호 = exl3.GetData(1, "i27");
완성2신호 = exl3.GetData(1, "k27");
완성120신호 = exl3.GetData(1, "m27");
}
// -------------------------------------------------------
function c3_OnRiseSignal(Signal)
{
if ( Signal.signalKind == 1 )
{
완성120신호 = 11
완성120신호값 = Signal.price ;
exl3.SetData(1, "m26",완성120신호값 );
exl3.SetData(1, "m27",완성120신호 );
Main.MessageLog("완성120신호 매수 : " +완성120신호);
}
if ( Signal.signalKind == 2 )
{
완성120신호 = 22
완성120신호값 = Signal.price ;
exl3.SetData(1, "m26",완성120신호값 );
exl3.SetData(1, "m27",완성120신호 );
Main.MessageLog("완성120신호 매수청산 : " +완성120신호);
}
if ( Signal.signalKind == 3 )
{
완성120신호 = 33
완성120신호값 = Signal.price ;
exl3.SetData(1, "m26",완성120신호값 );
exl3.SetData(1, "m27",완성120신호 );
Main.MessageLog("완성120신호 매도 : " +완성120신호);
}
if ( Signal.signalKind == 4 )
{
완성120신호 = 44
완성120신호값 = Signal.price ;
exl3.SetData(1, "m26",완성120신호값 );
exl3.SetData(1, "m27",완성120신호 );
Main.MessageLog("완성120신호 매도청산 : " +완성120신호);
}
}
function c2_OnRiseSignal(Signal)
{
if ( Signal.signalKind == 1 )
{
완성2신호 = 11
완성2신호값 = Signal.price ;
exl3.SetData(1, "k26",완성2신호값 );
exl3.SetData(1, "k27",완성2신호 );
Main.MessageLog("완성2신호 매수 : " +완성2신호);
}
if ( Signal.signalKind == 2 )
{
완성2신호 = 22
완성2신호값 = Signal.price ;
exl3.SetData(1, "k26",완성2신호값 );
exl3.SetData(1, "k27",완성2신호 );
Main.MessageLog("완성2신호 매수청산 : " +완성2신호);
}
if ( Signal.signalKind == 3 )
{
완성2신호 = 33
완성2신호값 = Signal.price ;
exl3.SetData(1, "k26",완성2신호값 );
exl3.SetData(1, "k27",완성2신호 );
Main.MessageLog("완성2신호 매도 : " +완성2신호);
}
if ( Signal.signalKind == 4 )
{
완성2신호 = 44
완성2신호값 = Signal.price ;
exl3.SetData(1, "k26",완성2신호값 );
exl3.SetData(1, "k27",완성2신호 );
Main.MessageLog("완성2신호 매도청산 : " +완성2신호);
}
}
function c1_OnRiseSignal(Signal)
{
if ( Signal.signalKind == 1 )
{
완성15신호 = 11
완성15신호값 = Signal.price ;
exl3.SetData(1, "i26",완성15신호값 );
exl3.SetData(1, "i27", 완성15신호 );
Main.MessageLog("완성15신호 매수 : " +완성15신호);
}
if ( Signal.signalKind == 2 )
{
완성15신호 = 22
완성15신호값 = Signal.price ;
exl3.SetData(1, "i26",완성15신호값 );
exl3.SetData(1, "i27",완성15신호 );
Main.MessageLog("완성15신호 매수청산 : " +완성15신호);
}
if ( Signal.signalKind == 3 )
{
완성15신호 = 33
완성15신호값 = Signal.price ;
exl3.SetData(1, "i26",완성15신호값 );
exl3.SetData(1, "i27",완성15신호 );
Main.MessageLog("완성15신호 매도 : " +완성15신호);
}
if ( Signal.signalKind == 4 )
{
완성15신호 = 44 ;
완성15신호값 = Signal.price ;
exl3.SetData(1, "i26",완성15신호값 );
exl3.SetData(1, "i27",완성15신호 );
Main.MessageLog("완성15신호 매도청산 : " +완성15신호);
}
}
//미완성 120 ------------------------------------------------------------
function c3_OnRiseIncompleteSignal(IncompleteSignal)
{
미완성120신호값 = IncompleteSignal.price ;
if ( IncompleteSignal.signalKind == 1 )
{
미완성120신호 = 1 ;
exl3.SetData(1, "m29",미완성120신호 );
exl3.SetData(1, "m28",미완성120신호값 );
Main.MessageLog("미완성120신호 매수 : " +IncompleteSignal.signalKind);
}
if ( IncompleteSignal.signalKind == 2 )
{
미완성120신호 = 2 ;
exl3.SetData(1, "m29",미완성120신호 );
exl3.SetData(1, "m28",미완성120신호값 );
Main.MessageLog("미완성120신호 매수청산 : " +IncompleteSignal.signalKind);
}
if ( IncompleteSignal.signalKind == 3 )
{
미완성120신호 = 3 ;
exl3.SetData(1, "m29",미완성120신호 );
exl3.SetData(1, "m28",미완성120신호값 );
Main.MessageLog("미완성120신호 매도 : " +IncompleteSignal.signalKind);
}
if ( IncompleteSignal.signalKind == 4 )
{
미완성120신호 = 4 ;
exl3.SetData(1, "m29",미완성120신호 );
exl3.SetData(1, "m28",미완성120신호값 );
Main.MessageLog("미완성120신호 매도청산 : " +IncompleteSignal.signalKind);
}
}
// 미완성 2-----------------------------------------------------
function c2_OnRiseIncompleteSignal(IncompleteSignal)
{
미완성2신호값 = IncompleteSignal.price ;
if ( IncompleteSignal.signalKind == 1 )
{
미완성2신호 = 1 ;
exl3.SetData(1, "k29",미완성2신호 );
exl3.SetData(1, "k28",미완성2신호값 );
Main.MessageLog("미완성2신호 매수 : " +IncompleteSignal.signalKind);
}
if ( IncompleteSignal.signalKind == 2 )
{
미완성2신호 = 2 ;
exl3.SetData(1, "k29",미완성2신호 );
exl3.SetData(1, "k28",미완성2신호값 );
Main.MessageLog("미완성2신호 매수청산 : " + IncompleteSignal.signalKind);
}
if ( IncompleteSignal.signalKind == 3 )
{
미완성2신호 = 3 ;
exl3.SetData(1, "k29",미완성2신호 );
exl3.SetData(1, "k28",미완성2신호값 );
Main.MessageLog("미완성2신호 매도 : " +IncompleteSignal.signalKind);
}
if ( IncompleteSignal.signalKind ==4 )
{
미완성2신호 = 4 ;
exl3.SetData(1, "k29",미완성2신호 );
exl3.SetData(1, "k28",미완성2신호값 );
Main.MessageLog("미완성2신호 매도청산 : " +IncompleteSignal.signalKind);
}
}
// 미완성 15--------------------------------------------------------
function c1_OnRiseIncompleteSignal(IncompleteSignal)
{
미완성15신호값 = IncompleteSignal.price ;
if ( IncompleteSignal.signalKind == 1 )
{
미완성15신호 = 1 ;
exl3.SetData(1, "i29",미완성15신호 );
exl3.SetData(1, "i28",미완성15신호값 );
Main.MessageLog("미완성15신호 매수 : " +IncompleteSignal.signalKind);
}
if ( IncompleteSignal.signalKind ==2 )
{
미완성15신호 =2 ;
exl3.SetData(1, "i29",미완성15신호 );
exl3.SetData(1, "i28",미완성15신호값 );
Main.MessageLog("미완성15신호 매수청산 : " +IncompleteSignal.signalKind);
}
if ( IncompleteSignal.signalKind == 3 )
{
미완성15신호 = 3 ;
exl3.SetData(1, "i29",미완성15신호 );
exl3.SetData(1, "i28",미완성15신호값 );
Main.MessageLog("미완성15신호 매도 : " +IncompleteSignal.signalKind);
}
if ( IncompleteSignal.signalKind ==4 )
{
미완성15신호 = 4 ;
exl3.SetData(1, "i29",미완성15신호 );
exl3.SetData(1, "i28",미완성15신호값 );
Main.MessageLog("미완성15신호 매도청산 : " +IncompleteSignal.signalKind);
}
}
2018-09-06
2866
글번호 224577
2ndbus 님에 의해서 삭제되었습니다.
2018-08-24
10
글번호 224574
답변완료
한국투자증권 스팟 작동 먹통
잘되던 수식이 언제부턴가 먹통입니다. 주석을 넣어 가면서 확인해본결과 아래 부분이 작동을 안하는것같습니다.
저번에도 한국투자증권에서 뭘 막아놔서 안되던 부분이 있었는데 비슷한 상황 같습니다.
확인 부탁드립니다.
function Main_On**dateAccount(sAccntNum, sItemCode, l**dateID)
{
if (l**dateID == 30000)
{
Main.KillTimer(1);
Main.SetTimer(2, 1000);
Main.MessageList("타이머2셋팅");
}
}
2018-08-23
2782
글번호 224573
수다리 님에 의해서 삭제되었습니다.
2018-08-23
0
글번호 224572
답변완료
예스스팟 예제를 어디서 볼수 있을까요
예스스팟 예제를 통해서 활용법을 익히고 싶은데요 예스스팟메뉴얼의 11개 예제는 부족한것 같아서 어디에서 예제 자료를 구할수 있는지 부탁드립니다. 감사합니다
2018-08-21
2813
글번호 224570
2ndbus 님에 의해서 삭제되었습니다.
2018-08-21
0
글번호 224569
답변완료
관심그룹 대상 매매 코드 부탁드립니다.
안녕하세요.
특정 종목들을(수십개) 장전에 입력하여 관심그룹에 등록한 후(관심종목 등록이 필요없다면 안해도 됩니다), 관심그룹에 등록된 종목을 대상으로 시초가 대비 -2% 하락하면 매수하는 코드를 짜고 싶습니다.
1. 예스스팟 전략파일에서 관련 코드를 짤수 있을까요?
가능하다면 관련해서 예시 코드를 보고싶습니다.
감사합니다!
2018-08-28
2994
글번호 224568
답변완료
수익 또는 포지션 확인
안녕하십니까.
스팟에서 다음 두가지를 구하는 수식에 대하여 설명 부탁 드립니다.
1. 차트에 적용된 시스템의 현재 수익
2. 차트에 적용된 시스템의 현재 포지션 및 진입 날짜/시간
실행중에는 OnRiseSignal로 받아 변수로 저장해 놓으면 알 수 있으나
스팟이 바로 시작 되었을 경우의 현재 포지션 및 진입 날짜/시간을 알고 싶어
문의 드립니다.
감사합니다.
2018-08-20
2921
글번호 224567
답변완료
array 변수의 특정값을 삭제하고자 합니다. 어떻게 해야 할까요?
list.array(데이터);
이렇게 하면 array변수에 데이터 추가하는것은 알겠습니다.
반대로 list.???(데이터) 형태로 특정 값(코드)를 삭제하고 싶습니다.
어떻게 하면 될까요?
2018-08-17
2954
글번호 224566