커뮤니티

예스스팟 Q&A

답변완료

수식 문의드립니다.

다음과 같은 전략을 작성하려고 하는데요. 1. 진입(매수인 경우) 차트A 그리고 차트B에서 매수신호가 발생하면 선물 매도1호가 1개 매수진입한다. (챠트마다 매수신호가 발생하는 시기가 다르므로 한 챠트에서 매수신호가 발생하는 시 점에 다른 챠트의 신호상태를 체크해서 동일 방향이면 매수진입하는 방법) 2. 청산(매수청산인 경우) 챠트A 또는 챠트B에서 매수청산신호(익절) 또는 매도신호가 발생하면 선물 매수1호가 1개 청산한다. 매도는 이와 반대로 되면 될 것 같은데요. 수식 좀 부탁드립니다. 감사합니다.
프로필 이미지
극동해
2013-07-19
1238
글번호 222455
답변완료

시간정정주문 문의드립니다

항상수고 많으십니다 선물챠트의 시그널을 이용해 옵션 등가 양매도 전략을 구사 할려고 합니다 진입 및 청산로직은 최초 우선1호가 -> 1차정정 우선1호가 -> 2차정정 현재가 -> 3차정정 상대2호가 체결입니다. 최초주문은 우선1호가에 잘들어가나 진입시 1차정정 청산시 2차정정주문이 들어 가지 않습니다. 틀린부분 지적 부탁드립니다. var Start; var BuyCallCode; var BuyPutCode; var SellCallCode; var SellPutCode; var SellCallPrice; var SellPutPrice; var BxCallPrice; var BxPutPrice; var ExCallNum; var ExPutNum; var SellCallNum; var SellPutNum; var CallInID; var PutExID; var CallExID; var PutInID; function Main_OnStart() { Main.MessageLog("시작"); Start = 0; } function C1_OnRiseSignal(Signal) { if (Signal.signalKind == 1 ) { Start = 1; SellPutCode = Option.GetATMPutRecent(0); SellPutPrice = Option.GetAskByCode(SellPutCode,1); PutInID = A1.OrderSell(SellPutCode, 1, SellPutPrice, 0); Main.SetTimer(21, 10000); Main.SetTimer(22, 20000); Main.SetTimer(23, 30000); } if (Start == 1 && Signal.signalKind == 2 ) { BxPutPrice = Option.GetBidByCode(SellCallCode,1); PutExID = A1.OrderBuy(SellPutCode, 1, BxPutPrice, 0); Main.SetTimer(31, 60000); Main.SetTimer(32, 120000); Main.SetTimer(33, 170000); } if (Signal.signalKind == 3 ) { Start = 1; SellCallCode = Option.GetATMCallRecent(0); SellCallPrice = Option.GetAskByCode(SellCallCode,1); CallInID = A1.OrderSell(SellCallCode, 1, SellCallPrice, 0); Main.SetTimer(1, 10000); Main.SetTimer(2, 20000); Main.SetTimer(3, 30000); } if (Start == 1 && Signal.signalKind == 4 ) { BxCallPrice = Option.GetBidByCode(SellCallCode,1); CallExID = A1.OrderBuy(SellCallCode, 1, BxCallPrice, 0); Main.SetTimer(11, 60000); Main.SetTimer(12, 120000); Main.SetTimer(13, 170000); } } //PUT매도진입 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == PutInID) { SellPutNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 21) { Main.KillTimer(21); A1.SetUnfillOrderNumber(SellPutNum); if (A1.Unfill.count > 0) { PutInID = A1.OrderReplacePrice(SellPutNum,Option.GetAskByCode(SellPutCode,1)); } } if (nEventID == 22) { Main.KillTimer(22); A1.SetUnfillOrderNumber(SellPutNum); if (A1.Unfill.count > 0) { PutInID = A1.OrderReplacePrice(SellPutNum,Option.GetCurrentByCode(SellPutCode)); } } if (nEventID == 23) { Main.KillTimer(23); A1.SetUnfillOrderNumber(SellPutNum); if (A1.Unfill.count > 0) { PutInID = A1.OrderReplacePrice(SellPutNum,Option.GetBidByCode(SellPutCode,2)); } } } //PUT 매도청산 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == PutExID) { ExPutNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 31) { Main.KillTimer(31); A1.SetUnfillOrderNumber(ExPutNum); if (A1.Unfill.count > 0) { PutExID = A1.OrderReplacePrice(ExPutNum,Option.GetBidByCode(SellPutCode,1)); } } if (nEventID == 32) { Main.KillTimer(32); A1.SetUnfillOrderNumber(ExPutNum); if (A1.Unfill.count > 0) { PutExID = A1.OrderReplacePrice(ExPutNum,Option.GetCurrentByCode(SellPutCode)); } } if (nEventID == 33) { Main.KillTimer(33); A1.SetUnfillOrderNumber(ExPutNum); if (A1.Unfill.count > 0) { PutExID = A1.OrderReplacePrice(ExPutNum,Option.GetAskByCode(SellPutCode,2)); } } } //CALL 매도 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == CallInID) { SellCallNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.KillTimer(1); A1.SetUnfillOrderNumber(SellCallNum); if (A1.Unfill.count > 0) { CallInID = A1.OrderReplacePrice(SellCallNum,Option.GetAskByCode(SellCallCode,1)); } } if (nEventID == 2) { Main.KillTimer(2); A1.SetUnfillOrderNumber(SellCallNum); if (A1.Unfill.count > 0) { CallInID = A1.OrderReplacePrice(SellCallNum,Option.GetCurrentByCode(SellCallCode)); } } if (nEventID == 3) { Main.KillTimer(3); A1.SetUnfillOrderNumber(SellCallNum); if (A1.Unfill.count > 0) { CallInID = A1.OrderReplacePrice(SellCallNum,Option.GetBidByCode(SellCallCode,2)); } } } //CALL 매도청산 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == CallExID) { ExCallNum = OrderResponse.orderNum; } } function Main_OnTimer(nEventID) { if (nEventID == 11) { Main.KillTimer(11); A1.SetUnfillOrderNumber(ExCallNum); if (A1.Unfill.count > 0) { CallExID = A1.OrderReplacePrice(ExCallNum,Option.GetBidByCode(SellCallCode,1)); } } if (nEventID == 12) { Main.KillTimer(12); A1.SetUnfillOrderNumber(ExCallNum); if (A1.Unfill.count > 0) { CallExID = A1.OrderReplacePrice(ExCallNum,Option.GetCurrentByCode(SellCallCode)); } } if (nEventID == 13) { Main.KillTimer(13); A1.SetUnfillOrderNumber(ExCallNum); if (A1.Unfill.count > 0) { CallExID = A1.OrderReplacePrice(ExCallNum,Option.GetAskByCode(SellCallCode,2)); } } }
프로필 이미지
재령
2013-07-17
1358
글번호 222454
답변완료

차트에 적용된 종목코드 확인 방법 문의입니다.

하기의 방법으로 하면 function Main_OnStart() { Main.MessageLog("시작합니다."); Position = 0; OrdeCode = Main.ReqMarketData(C2.GetCode(1), 0, 0); Main.MessageLog(+OrdeCode); } 1이라는 값이 나옵니다. 제가 원하는 값은 C2 차트의 종목코드입니다. 어떻게 하면 확인이 가능한지 부탁드립니다.
프로필 이미지
큰상
2013-07-16
1212
글번호 222448
답변완료

MessageLog

늘 수고 많으시네요 MessageLog나 MessageList 에서 예스랭귀지 처럼 출력시의 소수점의 자릿수를 제한 하는 방법이 있나 궁금합니다. 소수점이 들어간 출력에 대해서 자리수 조절이 안되서 사용할때 불편한 점이 많네요
프로필 이미지
히말라야
2013-07-16
1164
글번호 222447
답변완료

6103 시스템모니터 복수주문시 응답

6103 시스템모니터를 사용하는 경우 복수주문을 하는 경우에는 응답하지 않는군요. (신호가격등은 나오지만 주문번호, 체결가격 등은 나오지 않음) 전부의 계좌와 주문에 대해 응답하면 제일 좋고 곤란하면 적어도 임의의 계좌 혹은 첫주문 계좌에 대한 응답이라도 있으면 하는데요. 신호별 일지를 간편하게 정리해오다 응답하지 않으니 당황스럽네요...오호통재라...
프로필 이미지
scenario
2013-07-16
1183
글번호 222446
답변완료

6103 모니터화면 청산시각

스탑주문에서만 그런지 모르겠는데... 6103 시스템모니터화면에서 스탑청산시 신호시간이 17:00:00 들어오네요.. 불가피한건가요?
프로필 이미지
scenario
2013-07-16
1282
글번호 222444
답변완료

수식 문의드립니다.

안녕하세요. 예스스팟 수식을 부탁드립니다. 진입은 이미 들어가 있는 상태이고 예스스팟으로 청산주문을 내고 싶습니다. 1. 계좌에 있는 옵션(콜, 풋)를 조회해서 청산주문을 낸다. 옵션잔고는 매도만 있음. (단, 계좌에는 선물도 있지만, 선물에 대해서는 건드리지 않음) 2. 매도청산 주문가격은 매수 1호가로 처음 낸 후 3. 콜, 풋가운데 한 쪽이 먼저 체결되면 반대쪽 콜, 풋의 주문가격을 매도 5호가로 정정한다. ** 콜, 풋 종목이 하나 씩이 아니라 여러 행사가가 계좌잔고에 있을 수 있는 경우에 대해 수식을 부탁드립니다. 혹시, 하나 씩만 있어야 수식작성이 가능하다면, 하는 수 없지만 하나 씩 있는 경우라도 수식을 만들어 주시면 감사하겠습니다. 수고하세요. 감사합니다.
프로필 이미지
nobound
2013-07-13
1326
글번호 222443
답변완료

HTS 비번이 틀렸다고 하네요..

기존 예스트레이더에서 사용하는 아이디와 비번을 4.0에서는 사용하지 못 하나요? 홈피 접속하는 비번과 동일하게 사용하고 있었는데.. 비번이 틀리다는 메세지가 나오네요.. 지금 연속 4회 오류인데 5회면 사용이 제한되잖아요.. 어떤 조치가 필요한지요.. 빠른 답변 부탁드립니다.
프로필 이미지
pak918
2013-07-13
1278
글번호 222442
답변완료

미체결 조회

예스 스팟에 나와있는 시간정정 주문을 선물로 주문을 내는 샘플로 변경한 예제 입니다. 1. 아래의 코딩에서 ID를 부여한후 미체결을 인지하는 코딩은 if(OrderResponse.orderID == ID) 로 보여지는데, 레퍼런스에서 보면 해당코딩은 ID에서 부여한 스팟고유의 번호와 응답에서 받은 고유 번호가 같은 주문 인지를 판단하는 로직으로 보여집니다. 스팟 설명부분에 C.주문응답 이벤트가 발생하면 타이머가 설정이 되고 지정한 60초가 경과한 후 미체결 이면 정정주문을 해야 합니다. 정정주문에 대한 주문응답을 받으면 다시 타이머가 작동되고60초 후에 다시 정정주문을 발생합니다. ==> 주문이 발생한후 해당주문이 체결되었는지, 미체결되었는지 구분하는 코딩셈플을 알고 싶습니다. (제가 이해가 짧은것인지...ㅠ.ㅠ) 2. Unfill 객체를 가지고 특정종목을 매수/매도 주문을 냈을때 , 특정종목의 체결 미체결 여부를 알 수 있는 샘플 코딩 부탁드리겠습니다. // < 시간 정정 주문> // 종목객체: Futures(연결선물) // 계좌객체: A1 var ID; // 전역변수의 선언 var Number; var timerCnt=0; // 전략이 예스스팟 전략에 실행될때 ==> 최초 실행시 넣어주어야할 값이나 계산이 있을 때 사용 function Main_OnStart() { // 시작과 동시에 선물매수5호가에 주문을 냄 ID=A1.OrderBuy(Futures.code, 1, Futures.Bid(5)-0.25, 0); Main.MessageLog(" 주문ID " + ID); Main.MessageLog(" 주무종목 " + Futures.code); Main.MessageLog(" 1차주문가격 " + Futures.Bid(5)-0.25); } //주문에 관한 응답을 받으면 function Main_OnOrderResponse(OrderResponse) { if(OrderResponse.orderID == ID) { Number = OrderResponse.orderNum; Main.SetTimer(1,10000); // 10초 동안 타이머를 작동시킴 //LOG Main.MessageLog(" 주문ID " + ID + " 주문번호 " + OrderResponse.orderNum + " 주문가격 " + OrderResponse.orderPrice ); } } function Main_OnTimer(nEventID) { if(nEventID == 1) { ID=A1.OrderReplace(Number,1, Futures.Bid(4)-0.25); Main.KillTimer(1); } // 타이머가 작동한 횟수 timerCnt +=1; Main.MessageLog(" Timer 작동회수 " + timerCnt ); } // 주문이 체결되면 타이머 중지 function Main_OnNotifyFill(NotifyFill) { if(NotifyFill.orderNum == Number) Main.KillTimer(1); }
프로필 이미지
히말라야
2013-07-10
1299
글번호 222439

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

프로필 이미지
inko
2013-07-08
2
글번호 222438