커뮤니티

진입횟수 조절 (특정시간 선물하락 0.05체결 행사가 옵션매수)

프로필 이미지
좌오비우오비
2024-11-15 09:59:22
628
글번호 226122
답변완료
<p>아래수식은 1번만 사고 파는 수식입니다. 그런데 처음 매수 후 추가 매수는 없어야 하는데 장이 움직여서 다른 행사가에서도 감시가격 0.05의 체결이 발생하면 매수를 또 냅니다. 장이 크게 움직이면 계속 행사가를 바꾸면서 0.05 체결이 발생합니다. 결과적으로 행사가별로 피라미딩하는 수식이 되었는데 거래횟수를 지정하여 사용하고 싶습니다. 요청사항1) 매수횟수를 세팅해 주십시요. 매수횟수 1이면 1회 매수횟수 2이면 2회 매수횟수를 2로 하면 중복되는 행사가 없이 총 2번의 매수를 합니다.(누적 2개) &nbsp;&nbsp;- 진입조건을 만족할 때 0.05 체결이 350 행사가에서 발생했다고 한다면&nbsp; &nbsp;&nbsp;ex) 콜350.00&nbsp;&nbsp;0.05 매수 (선물 상승시&nbsp;&nbsp;콜352.50&nbsp;&nbsp;0.05 매수) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;콜350.00&nbsp;&nbsp;0.05 매수 (선물 하락시&nbsp;&nbsp;콜347.50&nbsp;&nbsp;0.05 매수) 변수선언 var BuyPrice1 = 0.05, ExitPrice1 = 1.48; var BuyPrice2 = 0.05, ExitPrice2 = 0.98; 청산할 때 잔고에 있는 다른 전략의 포지션에 영향이 없어야 합니다. 항상 고맙습니다. ****************************************************************************** var BuyPrice = 0.05, ExitPrice = 999; var StartTime = 084500, EndTime = 144500; var List = [],MK = [],OD = []; var req, Exit, ReqCom; function Main_OnStart() { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List = []; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (var i = -Option1.lowersATM; i &lt;= Option1.uppersATM; i++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List.push(Option1.GetATMCallRecent(i)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.MessageList("콜옵션종목수:",List.length); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;req = 0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (List.length &gt; 0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.MessageList("종목객체요청:",req,List.length); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.ReqMarketData(List[req]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit = false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReqCom&nbsp;&nbsp;= false; } function Main_OnRcvMarketData(MarketData) { &nbsp;&nbsp;&nbsp;&nbsp;if (List[req] == MarketData.code) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.MessageList("종목객체생성:",req,MarketData.code); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MK.push(MarketData); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OD.push(0); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;req = req+1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (req &lt; List.length) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.MessageList("종목객체요청:",req,List[req]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var S = Main.ReqMarketData(List[req]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (S == -1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.SetTimer(1, 15000); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.MessageList("종목객체생성 제한 --&gt; 15초 뒤 다시 요청:"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.MessageList("종목객체생성완료"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReqCom = true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} } function Main_OnTimer(nEventID) { &nbsp;&nbsp;&nbsp;&nbsp;if (nEventID == 1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.KillTimer(1); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.MessageList("종목객체 재요청:",req,List[req]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.ReqMarketData(List[req]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} } function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*제거 { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var d = new Date(); &nbsp;&nbsp;&nbsp;&nbsp;var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (HHMMSS &gt;= StartTime &amp;&amp; HHMMSS &lt; EndTime &amp;&amp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MarketData1.current &gt;= MarketData1.open + 0.01 &amp;&amp; //시가에서 0.01 상승 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReqCom == true &amp;&amp; Exit == false &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lUp*dateID == 20001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)//*제거 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.MessageList(HHMMSS,Exit); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (var i = 0; i &lt; MK.length; i++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (OD[i] == 0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (MK[i].current == BuyPrice) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OD[i] = 1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Account1.OrderBuy(MK[i].code, 1,MK[i].current,0); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (MK[i].current == ExitPrice) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OD[i] = 2; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Account1.SetBalance(MK[i].code,0); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (Account1.Balance.count &gt; 0 &amp;&amp; Account1.Balance.position == 2) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Account1.OrderSell(MK[i].code, 1,MK[i].current,0); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (HHMMSS &gt;= EndTime &amp;&amp; Exit == false) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.MessageList(HHMMSS,Exit); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit = true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//미체결주문수 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var UF = Account1.GetTheNumberOfUnfills(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.MessageList(HHMMSS,"미체결수",UF); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (UF &gt; 0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//모든 옵션 미체결 취소 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (var i = 0; i &lt; UF; i++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Account1.SetUnfill(i) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (Account1.Unfill.code != MarketData1.code &amp;&amp; Account1.Unfill.count &gt; 0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Account1.OrderCancel(Account1.Unfill.orderNum);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.MessageList(HHMMSS,"OrderCancel",Account1.Unfill.orderNum); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//보유종목수&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var BB = Account1.GetTheNumberOfBalances()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.MessageList(HHMMSS,"보유종목수",BB); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (BB &gt; 0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//잔고의 모든 옵션매수청산 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (var i = 0; i &lt; BB; i++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Account1.SetBalance(i); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (Account1.Balance.code != MarketData1.code &amp;&amp; Account1.Balance.count &gt; 0 &amp;&amp; Account1.Balance.position == 2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//매수3호가로 잔고잔량 매수청산(매도주문) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,Option1.GetBid(Account1.Balance.code, 5) ,0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main.MessageList(HHMMSS,"OrderSell",Account1.Balance.code); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} }</p>
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-10-02 16:10:26

안녕하세요 예스스탁입니다. 매수횟수를 지정하게 변경했습니다. 매수횟수에 따라 진입가와 청산가격이 유동적이면 BuyPrice1,BuyPrice2와 같은 형태로 유동적으로 가져갈 수 없습니다. BuyPrice,ExitPrice를 배열변수로 처리해 드립니다. 매수횟수별로 진입값과 청산값을 나열하시면 됩니다. 매수횟수와 진입값과 청산값으로 지정한 갯수가 동일해야 하며 왼쪽부터 첫번째,두번째,세번째 순입니다. var 매수횟수 = 2; var BuyPrice = [0.05,0.05]; var ExitPrice = [1.48,0.98]; var StartTime = 084500, EndTime = 144500; var List = [],MK = [],OD = [], XP = []; var req, Exit, ReqCom,Entry; function Main_OnStart() { List = []; for (var i = -Option1.lowersATM; i <= Option1.uppersATM; i++) { List.push(Option1.GetATMCallRecent(i)); } Main.MessageList("콜옵션종목수:",List.length); req = 0; if (List.length > 0) { Main.MessageList("종목객체요청:",req,List.length); Main.ReqMarketData(List[req]); } Exit = false; ReqCom = false; Entry = 0; } function Main_OnRcvMarketData(MarketData) { if (List[req] == MarketData.code) { Main.MessageList("종목객체생성:",req,MarketData.code); MK.push(MarketData); OD.push(0); XP.push(0); req = req+1; if (req < List.length) { Main.MessageList("종목객체요청:",req,List[req]); var S = Main.ReqMarketData(List[req]); if (S == -1) { Main.SetTimer(1, 15000); Main.MessageList("종목객체생성 제한 --> 15초 뒤 다시 요청:"); } } else { Main.MessageList("종목객체생성완료"); ReqCom = true; } } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.KillTimer(1); Main.MessageList("종목객체 재요청:",req,List[req]); Main.ReqMarketData(List[req]); } } function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*제거 { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (HHMMSS >= StartTime && HHMMSS < EndTime && MarketData1.current >= MarketData1.open + 0.01 && //시가에서 0.01 상승 ReqCom == true && Exit == false && lUp*dateID == 20001 )//*제거 { Main.MessageList(HHMMSS,Exit); for (var i = 0; i < MK.length; i++) { if (OD[i] == 0) { if (Entry < 진입횟수 && MK[i].current == BuyPrice[Entry]) { OD[i] = 1; XP[i] = ExitPrice[Entry]; Entry = Entry+1; Account1.OrderBuy(MK[i].code, 1,MK[i].current,0); } } else { if (OD[i] == 1 && MK[i].current == XP[i]) { OD[i] = 2; Account1.SetBalance(MK[i].code,0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(MK[i].code, 1,MK[i].current,0); } } } } } if (HHMMSS >= EndTime && Exit == false) { Main.MessageList(HHMMSS,Exit); Exit = true; //미체결주문수 var UF = Account1.GetTheNumberOfUnfills(); Main.MessageList(HHMMSS,"미체결수",UF); if (UF > 0) { //모든 옵션 미체결 취소 for (var i = 0; i < UF; i++) { Account1.SetUnfill(i) if (Account1.Unfill.code != MarketData1.code && Account1.Unfill.count > 0) { Account1.OrderCancel(Account1.Unfill.orderNum); Main.MessageList(HHMMSS,"OrderCancel",Account1.Unfill.orderNum); } } } //보유종목수 var BB = Account1.GetTheNumberOfBalances() Main.MessageList(HHMMSS,"보유종목수",BB); if (BB > 0) { //잔고의 모든 옵션매수청산 for (var i = 0; i < BB; i++) { Account1.SetBalance(i); if (Account1.Balance.code != MarketData1.code && Account1.Balance.count > 0 && Account1.Balance.position == 2) { //매수3호가로 잔고잔량 매수청산(매도주문) Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,Option1.GetBid(Account1.Balance.code, 5) ,0); Main.MessageList(HHMMSS,"OrderSell",Account1.Balance.code); } } } } } 즐거운 하루되세요 > 좌오비우오비 님이 쓴 글입니다. > 제목 : 문의 > 아래수식은 1번만 사고 파는 수식입니다. 그런데 처음 매수 후 추가 매수는 없어야 하는데 장이 움직여서 다른 행사가에서도 감시가격 0.05의 체결이 발생하면 매수를 또 냅니다. 장이 크게 움직이면 계속 행사가를 바꾸면서 0.05 체결이 발생합니다. 결과적으로 행사가별로 피라미딩하는 수식이 되었는데 거래횟수를 지정하여 사용하고 싶습니다. 요청사항1) 매수횟수를 세팅해 주십시요. 매수횟수 1이면 1회 매수횟수 2이면 2회 매수횟수를 2로 하면 중복되는 행사가 없이 총 2번의 매수를 합니다.(누적 2개) - 진입조건을 만족할 때 0.05 체결이 350 행사가에서 발생했다고 한다면 ex) 콜350.00 0.05 매수 (선물 상승시 콜352.50 0.05 매수) 콜350.00 0.05 매수 (선물 하락시 콜347.50 0.05 매수) 변수선언 var BuyPrice1 = 0.05, ExitPrice1 = 1.48; var BuyPrice2 = 0.05, ExitPrice2 = 0.98; 청산할 때 잔고에 있는 다른 전략의 포지션에 영향이 없어야 합니다. 항상 고맙습니다. ****************************************************************************** var BuyPrice = 0.05, ExitPrice = 999; var StartTime = 084500, EndTime = 144500; var List = [],MK = [],OD = []; var req, Exit, ReqCom; function Main_OnStart() { List = []; for (var i = -Option1.lowersATM; i <= Option1.uppersATM; i++) { List.push(Option1.GetATMCallRecent(i)); } Main.MessageList("콜옵션종목수:",List.length); req = 0; if (List.length > 0) { Main.MessageList("종목객체요청:",req,List.length); Main.ReqMarketData(List[req]); } Exit = false; ReqCom = false; } function Main_OnRcvMarketData(MarketData) { if (List[req] == MarketData.code) { Main.MessageList("종목객체생성:",req,MarketData.code); MK.push(MarketData); OD.push(0); req = req+1; if (req < List.length) { Main.MessageList("종목객체요청:",req,List[req]); var S = Main.ReqMarketData(List[req]); if (S == -1) { Main.SetTimer(1, 15000); Main.MessageList("종목객체생성 제한 --> 15초 뒤 다시 요청:"); } } else { Main.MessageList("종목객체생성완료"); ReqCom = true; } } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.KillTimer(1); Main.MessageList("종목객체 재요청:",req,List[req]); Main.ReqMarketData(List[req]); } } function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*제거 { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (HHMMSS >= StartTime && HHMMSS < EndTime && MarketData1.current >= MarketData1.open + 0.01 && //시가에서 0.01 상승 ReqCom == true && Exit == false && lUp*dateID == 20001 )//*제거 { Main.MessageList(HHMMSS,Exit); for (var i = 0; i < MK.length; i++) { if (OD[i] == 0) { if (MK[i].current == BuyPrice) { OD[i] = 1; Account1.OrderBuy(MK[i].code, 1,MK[i].current,0); } } else { if (MK[i].current == ExitPrice) { OD[i] = 2; Account1.SetBalance(MK[i].code,0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(MK[i].code, 1,MK[i].current,0); } } } } } if (HHMMSS >= EndTime && Exit == false) { Main.MessageList(HHMMSS,Exit); Exit = true; //미체결주문수 var UF = Account1.GetTheNumberOfUnfills(); Main.MessageList(HHMMSS,"미체결수",UF); if (UF > 0) { //모든 옵션 미체결 취소 for (var i = 0; i < UF; i++) { Account1.SetUnfill(i) if (Account1.Unfill.code != MarketData1.code && Account1.Unfill.count > 0) { Account1.OrderCancel(Account1.Unfill.orderNum); Main.MessageList(HHMMSS,"OrderCancel",Account1.Unfill.orderNum); } } } //보유종목수 var BB = Account1.GetTheNumberOfBalances() Main.MessageList(HHMMSS,"보유종목수",BB); if (BB > 0) { //잔고의 모든 옵션매수청산 for (var i = 0; i < BB; i++) { Account1.SetBalance(i); if (Account1.Balance.code != MarketData1.code && Account1.Balance.count > 0 && Account1.Balance.position == 2) { //매수3호가로 잔고잔량 매수청산(매도주문) Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,Option1.GetBid(Account1.Balance.code, 5) ,0); Main.MessageList(HHMMSS,"OrderSell",Account1.Balance.code); } } } } }