커뮤니티

예스스팟 Q&A

답변완료

문의드립니다.

YesLanguage 같은 경우에는 수식을 읽는 순서가 위에서 아래로 잖아요. 그런데 예스스팟은 편집창이 여러개인데요. 수식을 읽는 순서가 어떻게 되는 건가요? 그리고 YesLanguage 같이 전략을 구현하는 부분이 예스스팟에선 스크립트 편집창인가요?
프로필 이미지
무결점
2014-04-07
1032
글번호 222915
답변완료

OrderResponse 질문입니다.

주문응답 후, OrderResponse에서 주문 성공 여부를 확인을 하려고 합니다. 동시호가 상태에서 주문하는 경우 때문에, 체결통보(NotifyFill) 에선 확인이 불가능합니다. 주문이 성공적으로 성공한 경우 확인방법이나, 성공했을경우의 OrderResponse.error 값이 어떻게 되나요?
프로필 이미지
서크
2014-04-06
1004
글번호 222914
답변완료

선물과 등가옵션으로...

안녕하세요 1. 선물 시초가나 예상가를 기준으로 당일의 등가 콜풋옵션을 확장챠트로 만들고 싶습니다. 전의 질문란에 올려져 있는 것을 참조로 만들어 보았는데.. 콜과 풋의 등가옵션이 그날그날 바뀌지 않겨 조회 처음부터 연결이 되어 있네요. 위의 그림은 오늘(4.3)의 시초가 기준, 2월 28일은 선물 시초가 257.8인 257.5 양옵션의 기준이 되어야 하는데... 시뮬레이션 항목의 시가기준 ATM을 만들고 싶습니다 해결방법을 좀 알려주세요 감사합니다. 옵션객체 종목객체.MarketData1 var Start; var CallATM; var PutATM; var OrderCode; var MarketData1; //스팟 시작시에 function Main_OnStart() { Start = 0; OrderCode = Main.GetOrderCode(MarketData1.code); //날자 및 시계계산 var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //코스피200선물에 가장 가까운 콜/풋 종목 선정 var var1 = MarketData1.current;//expectedPrice var var2 = parseInt(var1/10)*10; var var3 = var1%10; var ATM = -1; if (var3 >= 8.75) ATM = var2+10; else if (var3 < 8.75 && var3 >= 6.25) ATM = var2+7.5; else if (var3 < 6.25 && var3 >= 3.75) ATM = var2+5.0; else if (var3 < 3.75 && var3 >= 1.25) ATM = var2+2.5; else ATM = var2+0.0; if (Start == 0 && HHMMSS >= 090000) { var UNum = Option.uppersATM; var LNum = Option.lowersATM; CallATM = -1; for (var i = -LNum; i <= UNum; i++) { if (Option.GetExercisePrice(0, i) == ATM) CallATM = Option.GetATMCallRecent(i); } PutATM = -1; for (var i = -UNum; i <= LNum; i++) { if (Option.GetExercisePrice(1, i) == ATM) PutATM = Option.GetATMPutRecent(i); } Main.MessageList("콜ATM",CallATM ,"풋ATM",PutATM); //확장 차트객체 요청 var ChartSet3 = new ReqChartItem("00000000",60, CHART_PERIOD_TICK, 5000, CHART_REQCOUNT_BAR, false, false); //시스템 설정 var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT,1, 10000000,1, // 자산 0.003, 0.003,CALCMETHOD_PERCENT, // 진입/청산 수수료 0.05, 0.05,CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 1000, //1000, // 최대진입수량 10); // 최대진입횟수 var SystemSet3 = new SystemInfo("OpFuture",YL_TYPE_NORMAL,null,TradeSet,null); //참조데이터 추가 var R11 = new ReqChartItem(CallATM, 60, CHART_PERIOD_TICK, 5000, CHART_REQCOUNT_BAR, false, false); var R12 = new ReqChartItem(PutATM, 60, CHART_PERIOD_TICK, 5000, CHART_REQCOUNT_BAR, false, false); var ReferDataSet3 = new Array(R11,R12); //지정한 설정으로 챠트 생성을 요청 Main.ReqChartEx(ChartSet3,SystemSet3,null,ReferDataSet3); } } //요청한 차트객체 생성이 완료되면 function Main_OnRcvChartEx(ChartEx) { if ( ChartEx.GetCode(1) == OrderCode.code) { ChartEx3 = ChartEx; Start = 1; } }
프로필 이미지
파문일기
2014-04-05
1027
글번호 222913
답변완료

질문요..

종목 객체 를 연결선물로 지정하고 function Main_OnUpd-ateMarket(sItemCode, lUp-dateID) bidamount 를 메세지로그 하니 주식만 가능하다고 하는군요. 선물 호가 잔량을 로그로 보려면 어떻게 해야하나요... 1호가 2호가 이렇게 나누어서 보고싶습니다.
프로필 이미지
nadogaja
2014-04-03
895
글번호 222910

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

프로필 이미지
nadogaja
2014-04-03
0
글번호 222908

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

프로필 이미지
nadogaja
2014-04-03
4
글번호 222907

마루아빠 님에 의해서 삭제되었습니다.

프로필 이미지
마루아빠
2014-04-02
4
글번호 222906

마루아빠 님에 의해서 삭제되었습니다.

프로필 이미지
마루아빠
2014-04-02
0
글번호 222905
답변완료

지금 예스 스팟 옵션 객체가 사용이 되나요?

Option.GetATMCallRecent Option.GetCurrent 함수를 사용해서 불러와도 공백 데이터가 오네요. 현재 사용 가능한가요?
프로필 이미지
여의도개미핥기
2014-04-02
585
글번호 222904

확장챠트에서 시스템 설정에 문제가 있는지...

수고하십니다. 1. 지난번의 답변 감사합니다 3.시험가동에선 주문가격이 1.-2147483648 으로 이상하게 나오고 체결가격은 실체결에서만 나오는 건지 궁금합니다. 5. 예스랭기지 시스템에서의 한두종류의 신호와 수량을 스팟에서 이용하고 싶은데, 가능한 방법은 있는지요? 점검좀 부탁드립니다 감사합니다 var Start; var UNum; var LNum; var CallCode; var CallPrice; var PutCode; var PutPrice; var CC; var PP; var CallOrderCode; var PutOrderCode; var vol1;var vol3; var vol2;var vol4; var CallStart; var PutStart; var ChartEx1 = null; var ChartEx2 = null; function Main_OnStart() { Start = 0; vol1 = 0; vol2 = 0; CallStart = 0; PutStart = 0; var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //9시 5분에 if (Start == 0 && HHMMSS >= 085500)// && HHMMSS >= 90030 { Start = 1; UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { CallPrice[i+LNum] = Math.abs(Option.GetExpectedPrice(0, i)-2.3); CallCode[i+LNum] = Option.GetATMCallRecent(i); } CC = 99999999; // CallOrderCode = -1; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum]; } if (CallOrderCode == CallCode[i+LNum]) { CallOrderCode1 = CallCode[i+LNum-1]; CallOrderCode2 = CallCode[i+LNum+1]; CallOrderCode3 = CallCode[i+LNum+2]; } } for (var ii = -UNum; ii <= LNum; ii++) { PutPrice[ii+UNum] = Math.abs(Option.GetExpectedPrice(1, ii)-2.3); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } PP = 99999999; // PutOrderCode = -1; for (var ii = -UNum; ii < LNum; ii++) { if (PutPrice[ii+UNum] <= PP) { PP = PutPrice[ii+UNum]; PutOrderCode = PutCode[ii+UNum]; } if (PutOrderCode == PutCode[ii+UNum]) { PutOrderCode1 = PutCode[ii+UNum-1]; PutOrderCode2 = PutCode[ii+UNum+1]; PutOrderCode3 = PutCode[ii+UNum+2]; PutOrderCode4 = PutCode[ii+UNum+3]; } } Main.MessageList("콜",CallOrderCode ,"풋",PutOrderCode); //확장 차트객체 요청 var ChartSet1 = new ReqChartItem(CallOrderCode,60, CHART_PERIOD_TICK, 1200, CHART_REQCOUNT_BAR, false, false); var ChartSet2 = new ReqChartItem(PutOrderCode,60, CHART_PERIOD_TICK, 1200, CHART_REQCOUNT_BAR, false, false); //시스템 설정 var TradeSet = new SystemTradeInfo(TRADE_FIXCAPITAL,1, 10000000,1, // 자산 0.07, 0.07,CALCMETHOD_PERCENT, // 진입/청산 수수료 0.01, 0.01,CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 1000, //1000, // 최대진입수량 10); // 최대진입횟수 var StopSet = new SystemStopInfo(new StopEndOfDay(150300)); var SystemSet1 = new SystemInfo("OpCall",YL_TYPE_NORMAL,null,TradeSet,null); //참조데이터 추가 var R11 = new ReqChartItem(PutOrderCode, 60, CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false); var R12 = new ReqChartItem(PutOrderCode1, 20, CHART_PERIOD_TICK, 1200, CHART_REQCOUNT_BAR, false, false); var R13 = new ReqChartItem(PutOrderCode2, 60, CHART_PERIOD_TICK, 800, CHART_REQCOUNT_BAR, false, false); var R14 = new ReqChartItem(CallOrderCode1, 20, CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false); var R15 = new ReqChartItem(CallOrderCode2, 60, CHART_PERIOD_TICK, 800, CHART_REQCOUNT_BAR, false, false); var R16 = new ReqChartItem("00000000", 60, CHART_PERIOD_TICK, 1500, CHART_REQCOUNT_BAR, false, false); var R17 = new ReqChartItem(PutOrderCode3, 60, CHART_PERIOD_TICK, 600, CHART_REQCOUNT_BAR, false, false); var R18 = new ReqChartItem(PutOrderCode4, 60, CHART_PERIOD_TICK, 600, CHART_REQCOUNT_BAR, false, false); var R19 = new ReqChartItem(CallOrderCode3, 60, CHART_PERIOD_TICK, 600, CHART_REQCOUNT_BAR, false, false); //var R20 = new ReqChartItem("EI735", 60, CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false); var ReferDataSet1 = new Array(R11,R12,R13,R14,R15,R16,R17,R18,R19); //지정한 설정으로 챠트 생성을 요청 Main.ReqChartEx(ChartSet1,SystemSet1,null,ReferDataSet1); } } //요청한 차트객체 생성이 완료되면 function Main_OnRcvChartEx(ChartEx) { if ( ChartEx.GetCode(1) == CallOrderCode) { ChartEx1 = ChartEx; CallStart = 1; Main.MessageList("C코드",ChartEx1.GetCode(1)); } } //확장차트에서 신호나오면 주문 function Main_OnRiseSignal(ChartEx1, Signal) { //콜차트 if (CallStart == 1 && ChartEx1.GetCode(1) == CallOrderCode) { if (Signal.signalKind == 1) { vol1 = Math.abs(Signal.count); Account1.OrderBuy(Signal.code,vol1,Option.GetAskByCode(Signal.code,0),0); Main.MessageList("콜매수 : ", CallOrderCode); } if (Signal.signalKind == 2) { vol2 = Math.abs(Signal.count); //PutOrderCode 종목 잔고 셋팅 Account1.SetBalanceItem(Main.GetOrderCode(CallOrderCode), 0); //잔고수량이 0이상이고 매수포지션이면 if(Account1.Balance.count >= vol2 && Account1.Balance.code == Main.GetOrderCode(CallOrderCode) && Account1.Balance.position == 2) { //잔고수량과 진입수량 중 작은 값으로 청산실행 // Account1.OrderSell(Main.GetOrderCode(CallOrderCode), Math.max(Account1.Balance.count,vol2),Option.GetBidByCode(Main.GetOrderCode(CallOrderCode), 0), 0); Account1.OrderSell(Signal.code,vol2,Option.GetBidByCode(Signal.code,0),0); } if(Account1.Balance.count < vol2 && Account1.Balance.position == 2) { //잔고수량과 진입수량 중 작은 값으로 청산실행 Account1.OrderSell(Main.GetOrderCode(CallOrderCode), Math.min(Account1.Balance.count,vol2),Option.GetBidByCode(CallOrderCode, 0), 0); } } } }
프로필 이미지
파문일기
2014-04-05
702
글번호 222901