커뮤니티

수식변경부탁합니다.

프로필 이미지
팡팡
2017-07-06 22:40:29
2663
글번호 224190
답변완료
안녕하세요 아래 수식은 매수만 되고 매수청산, 매도, 매도청산, 손절매도 안됩니다. 당일매매이며 매수,매도 신호 후 주문수량을 5초 간격으로 1개씩 증가시켜 총 주문 수량을 5개로 한정되게 해주세요. 청산과 손절매는 전체 잔량을 한번에 청산 원합니다. var Start; var CallOrderCode,PutOrderCode; function C1_OnRiseSignal(Signal) { if (Signal.signalKind == 1 ) { Main.MessageList("매수신호발생"); Start = 1; var UNum = Option.uppersATM; var LNum = Option.lowersATM; 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] } } 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) { A1.OrderSell(CallOrderCode, 1, 0, 2); A1.OrderSell(PutOrderCode, 1, 0, 2); } if (Start == 1 && Signal.signalKind == 2 ) { Start = 0; Main.MessageList("매수청산발생"); var UNum = Option.uppersATM; var LNum = Option.lowersATM; A1.OrderBuy(CallOrderCode, 1, 0, 2); A1.OrderBuy(PutOrderCode, 1, 0, 2); } //차트가 매도신호 if (Signal.signalKind == 3 ) { Main.MessageList("매도신호발생"); Start = -1; var UNum = Option.uppersATM; var LNum = Option.lowersATM; } 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] } } 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) { A1.OrderSell(CallOrderCode, 1, 0, 2); A1.OrderSell(PutOrderCode, 1, 0, 2); Main.SetUserValue("CallOrderCode", CallOrderCode); Main.SetUserValue("PutOrderCode", PutOrderCode); } } } if (Start == -1 && Signal.signalKind == 4 ) { Start = 0; Main.MessageList("매도청산발생"); A1.OrderBuy(CallOrderCode, 1, 0, 2); A1.OrderBuy(PutOrderCode, 1,0, 2); } //5초단위로 잔고 체크 function Main_OnTimer(nEventID) { var U1 = 0; var P1 = 0; var V1 = 0; var Z1 = 0; var U2 = 0; var P2 = 0; var V2 = 0; var Z2 = 0; //최근 buy발생상태이면 if (Start == 1) { A1.SetBalanceItem(CallOrderCode,0); if (A1.Balance.count > 0 && A1.Balance.position == 1) { U1 = A1.Balance.avgUnitCost; P1 = A1.Balance.current; V1 = A1.Balance.count; Z1 = ((U1-P1)*V1)*250000; } A1.SetBalanceItem(PutOrderCode,0); if (A1.Balance.count > 0 && A1.Balance.position == 2) { U2 = A1.Balance.avgUnitCost; P2 = A1.Balance.current; V2 = A1.Balance.count; Z2 = ((P2-U2)*V2)*250000; } if ((Z1+Z2) <= loss) { A1.OrderBuy(CallOrderCode, 1, Option.GetAskByCode(CallOrderCode, 2), 0); A1.OrderBuy(PutOrderCode, 2, Option.GetBidByCode(PutOrderCode, 2), 0); } } //최근 SEll발생상태이면 if (Start == -1) { A1.SetBalanceItem(PutOrderCode,0); if (A1.Balance.count > 0 && A1.Balance.position == 1) { U1 = A1.Balance.avgUnitCost; P1 = A1.Balance.current; V1 = A1.Balance.count; Z1 = ((U1-P1)*V1)*250000; } A1.SetBalanceItem(CallOrderCode,0); if (A1.Balance.count > 0 && A1.Balance.position == 2) { U2 = A1.Balance.avgUnitCost; P2 = A1.Balance.current; V2 = A1.Balance.count; Z2 = ((P2-U2)*V2)*250000; } if ((Z1+Z2) <= loss) { Start = 0; A1.OrderBuy(PutOrderCode, 1, Option.GetAskByCode(PutOrderCode, 2), 0); A1.OrderBuy(CallOrderCode, 2, Option.GetBidByCode(CallOrderCode, 2), 0); } } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2017-07-28 17:31:32

안녕하세요 예스스탁입니다. 수식의 {} 연결 상태가 잘못되어 있어 각 신호시의 코딩내용이 정상적으로 수행되지 않게 되어 있습니다. 또한 수식에 타이머 이벤트는 있는데 타이머를 셋팅하는 부분이 없습니다. 예스스팟은 자바스크립트로 코딩가능한 분에게 제공되는 프로그램입니다. 예스스팟의 답변은 단순히 가이드 정보만 해드립니다. 아래 내용 참고하셔서 수정보완하시기 바랍니다. var Start,BE,SE; var CallOrderCode,PutOrderCode; function C1_OnRiseSignal(Signal) { if (Signal.signalKind == 1 ) { Main.MessageList("매수신호발생"); Start = 1; var UNum = Option.uppersATM; var LNum = Option.lowersATM; 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] } } 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) { A1.OrderSell(CallOrderCode, 1, 0, 2); A1.OrderSell(PutOrderCode, 1, 0, 2); BE = 1; Main.SetTimer(1,5000); } } if (Start == 1 && Signal.signalKind == 2 ) { Start = 0; Main.MessageList("매수청산발생"); A1.SetBalance(CallOrderCode, 0); A1.OrderBuy(CallOrderCode, A1.Balance.count, 0, 2); A1.SetBalance(CallOrderCode, 0); A1.OrderBuy(PutOrderCode, A1.Balance.count, 0, 2); Main.KillTimer(1); } //차트가 매도신호 if (Signal.signalKind == 3 ) { Main.MessageList("매도신호발생"); Start = -1; var UNum = Option.uppersATM; var LNum = Option.lowersATM; 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]; } } 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) { A1.OrderSell(CallOrderCode, 1, 0, 2); A1.OrderSell(PutOrderCode, 1, 0, 2); Main.SetUserValue("CallOrderCode", CallOrderCode); Main.SetUserValue("PutOrderCode", PutOrderCode); Main.SetTimer(1,5000); } } if (Start == -1 && Signal.signalKind == 4 ) { Start = 0; Main.MessageList("매도청산발생"); A1.SetBalance(CallOrderCode, 0); A1.OrderBuy(CallOrderCode, A1.Balance.count, 0, 2); A1.SetBalance(PutOrderCode, 0); A1.OrderBuy(PutOrderCode, A1.Balance.count,0, 2); Main.KillTimer(2); } } //5초단위로 잔고 체크 function Main_OnTimer(nEventID) { if (nEventID == 1 && Start == 1) { BE = BE+1; if (BE < 5) { A1.OrderSell(CallOrderCode, 1, 0, 2); A1.OrderSell(PutOrderCode, 1, 0, 2); } if (BE == 5) { Main.KillTimer(1); Main.SetTimer(2,5000); } } if (nEventID == 1 && Start == -1) { SE = SE+1; if (SE < 5) { A1.OrderSell(CallOrderCode, 1, 0, 2); A1.OrderSell(PutOrderCode, 1, 0, 2); } if (SE == 5) { Main.KillTimer(1); Main.SetTimer(2,5000); } } var U1 = 0; var P1 = 0; var V1 = 0; var Z1 = 0; var U2 = 0; var P2 = 0; var V2 = 0; var Z2 = 0; if (nEventID == 2) { //최근 buy발생상태이면 if (Start == 1) { A1.SetBalanceItem(CallOrderCode,0); if (A1.Balance.count > 0 && A1.Balance.position == 1) { U1 = A1.Balance.avgUnitCost; P1 = A1.Balance.current; V1 = A1.Balance.count; Z1 = ((U1-P1)*V1)*250000; } A1.SetBalanceItem(PutOrderCode,0); if (A1.Balance.count > 0 && A1.Balance.position == 2) { U2 = A1.Balance.avgUnitCost; P2 = A1.Balance.current; V2 = A1.Balance.count; Z2 = ((P2-U2)*V2)*250000; } if ((Z1+Z2) <= loss) { A1.OrderBuy(CallOrderCode, 1, Option.GetAskByCode(CallOrderCode, 2), 0); A1.OrderBuy(PutOrderCode, 2, Option.GetBidByCode(PutOrderCode, 2), 0); Main.KillTimer(1); } } //최근 SEll발생상태이면 if (Start == -1) { A1.SetBalanceItem(PutOrderCode,0); if (A1.Balance.count > 0 && A1.Balance.position == 1) { U1 = A1.Balance.avgUnitCost; P1 = A1.Balance.current; V1 = A1.Balance.count; Z1 = ((U1-P1)*V1)*250000; } A1.SetBalanceItem(CallOrderCode,0); if (A1.Balance.count > 0 && A1.Balance.position == 2) { U2 = A1.Balance.avgUnitCost; P2 = A1.Balance.current; V2 = A1.Balance.count; Z2 = ((P2-U2)*V2)*250000; } if ((Z1+Z2) <= loss) { Start = 0; A1.OrderBuy(PutOrderCode, 1, Option.GetAskByCode(PutOrderCode, 2), 0); A1.OrderBuy(CallOrderCode, 2, Option.GetBidByCode(CallOrderCode, 2), 0); Main.KillTimer(1); } } } } 즐거운 하루되세요 > 팡팡 님이 쓴 글입니다. > 제목 : 수식변경부탁합니다. > 안녕하세요 아래 수식은 매수만 되고 매수청산, 매도, 매도청산, 손절매도 안됩니다. 당일매매이며 매수,매도 신호 후 주문수량을 5초 간격으로 1개씩 증가시켜 총 주문 수량을 5개로 한정되게 해주세요. 청산과 손절매는 전체 잔량을 한번에 청산 원합니다. var Start; var CallOrderCode,PutOrderCode; function C1_OnRiseSignal(Signal) { if (Signal.signalKind == 1 ) { Main.MessageList("매수신호발생"); Start = 1; var UNum = Option.uppersATM; var LNum = Option.lowersATM; 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] } } 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) { A1.OrderSell(CallOrderCode, 1, 0, 2); A1.OrderSell(PutOrderCode, 1, 0, 2); } if (Start == 1 && Signal.signalKind == 2 ) { Start = 0; Main.MessageList("매수청산발생"); var UNum = Option.uppersATM; var LNum = Option.lowersATM; A1.OrderBuy(CallOrderCode, 1, 0, 2); A1.OrderBuy(PutOrderCode, 1, 0, 2); } //차트가 매도신호 if (Signal.signalKind == 3 ) { Main.MessageList("매도신호발생"); Start = -1; var UNum = Option.uppersATM; var LNum = Option.lowersATM; } 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] } } 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) { A1.OrderSell(CallOrderCode, 1, 0, 2); A1.OrderSell(PutOrderCode, 1, 0, 2); Main.SetUserValue("CallOrderCode", CallOrderCode); Main.SetUserValue("PutOrderCode", PutOrderCode); } } } if (Start == -1 && Signal.signalKind == 4 ) { Start = 0; Main.MessageList("매도청산발생"); A1.OrderBuy(CallOrderCode, 1, 0, 2); A1.OrderBuy(PutOrderCode, 1,0, 2); } //5초단위로 잔고 체크 function Main_OnTimer(nEventID) { var U1 = 0; var P1 = 0; var V1 = 0; var Z1 = 0; var U2 = 0; var P2 = 0; var V2 = 0; var Z2 = 0; //최근 buy발생상태이면 if (Start == 1) { A1.SetBalanceItem(CallOrderCode,0); if (A1.Balance.count > 0 && A1.Balance.position == 1) { U1 = A1.Balance.avgUnitCost; P1 = A1.Balance.current; V1 = A1.Balance.count; Z1 = ((U1-P1)*V1)*250000; } A1.SetBalanceItem(PutOrderCode,0); if (A1.Balance.count > 0 && A1.Balance.position == 2) { U2 = A1.Balance.avgUnitCost; P2 = A1.Balance.current; V2 = A1.Balance.count; Z2 = ((P2-U2)*V2)*250000; } if ((Z1+Z2) <= loss) { A1.OrderBuy(CallOrderCode, 1, Option.GetAskByCode(CallOrderCode, 2), 0); A1.OrderBuy(PutOrderCode, 2, Option.GetBidByCode(PutOrderCode, 2), 0); } } //최근 SEll발생상태이면 if (Start == -1) { A1.SetBalanceItem(PutOrderCode,0); if (A1.Balance.count > 0 && A1.Balance.position == 1) { U1 = A1.Balance.avgUnitCost; P1 = A1.Balance.current; V1 = A1.Balance.count; Z1 = ((U1-P1)*V1)*250000; } A1.SetBalanceItem(CallOrderCode,0); if (A1.Balance.count > 0 && A1.Balance.position == 2) { U2 = A1.Balance.avgUnitCost; P2 = A1.Balance.current; V2 = A1.Balance.count; Z2 = ((P2-U2)*V2)*250000; } if ((Z1+Z2) <= loss) { Start = 0; A1.OrderBuy(PutOrderCode, 1, Option.GetAskByCode(PutOrderCode, 2), 0); A1.OrderBuy(CallOrderCode, 2, Option.GetBidByCode(CallOrderCode, 2), 0); } } }