커뮤니티

예스스팟 Q&A

답변완료

주문체결 응답 이벤트

선물 시스템은 예스랭귀지로 만들고, 예스랭귀지 시스템 신호를 받아서 예스스팟에서 매매를 진행합니다. 매수 진행 중에 매도 신호가 발생하여 리버스가 된 경우 스팟에서 OrderResponse 이벤트가 다소 불안정한 것 같아 문의 드립니다. 리버스 발생시 시그널(Signal.signalKind)은 매수청산(2) -> 매도(3) 순서로 발생되겠지요. 실제 상황에서는 거의 동시에 이뤄질 것입니다. 이때, 매수청산 이후 발생한 매도에 대해 주문접수>주문응답>체결응답을 확인하려고 하는데요. 매수 청산이 잘 이뤄지고 매도 신규 진입도 잘 이뤄졌으나 신규 진입한 매도에 대한 주문 응답이 동작하지 않는 경우가 있습니다. 항상 그런 것은 아닌 것 같고 되다 안되다 그러네요... 참고로, 현재 테스트를 위해 모의서버를 사용 중이며, 3개 이상의 시스템 신호를 하나의 스팟에서 동시에 처리합니다. 혹시, 이 문제가 매수청산에 대한 주문응답과 신규매도 주문응답이 거의 동시에 들어오게 되면서 주문응답 이벤트가 뒤에 들어온 신규매도 주문응답 이벤트를 놓치거나 스킵하게 될 수도 있는 건지요? 스팟 코드는 아래와 같습니다. 0) 전역 변수: var BuyOrderID = new Array(4); var ShortOrderID = new Array(4); var ExitOrderID = new Array(4); var BuyOrderNumber = new Array(4); var ShortOrderNumber = new Array(4); var ExitOrderNumber = new Array(4); 1) 시스템 시그널: function Chart1_OnRiseSignal(Signal) { MakeOrder(1, Signal.signalKind); } function Chart2_OnRiseSignal(Signal) { MakeOrder(2, Signal.signalKind); } function Chart3_OnRiseSignal(Signal) { MakeOrder(3, Signal.signalKind); } function MakeOrder(ChartNumber, ChartSignal) { if(ChartSignal == 1) { BuyOrderID[ChartNumber] = Account1.OrderBuy(MarketData1.code, 1, MarketData1.Ask(5), 0); Start[ChartNumber] = 1; } if(ChartSignal == 2 && Start[ChartNumber] == 1) { ExitOrderID[ChartNumber] = Account1.OrderSell(MarketData1.code, 1, MarketData1.Bid(5), 0); } if(ChartSignal == 3) { ShortOrderID[ChartNumber] = Account1.OrderSell(MarketData1.code, 1, MarketData1.Bid(5), 0); Start[ChartNumber] = 1; } if(ChartSignal == 4 && Start[ChartNumber == 1) { ExitOrderID[ChartNumber] = Account1.OrderBuy(MarketData1.code, 1, MarketData1.Ask(5), 0); } } 2) 주문 응답 function Main_OnOrderResponse(OrderResponse) { for(var i=1; i<=3; i++) { if(OrderResponse.orderID == BuyOrderID[i]) { BuyOrderNumber[i] = OrderResponse.orderNum; } if(OrderResponse.orderID == ShortOrderID[i]) { ShortOrderNumber[i] = OrderResponse.orderNum; } if(OrderResponse.orderID == ExitOrderID[i]) { ExitOrderNumber[i] = OrderResponse.orderNum; } } } 3) 주문 체결 응답 function Main_OnNotifyFill(NotifyFill) { for(var i=1; i<=3; i++) { if(NotifyFill.orderNum == BuyOrderNum[i]) { Main.MessageList("신규 매수 체결 응답"); } if(NotifyFill.orderNum == ShortOrderNum[i]) { Main.MessageList("신규 매도 체결 응답"); } if(NotifyFill.orderNum == ExitOrderNum[i]) { Main.MessageList("청산 주문 체결 응답"); } } }
프로필 이미지
곰탈
2014-09-03
1123
글번호 223146

대가북극곰 님에 의해서 삭제되었습니다.

프로필 이미지
대가북극곰
2014-08-28
20
글번호 223145
답변완료

몇 가지 질문.

1. YT에서 청산 신호 중 SetEndOfTime, StopProfit, StopLoss, SetStopInactivity 등의 비주기적 청산신호들도 예스스팟에서 Signal.SignalKind 의 청산 신호 (2 또는 4) 로 모두 인식되나요 ? 2. 예스스팟에서 테스트 중인 코드가 있는데, UNum = Option.uppersATM; LNum = Option.lowersATM; 이 값들이 MessageLog로 찍어보면 모두 0 으로 나옵니다. 이유를 모르겠습니다. 그리고 차월물에 대해 등가보다 위/아래 종목들 개수는 어떻게 구하는지요 ? 감사합니다.
프로필 이미지
폴피닉스
2014-08-25
1090
글번호 223138
답변완료

스팟문의

스팟문의드립니다. 해외선물 골드 기준으로 현재 잔고금액의 30%에서 최대주문가능 계약수를 구하는 방법을 알고 싶습니다. 예로 10억의 자금이 있다고 할때 30%인 3억으로 최대가능 계약수를 구한뒤 매수신호가 발생하면 3억으로 10틱 차이로 주문을 쫘악 내고 싶습니다. 만약 3억으로 10계약 매수가능하다고 할때, 현재가가 1300.00 이라고 하면 1300.00에 한계약, 1299.0 1계약, 1298.0 1계약 ~ 1290.0 1계약으로 모두 10계약 매수주문을 냅니다. 여기서 A신호일때는 호가를 5틱 차이로 주문하고, B신호일때는 호가를 10틱차이로 주문을 합니다. 각각의 주문은 배열을 사용해서 주문번호를 기억합니다. 매수청산신호가 발생하면 미체결 진입은 모두 취소시키고, 마찬가지로 진입된 수량을 A신호명일때는 10틱차이로 매도호가에 깔고, B청산신호일때는 5틱차이로 매도호가에 깝니다. 이후 시간이 지나 만약 미체결 수량이 잔고에 있고 매도신호가 발생하면 시장가로 모두 매수청산합니다. 정전이나 예스스팟이 갑작스럽게 종료되는 것을 예방하기 위해 종료시 포지션 진입유무, 포지션, 수량, 진입신호명 등의 정보를 기억하고 있다가, 다시켰을때 이 데이타를 이용했으면 합니다. 요청사항이 많은데 도움주시면 너무 감사하겠습니다.
프로필 이미지
gt
2014-08-28
1009
글번호 223137

경복궁 님에 의해서 삭제되었습니다.

프로필 이미지
경복궁
2014-08-21
1
글번호 223136
답변완료

수식 문의 드립니다.

선물 신호를 예스스팟으로 코덱스 레버리지와 인버스에 적용하고 싶습니다. 매수신호가 나오면 코덱스 레버리지 매수, 매도신호가 나오면 인버스 매수가 되어야 할텐데, 코덱스 레버리지 차트와 인버스 차트 두개를 띄워놓아야 가능할 듯 보입니다. 맞지요? 예를 들어 선물 매수포지션에서 매도 포지션으로 전환시에는, 레버리지 청산, 인버스 매수가 되어야 하는데 동시에 신호가 나오면 동일 자금에서 바로 진입 이 가능할까요?(30분봉 기준입니다) 불가능하다면 조언 부탁드립니다. 위 내용 포함한 예스스팟 수식 좀 부탁드리겠습니다^^
프로필 이미지
린포체
2014-08-21
1020
글번호 223135

spotyt 님에 의해서 삭제되었습니다.

프로필 이미지
spotyt
2014-08-19
7
글번호 223134
답변완료

스팟전략문의

수고많으십니다. 예스트레이더 선물 신호를 이용하여 옵션매수전략을 개발하고 있는데요. 신규로 예스랭귀지에 Piramiding 전략을 추가하였고, 개념은 아래와 같습니다. 선물매수신호 -> 콜매수 선물매수신호 -> 콜매수 -> 선물매수청산신호 -> 콜매수청산 선물매수신호 -> 콜매수 -> 선물피라미딩매수신호 -> 콜피라미딩매수 선물매수신호 -> 콜매수 -> 선물피라미딩매수신호 -> 콜피라미딩매수 -> 선물피라미딩매수분청산신호 -> 콜매수청산 선물매수신호 -> 콜매수 -> 선물피라미딩매수신호 -> 콜피라미딩매수 -> 선물매수청산신호 -> 콜매수청산 선물매도신호 -> 풋매수 선물매도신호 -> 풋매수 -> 선물매도청산신호 -> 풋매수청산 선물매도신호 -> 풋매수 -> 선물피라미딩매도신호 -> 풋피라미딩매수 선물매도신호 -> 풋매수 -> 선물피라미딩매도신호 -> 풋피라미딩매수 -> 선물피라미딩매도분청산신호 -> 풋매수청산 선물매도신호 -> 풋매수 -> 선물피라미딩매도신호 -> 풋피라미딩매수 -> 선물매도청산신호 -> 풋매수청산 아래의 스팟수식을 위와같은 Piramiding 신호에 대응할 수 있도록 수정부탁드립니다. //선물매수신호시 콜매수 신호 발생시키기 if (Signal.signalKind == 1) { BuySignalCode = CallOrderCode; CallOrderPrice = Option.GetCurrentByCode(BuySignalCode); BuyID = Account1.OrderBuy(BuySignalCode, Signal.count, Option.GetAskByCode(BuySignalCode, 5), 0); Main.MessageList("콜종목코드 : ",BuySignalCode," 콜현재가 : ",CallOrderPrice); BuyFill = 0; } //선물매수신호후 청산신호가 나오면 청산실행 if (Signal.signalKind == 2) { CallOrderPrice = Option.GetCurrentByCode(BuySignalCode); if (BuyFill == 1) { Account1.OrderSell(BuySignalCode, Signal.count, Option.GetBidByCode(BuySignalCode, 5), 0) Main.MessageList("콜종목코드 : ",BuySignalCode," 콜현재가 : ",CallOrderPrice); } else { Account1.OrderCancel(BuyNum); Main.MessageLog("매수주문취소"); } } //선물매도신호시 풋매수 신호 발생시키기 if (Signal.signalKind == 3) { BuySignalCode = PutOrderCode; PutOrderPrice = Option.GetCurrentByCode(BuySignalCode); Account1.OrderBuy(BuySignalCode, Signal.count, Option.GetAskByCode(BuySignalCode, 5), 0); Main.MessageList("풋종목코드 : ",BuySignalCode," 풋현재가 : ",PutOrderPrice); BuyFill = 0; } //선물매도신호후 청산신호가 나오면 청산실행 if (Signal.signalKind == 4) { PutOrderPrice = Option.GetCurrentByCode(BuySignalCode); if (BuyFill == 1) { Account1.OrderSell(BuySignalCode, Signal.count, Option.GetBidByCode(BuySignalCode, 5), 0); Main.MessageList("풋종목코드 : ",BuySignalCode," 풋현재가 : ",PutOrderPrice); } else { Account1.OrderCancel(BuyNum); Main.MessageLog("매수주문취소"); } } //주문응답 이벤트 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BuyID) { BuyNum = OrderResponse.orderNum; } } //체결통보 이벤트 function Main_OnNotifyFill(NotifyFill) { if (NotifyFill.orderNum == BuyNum) { BuyFill = 1; } }
프로필 이미지
착한이
2014-08-19
1088
글번호 223133

착한이 님에 의해서 삭제되었습니다.

프로필 이미지
착한이
2014-08-18
0
글번호 223132
답변완료

호가잔량 변화 기록

안녕하세요 호가1 잔량 수량이 변화할때마다 호가1잔량을 특정 변수나 배열에 저장하려면 어떻게 해야하나요 예를 들어 호가 1 매수 잔량이 1 2 3 4 5 6 7 8 ... 으로 변하면 변할때 마다 변수에 저장해 특정 개수 (약 20개이상정도) 에 발생순서별로 저장하고 싶습니다
프로필 이미지
fxx
2014-08-18
1110
글번호 223131