커뮤니티

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

프로필 이미지
파문일기
2014-04-05 14:45:40
703
글번호 222901

첨부 이미지

수고하십니다. 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); } } } }
답변 1
프로필 이미지

파문일기

2014-04-03 12:33:53

> 파문일기 님이 쓴 글입니다. 1. 지난번의 답변 감사합니다 옵션 선정시 GetCurrent를 사용하면 확장챠트가 만들어지지만, GetExpectedPrice를 쓰면 사진과 같아 "undefined" 는 조회대상이 아닙니다라고 뜨는데... 2. 실매매의 경우는 시초가의 가격을 근거로 하루 매매를 하는것이 좋습니다. GetCurrent의 경우는 시세가 나게되면 주종목의 행사가가 위나 아래의 행사가로 바뀌기 때문에 GetExpectedPrice를 쓸수있는 방법을 알고 싶습니다. ---> 여러모로 시도해 보다가 GetExpectedPrice 가격은 장시작전에 예스스팟을 걸어놓아야 가동이 되는군요 장시작후에 걸면 위와같이 조회대상이 아니라고 뜨면서 않되고, 장시작전에 예상가격에 맞춰 챠트를 미리 생성하니까 장시작후 흔들리면서 데이타가 쏟아져 들어와도 꺼지지는 않네요. GetCurrent는 장시작전에 걸어놓으면 시작과 동시에 챠트를 생성해야 하니깐 먹통이 되네요. 장시작후 한가한 데이타가 나올때 예스스팟을 걸면 챠트가 생성되네요... 3. 진입가격은 오늘 제대로 나오네요- 확장챠트에서 시스템이 연결된 실챠트에서는 시험가동시 주문가격이 않나오나요? 모두 0.00 으로만 나오는데..