커뮤니티

예스스팟 Q&A

답변완료

수식 수정 보완 부탁드립니다

1. 다음 2개의 스팟식이 있습니다 둘 다 스팟식을 실행하면 RangeError : Invalid array length라는 메세지가 뜨면서 안돼는데 스팟식 수정 보완 좀 부탁드립니다. 아래 2개의 스팟식은 차트에서 매수 신호가 나오면 양매수, 매도 신호가 나오면 양매도 하는 스팟식입니다. 2. 차트에서 청산신호(매수청산 혹은 매도청산)가 나오면 계좌에 있는 모든 옵션을 청산하는 스팟식 부탁드립니다 var Start = 0; var BC; var BP; var Bcount1,Bcount2; var SC; var SP; var Scount1,Scount2; var upv = 1.0; var dnv = 0.1; function Main_OnStart() { Start = 0; Main.MessageList("시작",Start); Main.SetTimer(1, 5000); } function Chart1_OnRiseSignal(Signal) { //차트에서 매수신호 발생 if (Signal.signalKind == 1) { //1.0~2.0사이 중 가장 큰 가격을 가지는 종목을 찾음 //ATM위 행사가 갯수 var UNum = Option.uppersATM; //ATM아래 행사가 갯수 var LNum = Option.lowersATM; //각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언 var CallCode = new Array(UNum+LNum+1); //각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언 var CallPrice = new Array(UNum+LNum+1); //각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언 var PutCode = new Array(UNum+LNum+1); //각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언 var PutPrice = new Array(UNum+LNum+1); //콜종목 찾기 //콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로 //for문에서 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 수행하도록 함 for (var i = -LNum; i <= UNum; i++) { //값이 0.7~1.7사이이면 if (Option.GetCurrent(0, i) >= dnv && Option.GetCurrent(0, i) <= upv) { //해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장 CallPrice[i+LNum] = Option.GetCurrent(0, i); //해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장 CallCode[i+LNum] = Option.GetATMCallRecent(i); //주의 //배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터 //저장하도록 작성해야 함 } else//0.7~1.7 사이가 아니면 { //배열변수 CallPrice의 방번호 i+LNum에 -1 저장 CallPrice[i+LNum] = -1; //배열변수 CallCode의 방번호 i+LNum에 -1 저장 CallCode[i+LNum] = -1; } } //풋종목 찾기 //풋옵션은 ATM기준 아래 행사가 +단계, 위가 -단계이므로 //for문에서 HNum의 역수부터 시작해서 LNum까지 1씩 증가하면서 수행하도록 함 for (var i = -UNum; i <= LNum; i++) { //값이 0.7~1.7사이이면 if (Option.GetCurrent(1, i) >= dnv && Option.GetCurrent(1, i) <= upv ) { //해당종목의 현재가를 배열변수 PutPrice의 방번호 ii+LNum에 저장 PutPrice[i+UNum] = Option.GetCurrent(1, i); //해당종목의 현재가를 배열변수 PutCode의 방번호 ii+LNum에 저장 PutCode[i+UNum] = Option.GetATMPutRecent(i); } else //2.0보다 크면 { //배열변수 PutPrice의 방번호 ii+LNum에 -1 저장 PutPrice[i+UNum] = -1; //배열변수 PutCode의 방번호 ii+LNum에 -1 저장 PutCode[i+UNum] = -1; } } //배열변수 CallPrice의 각 배열방의 값중 가장 큰값을 찾아 CC에 저장하고 //CallCode의 동일 방번호의 값을 CallOrderCode에 저장 var CC = -1; var CallOrderCode = -1; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] > CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } //배열변수 PutPrice의 각 배열방의 값중 가장 큰값을 찾아 PP에 저장하고 //PutCode의 동일 방번호의 값을 PutOrderCode에 저장 var PP = -1; var PutOrderCode = -1; for (var i = -UNum; i <= LNum; i++) { if (PutPrice[i+UNum] > PP) { PP = PutPrice[i+UNum]; PutOrderCode = PutCode[i+UNum]; } } if (CC > 0 && PP > 0) { Start = 1; BC = CallOrderCode; Bcount1 = Math.floor(10/Option.GetAskByCode(BC,3)); BP = PutOrderCode; Bcount2 = Math.floor(10/Option.GetAskByCode(BP,3)); Account1.OrderBuy(BC,Signal.count,Option.GetAskByCode(BC,3),0); Account1.OrderBuy(BP,Signal.count,Option.GetAskByCode(BP,3),0); } } //차트에서 매수청산신호 발생 if (Start == 1 && Signal.signalKind == 2) { Start = 0; Account1.OrderSell(BC,Signal.count,Option.GetBidByCode(BC,3),0); Account1.OrderSell(BP,Signal.count,Option.GetBidByCode(BP,3),0); } //차트에서 매도신호 발생 if (Signal.signalKind == 3) { //ATM위 행사가 갯수 var UNum = Option.uppersATM; //ATM아래 행사가 갯수 var LNum = Option.lowersATM; //각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언 var CallCode = new Array(UNum+LNum+1); //각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언 var CallPrice = new Array(UNum+LNum+1); //각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언 var PutCode = new Array(UNum+LNum+1); //각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언 var PutPrice = new Array(UNum+LNum+1); //콜종목 찾기 //콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로 //for문에서 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 수행하도록 함 for (var i = -LNum; i <= UNum; i++) { //값이 0.7~1.7사이이면 if (Option.GetCurrent(0, i) >= dnv && Option.GetCurrent(0, i) <= upv) { //해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장 CallPrice[i+LNum] = Option.GetCurrent(0, i); //해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장 CallCode[i+LNum] = Option.GetATMCallRecent(i); //주의 //배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터 //저장하도록 작성해야 함 } else//0.7~1.7 사이가 아니면 { //배열변수 CallPrice의 방번호 i+LNum에 -1 저장 CallPrice[i+LNum] = -1; //배열변수 CallCode의 방번호 i+LNum에 -1 저장 CallCode[i+LNum] = -1; } } //풋종목 찾기 //풋옵션은 ATM기준 아래 행사가 +단계, 위가 -단계이므로 //for문에서 HNum의 역수부터 시작해서 LNum까지 1씩 증가하면서 수행하도록 함 for (var i = -UNum; i <= LNum; i++) { //값이 0.7~1.7사이이면 if (Option.GetCurrent(1, i) >= dnv && Option.GetCurrent(1, i) <= upv ) { //해당종목의 현재가를 배열변수 PutPrice의 방번호 ii+LNum에 저장 PutPrice[i+UNum] = Option.GetCurrent(1, i); //해당종목의 현재가를 배열변수 PutCode의 방번호 ii+LNum에 저장 PutCode[i+UNum] = Option.GetATMPutRecent(i); } else //2.0보다 크면 { //배열변수 PutPrice의 방번호 ii+LNum에 -1 저장 PutPrice[i+UNum] = -1; //배열변수 PutCode의 방번호 ii+LNum에 -1 저장 PutCode[i+UNum] = -1; } } //배열변수 CallPrice의 각 배열방의 값중 가장 큰값을 찾아 CC에 저장하고 //CallCode의 동일 방번호의 값을 CallOrderCode에 저장 var CC = -1; var CallOrderCode = -1; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] > CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } //배열변수 PutPrice의 각 배열방의 값중 가장 큰값을 찾아 PP에 저장하고 //PutCode의 동일 방번호의 값을 PutOrderCode에 저장 var PP = -1; var PutOrderCode = -1; for (var i = -UNum; i <= LNum; i++) { if (PutPrice[i+UNum] > PP) { PP = PutPrice[i+UNum]; PutOrderCode = PutCode[i+UNum]; } } if (CC > 0 && PP > 0) { Start = -1; SC = CallOrderCode; Scount1 = Math.floor(10/Option.GetBidByCode(SC,3)); SP = PutOrderCode; Scount1 = Math.floor(10/Option.GetBidByCode(SP,3)); Account1.OrderSell(SC,Signal.count,Option.GetBidByCode(SC,3),0); Account1.OrderSell(SP,Signal.count,Option.GetBidByCode(SP,3),0); } } //차트에서 매도청산신호 발생 if (Start == -1 && Signal.signalKind == 4) { Start = 0; Account1.OrderBuy(SC,Signal.count,Option.GetAskByCode(SC,3),0); Account1.OrderBuy(SP,Signal.count,Option.GetAskByCode(SP,3),0); } } ---------------------------------------------------------------------------------------- var Start = 0; var BC; var BP; var Bcount; var SC; var SP; var Scount; var upv = 2.0; var dnv = 0.1; function Main_OnStart() { Start = 0; Main.MessageList("시작",Start); } function Chart1_OnRiseSignal(Signal) { //차트에서 매수신호 발생 if (Signal.signalKind == 1) { //1.0~2.0사이 중 가장 큰 가격을 가지는 종목을 찾음 //ATM위 행사가 갯수 var UNum = Option.uppersATM; //ATM아래 행사가 갯수 var LNum = Option.lowersATM; //각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언 var CallCode = new Array(UNum+LNum+1); //각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언 var CallPrice = new Array(UNum+LNum+1); //각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언 var PutCode = new Array(UNum+LNum+1); //각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언 var PutPrice = new Array(UNum+LNum+1); //콜종목 찾기 //콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로 //for문에서 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 수행하도록 함 for (var i = -LNum; i <= UNum; i++) { //값이 0.7~1.7사이이면 if (Option.GetCurrent(0, i) >= dnv && Option.GetCurrent(0, i) <= upv) { //해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장 CallPrice[i+LNum] = Option.GetCurrent(0, i); //해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장 CallCode[i+LNum] = Option.GetATMCallRecent(i); //주의 //배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터 //저장하도록 작성해야 함 } else//0.7~1.7 사이가 아니면 { //배열변수 CallPrice의 방번호 i+LNum에 -1 저장 CallPrice[i+LNum] = -1; //배열변수 CallCode의 방번호 i+LNum에 -1 저장 CallCode[i+LNum] = -1; } } //풋종목 찾기 //풋옵션은 ATM기준 아래 행사가 +단계, 위가 -단계이므로 //for문에서 HNum의 역수부터 시작해서 LNum까지 1씩 증가하면서 수행하도록 함 for (var i = -UNum; i <= LNum; i++) { //값이 0.7~1.7사이이면 if (Option.GetCurrent(1, i) >= dnv && Option.GetCurrent(1, i) <= upv ) { //해당종목의 현재가를 배열변수 PutPrice의 방번호 ii+LNum에 저장 PutPrice[i+UNum] = Option.GetCurrent(1, i); //해당종목의 현재가를 배열변수 PutCode의 방번호 ii+LNum에 저장 PutCode[i+UNum] = Option.GetATMPutRecent(i); } else //2.0보다 크면 { //배열변수 PutPrice의 방번호 ii+LNum에 -1 저장 PutPrice[i+UNum] = -1; //배열변수 PutCode의 방번호 ii+LNum에 -1 저장 PutCode[i+UNum] = -1; } } //배열변수 CallPrice의 각 배열방의 값중 가장 큰값을 찾아 CC에 저장하고 //CallCode의 동일 방번호의 값을 CallOrderCode에 저장 var CC = -1; var CallOrderCode = -1; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] > CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } //배열변수 PutPrice의 각 배열방의 값중 가장 큰값을 찾아 PP에 저장하고 //PutCode의 동일 방번호의 값을 PutOrderCode에 저장 var PP = -1; var PutOrderCode = -1; for (var i = -UNum; i <= LNum; i++) { if (PutPrice[i+UNum] > PP) { PP = PutPrice[i+UNum]; PutOrderCode = PutCode[i+UNum]; } } if (CC > 0 && PP > 0) { Start = 1; BC = CallOrderCode; BP = PutOrderCode; Bcount = Signal.count; var OP1 = Option1.GetCurrent(BC); if (Option.GetAskByCode(BC,1) > 0) OP1 = Option.GetAskByCode(BC,3); if (Option.GetAskByCode(BC,2) > 0) OP1 = Option.GetAskByCode(BC,3); if (Option.GetAskByCode(BC,3) > 0) OP1 = Option.GetAskByCode(BC,3); var OP2 = Option1.GetCurrent(BP); if (Option.GetAskByCode(BP,1) > 0) OP2 = Option.GetAskByCode(BP,3); if (Option.GetAskByCode(BP,2) > 0) OP2 = Option.GetAskByCode(BP,3); if (Option.GetAskByCode(BP,3) > 0) OP2 = Option.GetAskByCode(BP,3); Account1.OrderBuy(BC,Signal.count,OP1,0); Account1.OrderBuy(BP,Signal.count,OP2,0); } } //차트에서 매수청산신호 발생 if (Start == 1 && Signal.signalKind == 2) { Start = 0; var OP1 = Option1.GetCurrent(BC); if (Option.GetBidByCode(BC,1) > 0) OP1 = Option.GetBidByCode(BC,3); if (Option.GetBidByCode(BC,2) > 0) OP1 = Option.GetBidByCode(BC,3); if (Option.GetBidByCode(BC,3) > 0) OP1 = Option.GetBidByCode(BC,3); var OP2 = Option1.GetCurrent(BP); if (Option.GetBidByCode(BP,1) > 0) OP2 = Option.GetBidByCode(BP,3); if (Option.GetBidByCode(BP,2) > 0) OP2 = Option.GetBidByCode(BP,3); if (Option.GetBidByCode(BP,3) > 0) OP2 = Option.GetBidByCode(BP,3); Account1.OrderSell(BC,Signal.count,OP1,0); Account1.OrderSell(BP,Signal.count,OP2,0); } //차트에서 매도신호 발생 if (Signal.signalKind == 3) { //ATM위 행사가 갯수 var UNum = Option.uppersATM; //ATM아래 행사가 갯수 var LNum = Option.lowersATM; //각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언 var CallCode = new Array(UNum+LNum+1); //각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언 var CallPrice = new Array(UNum+LNum+1); //각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언 var PutCode = new Array(UNum+LNum+1); //각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언 var PutPrice = new Array(UNum+LNum+1); //콜종목 찾기 //콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로 //for문에서 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 수행하도록 함 for (var i = -LNum; i <= UNum; i++) { //값이 0.7~1.7사이이면 if (Option.GetCurrent(0, i) >= dnv && Option.GetCurrent(0, i) <= upv) { //해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장 CallPrice[i+LNum] = Option.GetCurrent(0, i); //해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장 CallCode[i+LNum] = Option.GetATMCallRecent(i); //주의 //배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터 //저장하도록 작성해야 함 } else//0.7~1.7 사이가 아니면 { //배열변수 CallPrice의 방번호 i+LNum에 -1 저장 CallPrice[i+LNum] = -1; //배열변수 CallCode의 방번호 i+LNum에 -1 저장 CallCode[i+LNum] = -1; } } //풋종목 찾기 //풋옵션은 ATM기준 아래 행사가 +단계, 위가 -단계이므로 //for문에서 HNum의 역수부터 시작해서 LNum까지 1씩 증가하면서 수행하도록 함 for (var i = -UNum; i <= LNum; i++) { //값이 0.7~1.7사이이면 if (Option.GetCurrent(1, i) >= dnv && Option.GetCurrent(1, i) <= upv ) { //해당종목의 현재가를 배열변수 PutPrice의 방번호 ii+LNum에 저장 PutPrice[i+UNum] = Option.GetCurrent(1, i); //해당종목의 현재가를 배열변수 PutCode의 방번호 ii+LNum에 저장 PutCode[i+UNum] = Option.GetATMPutRecent(i); } else //2.0보다 크면 { //배열변수 PutPrice의 방번호 ii+LNum에 -1 저장 PutPrice[i+UNum] = -1; //배열변수 PutCode의 방번호 ii+LNum에 -1 저장 PutCode[i+UNum] = -1; } } //배열변수 CallPrice의 각 배열방의 값중 가장 큰값을 찾아 CC에 저장하고 //CallCode의 동일 방번호의 값을 CallOrderCode에 저장 var CC = -1; var CallOrderCode = -1; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] > CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } //배열변수 PutPrice의 각 배열방의 값중 가장 큰값을 찾아 PP에 저장하고 //PutCode의 동일 방번호의 값을 PutOrderCode에 저장 var PP = -1; var PutOrderCode = -1; for (var i = -UNum; i <= LNum; i++) { if (PutPrice[i+UNum] > PP) { PP = PutPrice[i+UNum]; PutOrderCode = PutCode[i+UNum]; } } if (CC > 0 && PP > 0) { Start = -1; SC = CallOrderCode; SP = PutOrderCode; Scount = Signal.count; var OP1 = Option1.GetCurrent(SC); if (Option.GetAskByCode(SC,1) > 0) OP1 = Option.GetAskByCode(SC,3); if (Option.GetAskByCode(SC,2) > 0) OP1 = Option.GetAskByCode(SC,3); if (Option.GetAskByCode(SC,3) > 0) OP1 = Option.GetAskByCode(SC,3); var OP2 = Option1.GetCurrent(SP); if (Option.GetAskByCode(SP,1) > 0) OP2 = Option.GetAskByCode(SP,3); if (Option.GetAskByCode(SP,2) > 0) OP2 = Option.GetAskByCode(SP,3); if (Option.GetAskByCode(SP,3) > 0) OP2 = Option.GetAskByCode(SP,3); Account1.OrderSell(SC,Signal.count,OP1,0); Account1.OrderSell(SP,Signal.count,OP2,0); } } //차트에서 매도청산신호 발생 if (Start == -1 && Signal.signalKind == 4) { Start = 0; var OP1 = Option1.GetCurrent(SC); if (Option.GetBidByCode(SC,1) > 0) OP1 = Option.GetBidByCode(SC,3); if (Option.GetBidByCode(SC,2) > 0) OP1 = Option.GetBidByCode(SC,3); if (Option.GetBidByCode(SC,3) > 0) OP1 = Option.GetBidByCode(SC,3); var OP2 = Option1.GetCurrent(SP); if (Option.GetBidByCode(SP,1) > 0) OP2 = Option.GetBidByCode(SP,3); if (Option.GetBidByCode(SP,2) > 0) OP2 = Option.GetBidByCode(SP,3); if (Option.GetBidByCode(SP,3) > 0) OP2 = Option.GetBidByCode(SP,3); Account1.OrderBuy(SC,Signal.count,OP1,0); Account1.OrderBuy(SP,Signal.count,OP2,0); } }
프로필 이미지
무명
2015-12-20
1956
글번호 223747
답변완료

미니옵션으로 변환식 부탁합니다.

아래식을 미니옵션으로 변경하여 거래 하려고 합니다. var CallOrderCode,PutOrderCode; var Entry, Exit; function Main_OnStart() { Entry = false; Exit = false; Main.SetTimer(1, 5000); } function Main_OnTimer(nEventID) { if (nEventID <= 1) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //14시 30분 if (Entry == false && HHMMSS >= 143000 && HHMMSS <= 143100 ) { Entry = true; //차트가 무포지션 if (Chart1.GetOpenContracts() == 0) { Main.SetUserValue("CallOrderCode", ""); Main.SetUserValue("PutOrderCode", ""); } //차트가 매수유지봉 if (Chart1.GetOpenContracts() > 0) { Main.MessageList("--------------------------------------------"); Main.MessageList("매수신호유지"); var UNum = Option.uppersATM; var LNum = Option.lowersATM; //콜옵션중 3.0에 가장 가까운 종목 //콜옵션 모든 종목을 현재가-3.0을 해서 절대값을 취해 저장 var CallCode = new Array(UNum+LNum+1); var CallPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-3.0); CallCode[i+LNum] = Option.GetATMCallRecent(i); } //저장된 절대값중 가장 작은 종목의 값과 종목코드 계산 var CC = 99999999; CallOrderCode = ""; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } //풋옵션중 3.0에 가장 가까운 종목 //풋옵션 모든 종목을 현재가-3.0을 해서 절대값을 취해 저장 var PutCode = new Array(UNum+LNum+1); var PutPrice = new Array(UNum+LNum+1); for (var i = -UNum; i <= LNum; i++) { PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-3.0); PutCode[i+UNum] = Option.GetATMPutRecent(i); } //저장된 절대값중 가장 작은 종목의 값과 종목코드 계산 var PP = 99999999; PutOrderCode = ""; for (var i = -UNum; i <= LNum; i++) { if (PutPrice[i+UNum] < PP) { PP = PutPrice[i+UNum]; PutOrderCode = PutCode[i+UNum]; } } //종목을 찾았으면 if (CC < 99999999 && PP < 99999999) { Account1.OrderSell(PutOrderCode1, Vo1, Option.GetBid(PutOrderCode, 3), 0); Account1.OrderSell(CallOrderCode, Vo1, Option.GetBid(CallOrderCode, 3), 0); Main.SetUserValue("PutOrderCode", PutOrderCode); Main.SetUserValue("CallOrderCode", CallOrderCode); } =================== 중 략 ========================================================= //13시 30분 if (Exit == false && HHMMSS >= 133000 && HHMMSS <= 133100 ) { Exit = true; //내부파일의 값을 가져와 변수에 저장 var PreDayCall = Main.GetUserValue("CallOrderCode"); var PreDayPut = Main.GetUserValue("PutOrderCode"); //PreDayCall에 값이 있으면 if (PreDayCall != "") { //잔고셋팅후 매도포지션이면 청산하고 //내부파일의 값을 빈공간으로 만듬 Account1.SetBalanceItem(PreDayCall,0) if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1); Main.SetUserValue("CallOrderCode", ""); } } //PreDayPut에 값이 있으면 if (PreDayPut != "") { //잔고셋팅후 매도포지션이면 청산하고 //내부파일의 값을 빈공간으로 만듬 Account1.SetBalanceItem(PreDayPut,0) if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1); Main.SetUserValue("PutOrderCode", ""); } } //모두 수행후 값을 빈공간으로 만듬 Main.SetUserValue("CallOrderCode", ""); Main.SetUserValue("PutOrderCode", ""); }
프로필 이미지
팡팡
2015-12-14
2008
글번호 223744
답변완료

주문가능수량을 가져올수있는 수식이있나요?

옵션이나 미니선물을 여러개 주문내려고 할때 현재 계좌에서 주문가능금액을 체크해서 옵션 매도 가능 수량이나 미니선물 주문 가능수량을 알수있는방법이 있는지 궁금합니다 예제를 찾아봐도 잘안나와서요. 알려주시면 감사하겠습니다
프로필 이미지
QQQ
2015-12-12
2178
글번호 223743
답변완료

주식발행 총수량 또는 시가총액 함수부재에 따른 세금 30프로

수고하십니다. 내년부터 대주주요건이 코스피 1% 코스닥 2% 이상은 매도시에 양도소득세 1년미만(30%) 또는 20%를 내야합니다. 2016.04.01 이후 그럼 자 문제점이 뭐라고 생각하시는지요! 예스스탁에서는 주식 발행 총수 또는 시가총액을 알수 있는 함수가 없습니다. 이는 예스트레이더 및 예스스팟을 사용자들은 양도소득세 20~30% 내라는 말과 같습니다. 이는 선물에도 적용 된다고 알고있습니다. 중간중간 요청드린 사람들이 많이 있는것으로 압니다. 이번에는 세금과 관련있으니 꼭 예스랭기지 와 예스스팟에 함수를 만들어 주시길 바랍니다.
프로필 이미지
큰상
2015-12-09
2052
글번호 223739
답변완료

예스스팟 기본예제 찾고 싶은데요....

1.예스스팟 기본 시스템수식예제들을 찾아보고싶습니다. 올려 있느곳 있으면 알려주시면 감사하겠습니다. 2. 아래 예스랭귀지 수식을 예로하여 예스스팟에 적용 가능한 수식으로 변경하여 올려 주시면 감사 하겠습니다. 주석을 달아 주시면 더욱 고맙겠습니다. Input : p1(0),k(0),N(0); var1 = ema(c,p1); Buy("B",AtStop,var1+K); ExitLong("bx10",AtStop,Lowest(L,N)); Sell("S",AtStop,var1-k); ExitShort("sx10",AtStop,Highest(H,N));
프로필 이미지
너무조아
2015-12-09
2129
글번호 223738
답변완료

아래식에 진입주문지연 3초 추가 부탁드립니다.

function Main_OnStart() { Main.MessageList("선물to미니_스팟_시작"); } function Chart1_OnRiseSignal(Signal) { //매수신호 발생 if(Signal.signalKind == 1) { Main.MessageList("Buy_Signal"); //매도5호가로 매수주문 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),수량, MarketData1.Ask(5),0); } //매수청산신호발생 if(Signal.signalKind == 2) { Main.MessageList("ExitLong_Signal"); //매수5호가로 매도주문 Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 수량,MarketData1.Bid(5), 0); } //매도신호 발생 if(Signal.signalKind == 3) { Main.MessageList("Sell_Signal"); //잔고셋팅 //매수5호가로 매도주문 Account1.OrderSell(Main.GetOrderCode(MarketData1.code),수량, MarketData1.Bid(5),0); } //매도청산신호발생 if (Signal.signalKind== 4) { Main.MessageList("ExitShort_Signal"); //잔고셋팅 //매도5호가로 매수주문 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 수량,MarketData1.Ask(5), 0); } }
프로필 이미지
시골소년
2015-12-04
2100
글번호 223737

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

프로필 이미지
훈sys
2015-12-04
7
글번호 223733
답변완료

문의드립니다.

안녕하세요. 콜옵션을 진입한 상황에서, 진입이후 콜옵션 가격이 상승하여 평가이익 중이다가 진입가격+1틱에 도달하면 콜옵션 잔고수량을 청산한다. 감사합니다.
프로필 이미지
지나리
2015-12-03
2146
글번호 223732
답변완료

그리드 객체 문의

수고하십니다. 3번째 row부터 9번째 row까지 삭제하려면 명령어를 어떻게 해야 하나요? Grid1.DeleteRows(3,9)가 아닌가요?
프로필 이미지
아이작
2015-12-02
2141
글번호 223731
답변완료

문의드림니다

수식 문의드림니다 선물신호를 이용하여 미니선물을 매매하고자 합니다 선물시스템 매수신호시 미니선물 매수진입하고, 매수청산시 미니선물 매수청산하고 선물시스템 매도신호시 미니선물 매도진입하고, 매도청산시 미니선물 매도청산하는 수식 부탁드림니다 아래 수식은 이전에 다른 분이 문의드려 작성해 주신건데 포지션시스템으로 작성된 것으로 알고 있읍니다 저는 데이당일매매를 하고자 하는데 아래 수식을 수정하여 선물신호를 이용하여 미니선물을 매매&#54643; 수 있는 스팟수식 부탁 드림니다 수량은 외부변수로 만들어 주시면 좋겠습니다 부탁드림니다 ////////////////////////////////////////////////////////////////////////////////// function Main_OnStart() { Main.MessageList("선물to미니_스팟_시작"); } functionChart1_OnRiseSignal(Signal) { //매수신호 발생 if(Signal.signalKind == 1) { Main.MessageList("Buy_Signal"); //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0); //잔고가 매수포지션이 아니면 if (Account1.Balance.position != 2) { //매도5호가로 2계약 매수주문 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),2, MarketData1.Ask(5),0); } } //매수청산신호발생 if(Signal.signalKind == 2) { Main.MessageList("ExitLong_Signal"); //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0); //잔고가 매수포지션이면 if (Account1.Balance.position == 2) { //매수5호가로 잔고수량만큼만 매도주문 Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count,MarketData1.Bid(5), 0); } } //매도신호 발생 if(Signal.signalKind == 3) { Main.MessageList("Sell_Signal"); //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0); //잔고가 매도포지션이 아니면 if (Account1.Balance.position != 1) { //매수5호가로 2계약 매도주문 Account1.OrderSell(Main.GetOrderCode(MarketData1.code),2, MarketData1.Bid(5),0); } } //매도청산신호발생 if (Signal.signalKind== 4) { Main.MessageList("ExitShort_Signal"); //잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0); //잔고가 매도포지션이면 if (Account1.Balance.position == 1) { //매도5호가로 잔고수량만큼만 매수주문 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count,MarketData1.Ask(5), 0); } } }
프로필 이미지
mao
2015-11-27
2107
글번호 223729