예스스탁
예스스탁 답변
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);
}
}