커뮤니티

매도수식 청산내용 추가

프로필 이미지
좌오비우오비
2024-08-03 15:09:14.0
558
글번호 226050
답변완료
1. 게시판 답변글에다 시간청산내용을 추가해보았습니다. 내용이 맞는지 검토해주십시요. 2. 익절과 손절 내용 추가해주십시요. - 익절 내용 : 잔고가 +50,000원 되면 모두 청산 - 손절 내용 : 잔고가 -50,000원 되면 모두 청산 3. 한세트 진입하고 청산하면 그 다음 거래는 안한다는 내용을 추가해주십시요. 항상 고맙습니다. ***************************************************************************** function Main_OnStart() { Main.SetTimer(1, 5000); // 5초마다 타이머 이벤트 발생 Main.SetTimer(2, 60000); // 1분마다 타이머 이벤트 발생 } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds(); if (nEventID == 1) { if (HHMMSS >= 084600) // 오전 8시 46분 { Main.KillTimer(1); C1 = ""; CD1 = -1; C2 = ""; CD2 = -1; P1 = ""; PD1 = -1; P2 = ""; PD2 = -1; for (var i = -Option1.lowersATM; i <= Option1.uppersATM; i++) { if (Option1.GetCurrent(0, i) <= 1.0) { if (CD1 == -1 || (CD1 > 0 && 1.0 - Option1.GetCurrent(0, i) < CD1)) { CD1 = 1.0 - Option1.GetCurrent(0, i); C1 = Option1.GetATMCallRecent(i); } } if (Option1.GetCurrent(0, i) <= 0.5) { if (CD2 == -1 || (CD2 > 0 && 0.5 - Option1.GetCurrent(0, i) < CD2)) { CD2 = 0.5 - Option1.GetCurrent(0, i); C2 = Option1.GetATMCallRecent(i); } } if (Option1.GetCurrent(1, -i) <= 1.2) { if (PD1 == -1 || (PD1 > 0 && 1.2 - Option1.GetCurrent(1, -i) < PD1)) { PD1 = 1.2 - Option1.GetCurrent(1, -i); P1 = Option1.GetATMPutRecent(-i); } } if (Option1.GetCurrent(1, -i) <= 0.5) { if (PD2 == -1 || (PD2 > 0 && 0.5 - Option1.GetCurrent(1, -i) < PD2)) { PD2 = 0.5 - Option1.GetCurrent(1, -i); P2 = Option1.GetATMPutRecent(-i); } } } if (C1 != "" && C2 != "") { Account1.OrderSell(C1, 1, Option1.GetBid(C1, 5), 0); Account1.OrderSell(C2, 1, Option1.GetBid(C2, 5), 0); } if (P1 != "" && P2 != "") { Account1.OrderSell(P1, 1, Option1.GetBid(P1, 5), 0); Account1.OrderSell(P2, 1, Option1.GetBid(P2, 5), 0); } } } if (nEventID == 2) { // 15시 청산 조건 if (HHMMSS >= 150000 && HHMMSS < 150100) { // 15시 1분에 청산 closePositions(); Main.KillTimer(2); // 타이머 2 종료 } } } function closePositions() { // Call 포지션 청산 if (C1 != "" && C2 != "") { Account1.OrderBuy(C1, 1, Option1.GetAsk(C1, 5), 0); Account1.OrderBuy(C2, 1, Option1.GetAsk(C2, 5), 0); } // Put 포지션 청산 if (P1 != "" && P2 != "") { Account1.OrderBuy(P1, 1, Option1.GetAsk(P1, 5), 0); Account1.OrderBuy(P2, 1, Option1.GetAsk(P2, 5), 0); } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-08-05 18:30:16.0

안녕하세요 예스스탁입니다. 시간청산 내용은 맞게 작성하셨습니다. 4개 종목의 손익이 +-5만이면 청산되게 추가해 드립니다. var entry = false; function Main_OnStart() { Main.SetTimer(1, 5000); // 5초마다 타이머 이벤트 발생 Main.SetTimer(2, 60000); // 1분마다 타이머 이벤트 발생 entry = false; } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds(); if (nEventID == 1) { if (HHMMSS >= 084600 && entry == false) // 오전 8시 46분 { Main.KillTimer(1); C1 = ""; CD1 = -1; C2 = ""; CD2 = -1; P1 = ""; PD1 = -1; P2 = ""; PD2 = -1; for (var i = -Option1.lowersATM; i <= Option1.uppersATM; i++) { if (Option1.GetCurrent(0, i) <= 1.0) { if (CD1 == -1 || (CD1 > 0 && 1.0 - Option1.GetCurrent(0, i) < CD1)) { CD1 = 1.0 - Option1.GetCurrent(0, i); C1 = Option1.GetATMCallRecent(i); } } if (Option1.GetCurrent(0, i) <= 0.5) { if (CD2 == -1 || (CD2 > 0 && 0.5 - Option1.GetCurrent(0, i) < CD2)) { CD2 = 0.5 - Option1.GetCurrent(0, i); C2 = Option1.GetATMCallRecent(i); } } if (Option1.GetCurrent(1, -i) <= 1.2) { if (PD1 == -1 || (PD1 > 0 && 1.2 - Option1.GetCurrent(1, -i) < PD1)) { PD1 = 1.2 - Option1.GetCurrent(1, -i); P1 = Option1.GetATMPutRecent(-i); } } if (Option1.GetCurrent(1, -i) <= 0.5) { if (PD2 == -1 || (PD2 > 0 && 0.5 - Option1.GetCurrent(1, -i) < PD2)) { PD2 = 0.5 - Option1.GetCurrent(1, -i); P2 = Option1.GetATMPutRecent(-i); } } } if (C1 != "" && C2 != "") { Account1.OrderSell(C1, 1, Option1.GetBid(C1, 5), 0); Account1.OrderSell(C2, 1, Option1.GetBid(C2, 5), 0); } if (P1 != "" && P2 != "") { Account1.OrderSell(P1, 1, Option1.GetBid(P1, 5), 0); Account1.OrderSell(P2, 1, Option1.GetBid(P2, 5), 0); } if (C1 != "" && C2 != "" && P1 != "" && P2 != "") { entry = true; } } } if (nEventID == 2) { if (entry == true && HHMMSS < 150000) { var sumPL = 0; Account1.SetBalance(C1,0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { sumPL = sumPL + (Account1.Balance.avgUnitCost - Account1.Balance.current); } Account1.SetBalance(C2,0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { sumPL = sumPL + (Account1.Balance.avgUnitCost - Account1.Balance.current); } Account1.SetBalance(P1,0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { sumPL = sumPL + (Account1.Balance.avgUnitCost - Account1.Balance.current); } Account1.SetBalance(P2,0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { sumPL = sumPL + (Account1.Balance.avgUnitCost - Account1.Balance.current); } if (sumPL*250000 >= 50000 or sumPL*250000 <= -50000) { closePositions(); Main.KillTimer(2); // 타이머 2 종료 } } // 15시 청산 조건 if (HHMMSS >= 150000 && HHMMSS < 150100) { closePositions(); Main.KillTimer(2); // 타이머 2 종료 } } } function closePositions() { // Call 포지션 청산 if (C1 != "" && C2 != "") { Account1.OrderBuy(C1, 1, Option1.GetAsk(C1, 5), 0); Account1.OrderBuy(C2, 1, Option1.GetAsk(C2, 5), 0); } // Put 포지션 청산 if (P1 != "" && P2 != "") { Account1.OrderBuy(P1, 1, Option1.GetAsk(P1, 5), 0); Account1.OrderBuy(P2, 1, Option1.GetAsk(P2, 5), 0); } } 즐거운 하루되세요 > 좌오비우오비 님이 쓴 글입니다. > 제목 : 매도수식 청산내용 추가 > 1. 게시판 답변글에다 시간청산내용을 추가해보았습니다. 내용이 맞는지 검토해주십시요. 2. 익절과 손절 내용 추가해주십시요. - 익절 내용 : 잔고가 +50,000원 되면 모두 청산 - 손절 내용 : 잔고가 -50,000원 되면 모두 청산 3. 한세트 진입하고 청산하면 그 다음 거래는 안한다는 내용을 추가해주십시요. 항상 고맙습니다. ***************************************************************************** function Main_OnStart() { Main.SetTimer(1, 5000); // 5초마다 타이머 이벤트 발생 Main.SetTimer(2, 60000); // 1분마다 타이머 이벤트 발생 } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds(); if (nEventID == 1) { if (HHMMSS >= 084600) // 오전 8시 46분 { Main.KillTimer(1); C1 = ""; CD1 = -1; C2 = ""; CD2 = -1; P1 = ""; PD1 = -1; P2 = ""; PD2 = -1; for (var i = -Option1.lowersATM; i <= Option1.uppersATM; i++) { if (Option1.GetCurrent(0, i) <= 1.0) { if (CD1 == -1 || (CD1 > 0 && 1.0 - Option1.GetCurrent(0, i) < CD1)) { CD1 = 1.0 - Option1.GetCurrent(0, i); C1 = Option1.GetATMCallRecent(i); } } if (Option1.GetCurrent(0, i) <= 0.5) { if (CD2 == -1 || (CD2 > 0 && 0.5 - Option1.GetCurrent(0, i) < CD2)) { CD2 = 0.5 - Option1.GetCurrent(0, i); C2 = Option1.GetATMCallRecent(i); } } if (Option1.GetCurrent(1, -i) <= 1.2) { if (PD1 == -1 || (PD1 > 0 && 1.2 - Option1.GetCurrent(1, -i) < PD1)) { PD1 = 1.2 - Option1.GetCurrent(1, -i); P1 = Option1.GetATMPutRecent(-i); } } if (Option1.GetCurrent(1, -i) <= 0.5) { if (PD2 == -1 || (PD2 > 0 && 0.5 - Option1.GetCurrent(1, -i) < PD2)) { PD2 = 0.5 - Option1.GetCurrent(1, -i); P2 = Option1.GetATMPutRecent(-i); } } } if (C1 != "" && C2 != "") { Account1.OrderSell(C1, 1, Option1.GetBid(C1, 5), 0); Account1.OrderSell(C2, 1, Option1.GetBid(C2, 5), 0); } if (P1 != "" && P2 != "") { Account1.OrderSell(P1, 1, Option1.GetBid(P1, 5), 0); Account1.OrderSell(P2, 1, Option1.GetBid(P2, 5), 0); } } } if (nEventID == 2) { // 15시 청산 조건 if (HHMMSS >= 150000 && HHMMSS < 150100) { // 15시 1분에 청산 closePositions(); Main.KillTimer(2); // 타이머 2 종료 } } } function closePositions() { // Call 포지션 청산 if (C1 != "" && C2 != "") { Account1.OrderBuy(C1, 1, Option1.GetAsk(C1, 5), 0); Account1.OrderBuy(C2, 1, Option1.GetAsk(C2, 5), 0); } // Put 포지션 청산 if (P1 != "" && P2 != "") { Account1.OrderBuy(P1, 1, Option1.GetAsk(P1, 5), 0); Account1.OrderBuy(P2, 1, Option1.GetAsk(P2, 5), 0); } }