커뮤니티

청산이 이루어지지 않는 현상

프로필 이미지
석렌버핏
2020-11-05 18:17:50
2241
글번호 216367
답변완료
이전에 글을 올려둔 적이 있습니다. 이후 답변이 달리지 않아 새로 글을 올립니다. 예스트레이더가 인터넷 연결 문제등으로 재접속이 되었을 때, 매수 신호 발생으로 매수가 이루어진 전략의 경우에도 매수 시점이 해당 틱 차트(최대10000개로 보임)의 틱 개수를 넘어간 경우 이전에 매수한 경우를 인식하지 못하기 때문에 매도를 해야할 때 매도가 이루어지지 않습니다. 매도식 if NextBarSdate != sDate Then exitlong("bx",AtMarket); 이 처럼 주기를 최대로 했을 때도 exitlong이 호출되지 않아, 수동으로 파는 수밖에 없는데 해결할 방법이 시급합니다. 거래량이 많은 종목의 경우 틱차트로 하면 빈번하게 발생할 수 있는 경우입니다. 틱 차트를 사용하지 않고 분봉을 이용하면 물론 그런 경우는 거의 없겠지만, 틱차트가 아닌 경우 전략이 잘 작동하지 않기에 틱차트가 필수인 상황입니다. 혹은 다른 수식으로라도 창을 하나 더 띄워서 예를들어 시가청산을 한다고 했을 시, <종목 수량이 있으면 무조건 시가청산>과 같은 방법은 없을런지요? 방법을 찾기 못해 다시 문의드리오니 꼭 답변 부탁드립니다.
예스트레이더 (iM증권)
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2020-11-06 14:33:36

안녕하세요? 예스스탁입니다. 3가지 방법이 있을것 같습니다. 첫번째는 해당 시스템식을 수정하여 임의의 매수신호를 발생시키는 방법으로 해결하는 것인데, 시스템신호의 구조상 진입신호가 있어야만 청산신호가 발생되므로, 매수신호 발생으로 매수 보유중인데, 시스템 적용시점에서 차트 기간이 지나서 진입신호가 사라졌다면 해당 시스템식에서 임의의 매수신호를 발생시키도록 식을 수정해서 사용하는 방법입니다. 예를 들어 골든크로스 발생하면 매수하고 다음날 시가데이터 들어오면 청산하는 식인 경우 아래와 같이 작성될 텐데, 매수신호가 기간 경과로 사라졌다면 임의의 매수신호를 맨아래 식처럼 추가하여 만들어주는 것입니다. 이 방법은 시스템적용시 포지션 상태와 계좌의 잔고 상태를 일일이 확인해 주어야 하고, 불일치시 시스템식을 변경해 주어야 하는 불편함이 있습니다. if CrossUp( ma(C,5), ma(C,20)) then buy(); if NextBarSdate != sDate Then exitlong("bx",AtMarket); # 임의의 신호 발생 if date == 20201105 and stime >= 152000 then buy(); 두번째 방법은 별도의 창을 띄워서 잔고가 있으면 청산하도록 하는 방식입니다. 별도로 띄운 창에서 아래와 같이 특정계좌의 특정 순위의 보유종목을 조회해서 수량이 0보다 크면 주문하는 방식입니다. (아래 식에서는 계좌순위는 리스트상 첫번째이고, 계좌평가 화면상의 종목리스트 상에는 2번째에 있는 종목의 보유수량을 조회하여 0보다 크면 매도하는 식입니다.) 이 식의 경우 계좌평가 화면상에서 여러 종목을 보유하고 있고, 선순위 리스트의 종목이 해당 종목보다 먼저 매도될 경우 순위가 바뀔 수 있기 때문에 여러종목을 보유하는 경우 사용하기에는 적합하지 않습니다. var : AccoundNum(""),Symbol(""),Quantity(0); AccoundNum = getAccount(0); //'계좌순서 설정' 화면에서 첫번째 계좌 Symbol = GetPositionSymbol(1,AccoundNum); //'1103 계좌평가 화면'상에서 2번째 순위에 있는 종목 Quantity = GetPositionQuantity(Symbol,AccoundNum); if Index == 0 Then Buy(); if Quantity > 0 Then ExitLong("EL", OnClose, DEf, DEf,Quantity ); 세번째 방법은 2103 스탑주문 화면을 이용하여 보유하고 있는 종목을 시초가 데이터 들어오면 매도주문이 나가게 하는 방법입니다. [2103] 스탑주문 화면에서 장시작전에 'STOP일괄설정'을 선택하여 손실스탑과 수익스탑을 모두 선택하고 값은 각각 0.01%로 입력해 주고 자동주문으로 선택해서 적용한 후 'STOP주문실행'버튼을 클릭하여 스탑주문을 실행해 놓는 방식입니다. 이 경우 장시작후 시초가가 매수가격과 0.01% 이상 차이가 나면 자동주문이 나가게 됩니다. 시스템전략에서도 자동주문(매도)이 나가겠지만, 주식계좌라면 2번째 나가는 주문은 보유수량이 없다고 주문이 거부될 것이므로 자동주문을 그대로 적용해 놓더라도 별 문제는 없을것 같습니다. 답변자의 개인적인 생각으로는 세번째 스탑주문을 이용하시는 것이 기존 시스템 자동주문을 유지해 놓은 상태에서 다른 내용 변경 없이 가장 편하게 사용할 수 있는 방법이 될것 같습니다. 감사합니다. > 석렌버핏 님이 쓴 글입니다. > 제목 : 청산이 이루어지지 않는 현상 > 이전에 글을 올려둔 적이 있습니다. 이후 답변이 달리지 않아 새로 글을 올립니다. 예스트레이더가 인터넷 연결 문제등으로 재접속이 되었을 때, 매수 신호 발생으로 매수가 이루어진 전략의 경우에도 매수 시점이 해당 틱 차트(최대10000개로 보임)의 틱 개수를 넘어간 경우 이전에 매수한 경우를 인식하지 못하기 때문에 매도를 해야할 때 매도가 이루어지지 않습니다. 매도식 if NextBarSdate != sDate Then exitlong("bx",AtMarket); 이 처럼 주기를 최대로 했을 때도 exitlong이 호출되지 않아, 수동으로 파는 수밖에 없는데 해결할 방법이 시급합니다. 거래량이 많은 종목의 경우 틱차트로 하면 빈번하게 발생할 수 있는 경우입니다. 틱 차트를 사용하지 않고 분봉을 이용하면 물론 그런 경우는 거의 없겠지만, 틱차트가 아닌 경우 전략이 잘 작동하지 않기에 틱차트가 필수인 상황입니다. 혹은 다른 수식으로라도 창을 하나 더 띄워서 예를들어 시가청산을 한다고 했을 시, <종목 수량이 있으면 무조건 시가청산>과 같은 방법은 없을런지요? 방법을 찾기 못해 다시 문의드리오니 꼭 답변 부탁드립니다.