커뮤니티

옵션 종목 찾기 (1 이하이면서 가장 가까운 종목)

프로필 이미지
곰탈
2013-08-28 14:36:54
965
글번호 222536
답변완료
안녕하세요. 아래 예제 식은 프리미엄 1 이상이면서 가장 가까운 종목을 찾는 것인데요, 약간 다르게 1 "이하"이면서 가장 가까운 종목을 찾도록 변경하고 싶습니다. 배열 순서를 바꾸면 될 것 같은데 막상 하려니 잘 안되네요. 도움 주시면 고맙겠습니다. var Start; var UNum; var LNum; var CallCode; var CallPrice; var PutCode; var PutPrice; var CC; var PP; var CallOrderCode; var PutOrderCode; function Main_OnStart() { Start = 0; } //차트에서 신호가 발생 function Chart1_OnRiseSignal(Signal) { //Buy신호이면 if (Signal.signalKind == 1) { Start = 1; //옵션 1.0 이상 종목 중 1에 가장 가까운 가격을 가지는 콜/풋 종목을 찾음 UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) >= 1.0) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = 9999999; CallCode[i+LNum] = 9999999; } } for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) >= 1.0 ) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = 9999999; PutCode[ii+UNum] = 9999999; } } var CC = 9999999; var CallOrderCode = 9999999; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] < CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } var PP = 9999999; var PutOrderCode = 9999999; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] < PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } //콜매수 if (CC < 9999999) Account1.OrderBuy(CallOrderCode, 1, 0,1); //풋매도 if (PP < 9999999) Account1.OrderSell(PutOrderCode, 1, 0,1); } //exitlong신호 발생하면 if (Signal.signalKind == 2 && Start == 1) { Account1.OrderSell(CallOrderCode, 1, 0, 1); Account1.OrderBuy(PutOrderCode, 1, 0, 1); } //Sell신호이면 if (Signal.signalKind == 3) { Start = 1; //옵션 1.0 이상 종목 중 1에 가장 가까운 가격을 가지는 콜/풋 종목을 찾음 UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) >= 1.0) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = 9999999; CallCode[i+LNum] = 9999999; } } for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) >= 1.0 ) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = 9999999; PutCode[ii+UNum] = 9999999; } } var CC = 9999999; var CallOrderCode = 9999999; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] < CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } var PP = 9999999; var PutOrderCode = 9999999; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] < PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } //콜매도 if (CC > 0) Account1.OrderSell(CallOrderCode, 1, 0,1); //풋매수 if (PP > 0) Account1.OrderBuy(CallOrderCode, 1, 0,1); } //exitshort신호 발생하면 if (Signal.signalKind == 4 && Start == 1) { Account1.OrderBuy(CallOrderCode, 1, 0, 1); Account1.OrderSell(PutOrderCode, 1, 0, 1); } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-09-03 15:59:01

안녕하세요 예스스탁입니다. 이전식은 지정한 값 이하의 종목은 9999999값을 주고 전체에서 가장 작은 값을 찾았습니다. 아래 변경된 식은 지정한 값 이상의 종목은 -1값을 주고 전체에서 가장 큰값을 찾게 변경했습니다. 아래식 참고하시기 바랍니다. var Start; var UNum; var LNum; var CallCode; var CallPrice; var PutCode; var PutPrice; var CC; var PP; var CallOrderCode; var PutOrderCode; function Main_OnStart() { Start = 0; } //차트에서 신호가 발생 function Chart1_OnRiseSignal(Signal) { //Buy신호이면 if (Signal.signalKind == 1) { Start = 1; //옵션 1.0 이하 종목 중 1에 가장 가까운 가격을 가지는 콜/풋 종목을 찾음 UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) <= 1.0) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = -1; CallCode[i+LNum] = -1; } } for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) <= 1.0 ) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = -1; PutCode[ii+UNum] = -1; } } 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]; } } //콜매수 if (CC < 9999999) Account1.OrderBuy(CallOrderCode, 1, 0,1); //풋매도 if (PP < 9999999) Account1.OrderSell(PutOrderCode, 1, 0,1); } //exitlong신호 발생하면 if (Signal.signalKind == 2 && Start == 1) { Account1.OrderSell(CallOrderCode, 1, 0, 1); Account1.OrderBuy(PutOrderCode, 1, 0, 1); } //Sell신호이면 if (Signal.signalKind == 3) { Start = 1; //옵션 1.0 이하 종목 중 1에 가장 가까운 가격을 가지는 콜/풋 종목을 찾음 UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) <= 1.0) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = -1; CallCode[i+LNum] = -1; } } for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) <= 1.0 ) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = -1; PutCode[ii+UNum] = -1; } } 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]; } } //콜매도 if (CC > 0) Account1.OrderSell(CallOrderCode, 1, 0,1); //풋매수 if (PP > 0) Account1.OrderBuy(CallOrderCode, 1, 0,1); } //exitshort신호 발생하면 if (Signal.signalKind == 4 && Start == 1) { Account1.OrderBuy(CallOrderCode, 1, 0, 1); Account1.OrderSell(PutOrderCode, 1, 0, 1); } } 즐거운 하루되세요 > 곰탈 님이 쓴 글입니다. > 제목 : 옵션 종목 찾기 (1 이하이면서 가장 가까운 종목) > 안녕하세요. 아래 예제 식은 프리미엄 1 이상이면서 가장 가까운 종목을 찾는 것인데요, 약간 다르게 1 "이하"이면서 가장 가까운 종목을 찾도록 변경하고 싶습니다. 배열 순서를 바꾸면 될 것 같은데 막상 하려니 잘 안되네요. 도움 주시면 고맙겠습니다. var Start; var UNum; var LNum; var CallCode; var CallPrice; var PutCode; var PutPrice; var CC; var PP; var CallOrderCode; var PutOrderCode; function Main_OnStart() { Start = 0; } //차트에서 신호가 발생 function Chart1_OnRiseSignal(Signal) { //Buy신호이면 if (Signal.signalKind == 1) { Start = 1; //옵션 1.0 이상 종목 중 1에 가장 가까운 가격을 가지는 콜/풋 종목을 찾음 UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) >= 1.0) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = 9999999; CallCode[i+LNum] = 9999999; } } for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) >= 1.0 ) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = 9999999; PutCode[ii+UNum] = 9999999; } } var CC = 9999999; var CallOrderCode = 9999999; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] < CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } var PP = 9999999; var PutOrderCode = 9999999; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] < PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } //콜매수 if (CC < 9999999) Account1.OrderBuy(CallOrderCode, 1, 0,1); //풋매도 if (PP < 9999999) Account1.OrderSell(PutOrderCode, 1, 0,1); } //exitlong신호 발생하면 if (Signal.signalKind == 2 && Start == 1) { Account1.OrderSell(CallOrderCode, 1, 0, 1); Account1.OrderBuy(PutOrderCode, 1, 0, 1); } //Sell신호이면 if (Signal.signalKind == 3) { Start = 1; //옵션 1.0 이상 종목 중 1에 가장 가까운 가격을 가지는 콜/풋 종목을 찾음 UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) >= 1.0) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = 9999999; CallCode[i+LNum] = 9999999; } } for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) >= 1.0 ) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = 9999999; PutCode[ii+UNum] = 9999999; } } var CC = 9999999; var CallOrderCode = 9999999; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] < CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } var PP = 9999999; var PutOrderCode = 9999999; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] < PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } //콜매도 if (CC > 0) Account1.OrderSell(CallOrderCode, 1, 0,1); //풋매수 if (PP > 0) Account1.OrderBuy(CallOrderCode, 1, 0,1); } //exitshort신호 발생하면 if (Signal.signalKind == 4 && Start == 1) { Account1.OrderBuy(CallOrderCode, 1, 0, 1); Account1.OrderSell(PutOrderCode, 1, 0, 1); } }