커뮤니티

잔고와 차트신호 간 연동

프로필 이미지
gap
2020-03-06 10:38:49
4045
글번호 225170
답변완료
안녕하세요. 실거래 중에 발생한 경우때문에 요청드립니다. 미니나스닥 기준으로 2계약 증거금을 맞추고 나서 실거래 진행 중 유독 손실이 컸던 날에 매수 포지션에서 매도로 스위칭하는 신호가 떴음에도 달랑 몇 만원 차이로 주문금액이 부족하다는 아래와 같은 주문메시지가 뜨면서 매도 진입은 못하고 익절 청산신호에서 매수진입을 하는 바람에 손실이 더 커졌습니다. [전송오류] [G50306] 주문가능금액이 부족합니다. 실매매 중 증거금 부족으로 초래된 문제였으나 결국은 차트신호와 잔고 원장과의 연동이 되지 않은 상태에서 발생한 이슈이기도 합니다. 예스스팟에서 이 부분을 매꿔줘야 하는데 자바스크립트를 다뤄본 적이 없어 어떻게 연동을 시켜줘야 하는지 막막합니다. 차트신호와 잔고를 연동하는 스크립트가 필요한 상황이오니 작성을 해주시면 감사하겠습니다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2020-04-07 16:48:05

안녕하세요 예스스탁입니다. 1 문의하신 내용은 시스템을 적용하실 때 시스템 트레이딩 설정창의 부가기능탭에서 진입주문지연기능을 이용하시면 어느정도 해소할수가 있습니다. 진입주문지연기능은 청산신호는 신호가 발생하면 즉시 주문을 집행하고 진입신호가 발생하면 N초 뒤에 주문을 집행하는 기능입니다. N초 이내에 청산주문이 체결되면 이후의 진입주문은 증거금부족을 회피하실수 있습니다. 다만 청산주문이 미체결된 상태에서 N초가 지나 진입주문을 내면 마찬가지로 증거금부족으로 거부가 됩니다. 2 스팟으로 해결하길 원하시면 아래식 참고하시기 바랍니다. 스팟과 연동하시면 차트는 시험적용으로 적용하고 차트에서 신호가 발생하면 모두 스팟에서 주문을 나가게 해야 합니다. 아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다. 차트는 신호가 4가지 종류가 발생합니다. 매수진입, 매수청산, 매도진입, 매도청산 각 진입이 발생하고 진입주문이 오류가 발생하면 타이머를 셋팅해서 N초뒤에 다시 주문을 내게 됩니다, 아래식에서는 3초뒤로 되어 있습니다. 각 청산이 발생할때 진입주문에 대한 미체결이 있으면 취소하고 잔고에 있는 수량만큼만 청산하게 됩니다. 스크립트 객체화면 셋팅 차트객체 추가 --> 속성에서 객체명은 Chart1, 신호가 발생하는 차트와 동일아이디 부여 종목객체 추가 --> 속성에서 객체명은 MarketData1, 차트와 동일종목으로 지정 계좌객체 추가 --> 속성에서 객체명은 Account1, 주문낼 계좌번호 지정 var S,BID,BXID,SID,SXID; var BNum,BXNum,SNum,SXNum; var BV,SV; function Main_OnStart() { Main.MessageList("spot start"); } function Chart1_OnRiseSignal(Signal) { //매수진입신호 발생 if (Signal.signalKind == 1 ) { BV = Signal.count; //매도3호가로 신호수량으로 매수주문 BID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count,MarketData1.Ask(3), 2); } //매수청산신호 발생 if (Signal.signalKind == 2) { //매수진입주문 번호로 미체결객체 셋팅 Account1.SetUnfillOrderNumber(BNum); //매수진입주문 미체결이면 if (Account1.Unfill.count > 0) { //취소 Account1.OrderCancel(BNum); } //잔고 셋팅 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); //잔고의 수량이 1이상이고 매수포지션이면 if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { //매수3호가로 잔고수량 전량 매도주문 BXID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Bid(3), 2); BXfill = false; } } //매도진입신호 발생 if (Signal.signalKind == 3) { SV = Signal.count; //매수3호가로 매도주문 SID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code), SV,MarketData1.Bid(3), 2); } //매도청산신호 발생 if (Signal.signalKind == 4) { //매도진입주문 번호로 미체결객체 셋팅 Account1.SetUnfillOrderNumber(SNum); //매도진입주문 미체결이면 if (Account1.Unfill.count > 0) { //취소 Account1.OrderCancel(BNum); } //잔고 셋팅 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); //잔고의 수량이 1이상이고 매도포지션이면 if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { //매도3호가로 잔고수량 전량 매수주문 SXID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Ask(3), 2); SXFill = false; } } } //주문접수응답 발생 function Main_OnOrderResponse(OrderResponse) { //매수진입주문에 대한 응답이 들어오면 if (OrderResponse.orderID == BID) { //주문이 정상접수이면 주문번호 저장하고 타이머 종료 if (OrderResponse.isNormal == true) { BNum = OrderResponse.orderNum; Main.KillTimer(1, 3000); } else //주문이 오류이면 { //1번 타이머 3초 셋팅 Main.SetTimer(1, 3000); } } //매수청산주문에 대한 응답이 들어오면 if (OrderResponse.orderID == BXID) { BXNum = OrderResponse.orderNum; } //매도진입주문에 대한 응답이 들어오면 if (OrderResponse.orderID == SID) { //주문이 정상접수이면 주문번호 저장하고 타이머 종료 if (OrderResponse.isNormal == true) { SNum = OrderResponse.orderNum; Main.KillTimer(3, 3000); } else //주문이 오류이면 { //1번 타이머 3초 셋팅 Main.SetTimer(3, 3000); } } //매도청산주문에 대한 응답이 들어오면 if (OrderResponse.orderID == SXID) { SXNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { //1번 타이머가 동작하면 if (nEventID == 1) { //매도3호가로 신호수량으로 매수주문 BID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),BV,MarketData1.Ask(3), 2); } //3번 타이머가 동작하면 if (nEventID == 3) { //매수3호가로 신호수량으로 매도주문 SID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), SV,MarketData1.Bid(3), 2); } } 즐거운 하루되세요 > gap 님이 쓴 글입니다. > 제목 : 잔고와 차트신호 간 연동 > 안녕하세요. 실거래 중에 발생한 경우때문에 요청드립니다. 미니나스닥 기준으로 2계약 증거금을 맞추고 나서 실거래 진행 중 유독 손실이 컸던 날에 매수 포지션에서 매도로 스위칭하는 신호가 떴음에도 달랑 몇 만원 차이로 주문금액이 부족하다는 아래와 같은 주문메시지가 뜨면서 매도 진입은 못하고 익절 청산신호에서 매수진입을 하는 바람에 손실이 더 커졌습니다. [전송오류] [G50306] 주문가능금액이 부족합니다. 실매매 중 증거금 부족으로 초래된 문제였으나 결국은 차트신호와 잔고 원장과의 연동이 되지 않은 상태에서 발생한 이슈이기도 합니다. 예스스팟에서 이 부분을 매꿔줘야 하는데 자바스크립트를 다뤄본 적이 없어 어떻게 연동을 시켜줘야 하는지 막막합니다. 차트신호와 잔고를 연동하는 스크립트가 필요한 상황이오니 작성을 해주시면 감사하겠습니다.