커뮤니티

미완성 신호 객체에 대해

프로필 이미지
nadogaja
2013-05-29 13:57:57
234
글번호 63742
답변완료
시험적용으로 해보니 조건이 충족 될때 가격대에 다을때 마다 주문이 나가는 것으로 나오는데.. 실지 거래에서도 이와 같이 여러번에 걸처 주문이 나가게 되는 것인가요. 만약 그렇다면 민완성 신호의 처음에만 체결 되도록 수식 부탁드립니다. 아래는 예스스팟 수식입니다. 그리고 선물 챠트에서 미완성 신호를 받아와서 옵션에서 체결되도록 되어 있습니다. limt 는 옵션 가격 제한키 위해 외부 변수를 넣은것입니다. var CPrice = new Array(101); var CCode = new Array(101); var PPrice = new Array(101); var PCode = new Array(101); var MaxCall; var MaxCallCode; var MaxPut; var MaxPutCode; function callchart_OnRiseIncompleteSignal(IncompleteSignal) { //ATM 위 행사가 갯수 UNum = Option.uppersATM; //ATM 위 행사가 갯수 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); //3.0이하의 가격을 가지는 콜종목은 해당 값과 종목코드 저장 //3.0을 초과하는 콜종목은 가격과 종목코드를 모두 -1 처리 for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) <= limit) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = -1; CallCode[i+LNum] = -1; } Main.MessageLog(i+"콜종목코드:"+CallCode[i+LNum]+"/가격:"+CallPrice[i+LNum]); } //3.0이하의 가격을 가지는 풋종목은 해당 값과 종목코드 저장 //3.0을 초과하는 풋종목은 가격과 종목코드를 모두 -1 처리 for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) <= limit) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = -1; PutCode[ii+UNum] = -1; } // Main.MessageLog(ii+"풋종목코드:"+PutCode[ii+UNum]+"/가격:"+PutPrice[ii+UNum]); } //각 배열에 저장된 값중 가장 큰 값을 찾음 var CC = -1; var CallOrderCode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum]; } } var PP = -1; var PutOrderCode = -1; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] > PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } Main.MessageLog("--------------------------------------------"); Main.MessageLog("콜주문종목코드:"+CallOrderCode+"/가격:"+CC); // Main.MessageLog("풋주문종목코드:"+PutOrderCode+"/가격:"+PP); if (IncompleteSignal.signalKind == 1) { Main.OrderBuy(a2.number, CallOrderCode, IncompleteSignal.count, Option.GetAskByCode(CallOrderCode, 3), 0) buycode = CallOrderCode; } if (IncompleteSignal.signalKind == 2) { Main.OrderSell(a2.number, CallOrderCode,IncompleteSignal.count, Option.GetBidByCode(buycode, 3), 0) } }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-05-29 16:02:16

안녕하세요 예스스탁입니다. 미완성 신호는 봉이 미완성이고 시세가 수신되면 if조건이 만족할때 마다 발생됩니다. 봉의 시가 수신수 첫번재 미완성 신호일때 발생하게 수정했습니다. var CPrice = new Array(101); var CCode = new Array(101); var PPrice = new Array(101); var PCode = new Array(101); var MaxCall; var MaxCallCode; var MaxPut; var MaxPutCode; var cnt; function Main_OnStart() { cnt = 0; } function callchart_OnBarAppended(nData) { cnt = 0; } function callchart_OnRiseIncompleteSignal(IncompleteSignal) { //ATM 위 행사가 갯수 UNum = Option.uppersATM; //ATM 위 행사가 갯수 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); //3.0이하의 가격을 가지는 콜종목은 해당 값과 종목코드 저장 //3.0을 초과하는 콜종목은 가격과 종목코드를 모두 -1 처리 for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) <= limit) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = -1; CallCode[i+LNum] = -1; } Main.MessageLog(i+"콜종목코드:"+CallCode[i+LNum]+"/가격:"+CallPrice[i+LNum]); } //3.0이하의 가격을 가지는 풋종목은 해당 값과 종목코드 저장 //3.0을 초과하는 풋종목은 가격과 종목코드를 모두 -1 처리 for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) <= limit) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = -1; PutCode[ii+UNum] = -1; } // Main.MessageLog(ii+"풋종목코드:"+PutCode[ii+UNum]+"/가격:"+PutPrice[ii+UNum]); } //각 배열에 저장된 값중 가장 큰 값을 찾음 var CC = -1; var CallOrderCode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum]; } } var PP = -1; var PutOrderCode = -1; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] > PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } Main.MessageLog("--------------------------------------------"); Main.MessageLog("콜주문종목코드:"+CallOrderCode+"/가격:"+CC); // Main.MessageLog("풋주문종목코드:"+PutOrderCode+"/가격:"+PP); if (cnt == 0 && IncompleteSignal.signalKind == 1 && callchart.GetOpenContracts() == 0) { cnt = 1; Main.OrderBuy(a2.number, CallOrderCode, IncompleteSignal.count, Option.GetAskByCode(CallOrderCode, 3), 0) buycode = CallOrderCode; } if (cnt == 0 && IncompleteSignal.signalKind == 2 && callchart.GetOpenContracts() >= 1) { cnt = 1; Main.OrderSell(a2.number, CallOrderCode,IncompleteSignal.count, Option.GetBidByCode(buycode, 3), 0) } } 즐거운 하루되세요 > nadogaja 님이 쓴 글입니다. > 제목 : 미완성 신호 객체에 대해 > 시험적용으로 해보니 조건이 충족 될때 가격대에 다을때 마다 주문이 나가는 것으로 나오는데.. 실지 거래에서도 이와 같이 여러번에 걸처 주문이 나가게 되는 것인가요. 만약 그렇다면 민완성 신호의 처음에만 체결 되도록 수식 부탁드립니다. 아래는 예스스팟 수식입니다. 그리고 선물 챠트에서 미완성 신호를 받아와서 옵션에서 체결되도록 되어 있습니다. limt 는 옵션 가격 제한키 위해 외부 변수를 넣은것입니다. var CPrice = new Array(101); var CCode = new Array(101); var PPrice = new Array(101); var PCode = new Array(101); var MaxCall; var MaxCallCode; var MaxPut; var MaxPutCode; function callchart_OnRiseIncompleteSignal(IncompleteSignal) { //ATM 위 행사가 갯수 UNum = Option.uppersATM; //ATM 위 행사가 갯수 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); //3.0이하의 가격을 가지는 콜종목은 해당 값과 종목코드 저장 //3.0을 초과하는 콜종목은 가격과 종목코드를 모두 -1 처리 for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) <= limit) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = -1; CallCode[i+LNum] = -1; } Main.MessageLog(i+"콜종목코드:"+CallCode[i+LNum]+"/가격:"+CallPrice[i+LNum]); } //3.0이하의 가격을 가지는 풋종목은 해당 값과 종목코드 저장 //3.0을 초과하는 풋종목은 가격과 종목코드를 모두 -1 처리 for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) <= limit) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = -1; PutCode[ii+UNum] = -1; } // Main.MessageLog(ii+"풋종목코드:"+PutCode[ii+UNum]+"/가격:"+PutPrice[ii+UNum]); } //각 배열에 저장된 값중 가장 큰 값을 찾음 var CC = -1; var CallOrderCode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum]; } } var PP = -1; var PutOrderCode = -1; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] > PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } Main.MessageLog("--------------------------------------------"); Main.MessageLog("콜주문종목코드:"+CallOrderCode+"/가격:"+CC); // Main.MessageLog("풋주문종목코드:"+PutOrderCode+"/가격:"+PP); if (IncompleteSignal.signalKind == 1) { Main.OrderBuy(a2.number, CallOrderCode, IncompleteSignal.count, Option.GetAskByCode(CallOrderCode, 3), 0) buycode = CallOrderCode; } if (IncompleteSignal.signalKind == 2) { Main.OrderSell(a2.number, CallOrderCode,IncompleteSignal.count, Option.GetBidByCode(buycode, 3), 0) } }