예스스탁
예스스탁 답변
2021-10-15 10:55:47.0
안녕하세요
예스스탁입니다.
아래식으로 테스트 해보시기 바랍니다.
타이머 셋팅을 변경했습니다.
var EntryTime = 101700;
var ExitTime = 102000;
var MaxEnryVol = 10;
var Entry,Exit,CurrentVol;
var CSV,PSV,CSX,PSX;
var CallOrderCode,PutOrderCode;
function Main_OnStart()
{
var d = new Date();
var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
Main.MessageList(HHMMSS,"Start");
Entry = true;
if (HHMMSS >= EntryTime)
{
Entry = false;
}
Exit = true;
if (HHMMSS >= ExitTime)
{
Exit = false;
}
if (Entry == true || Exit == true)
{
Main.MessageList(HHMMSS,"1번 타이머동작");
Main.SetTimer(1, 5000);
}
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
Main.MessageList(HHMMSS,"nEventID ",nEventID);
if (nEventID == 1)
{
if (Entry == true && HHMMSS >= EntryTime)
{
Main.MessageList(HHMMSS,"진입시작");
//양매도종목
CallOrderCode = Option.GetATMCallRecent(0);
PutOrderCode = Option.GetATMPutRecent(0);
Main.SetUserValue("SellDate",YYYYMMDD);
Main.SetUserValue("CallOrderCode",CallOrderCode);
Main.SetUserValue("PutOrderCode",PutOrderCode);
Entry = false;
Account1.OrderSell(CallOrderCode, 1, Option.GetBid(CallOrderCode, 2),0);
Account1.OrderSell(PutOrderCode, 1, Option.GetBid(PutOrderCode, 2), 0);
CurrentVol = 1;
Main.SetTimer(2, 5000);
}
if (Exit == true && HHMMSS >= ExitTime)
{
Exit = false;
Main.KillTimer(1);
var SellDate = Main.GetUserValue("SellDate")
Main.MessageList(HHMMSS,"청산시작",YYYYMMDD,SellDate);
if (YYYYMMDD == SellDate)
{
CallOrderCode = Main.GetUserValue("CallOrderCode");
PutOrderCode = Main.GetUserValue("PutOrderCode");
if (CallOrderCode != "")
{
Account1.SetBalance(CallOrderCode, 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
CSV = Account1.Balance.count;
else
CSV = 0;
if (CSV > 0)
{
Main.SetTimer(3, 5000);
CSX = 1;
Account1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 2),0);
}
}
if (PutOrderCode != "")
{
Account1.SetBalance(PutOrderCode, 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
PSV = Account1.Balance.count;
else
PSV = 0;
if (PSV > 0)
{
Main.SetTimer(4, 5000);
PSX = 1;
Account1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 2),0);
}
}
}
}
}
if (nEventID == 2)
{
CurrentVol = CurrentVol+1;
if (CurrentVol <= MaxEnryVol)
{
Account1.OrderSell(CallOrderCode, 1, Option.GetBid(CallOrderCode, 2),0);
Account1.OrderSell(PutOrderCode, 1, Option.GetBid(PutOrderCode, 2), 0);
}
else
{
Main.KillTimer(2);
}
}
if (nEventID == 3)
{
CSX = CSX+1;
if (CSX <= CSV)
{
Account1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 2),0);
}
else
{
Main.KillTimer(3);
}
}
if (nEventID == 4)
{
PSX = PSX+1;
if (PSX <= PSV)
{
Account1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 2),0);
}
else
{
Main.KillTimer(4);
}
}
}
즐거운 하루되세요
> 팡팡 님이 쓴 글입니다.
> 제목 : 수식문의 드립니다.
> 안녕하세요!
아래 수식은 수정해주신것인데 작동시키면 매도는 잘되나 청산이 안되고, 매도한 상태에서 다시 부팅을 하면 청산이 될때도 있고 안될때도 있습니다.
var EntryTime = 101700;
var ExitTime = 102000;
var MaxEnryVol = 10;
var Entry,Exit,CurrentVol;
var CSV,PSV,CSX,PSX;
var CallOrderCode,PutOrderCode;
function Main_OnStart()
{
var d = new Date();
var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
Main.MessageList(HHMMSS,"Start");
Entry = true;
if (HHMMSS >= EntryTime)
{
Entry = false;
}
Exit = true;
if (HHMMSS >= ExitTime)
{
Exit = false;
}
if (Entry == true || Exit == true)
{
Main.MessageList(HHMMSS,"1번 타이머동작");
Main.SetTimer(1, 5000);
}
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1)
{
if (Entry == true && HHMMSS >= EntryTime)
{
Main.MessageList(HHMMSS,"진입시작");
//양매도종목
CallOrderCode = Option.GetATMCallRecent(0);
PutOrderCode = Option.GetATMPutRecent(0);
Main.SetUserValue("SellDate",YYYYMMDD);
Main.SetUserValue("CallOrderCode",CallOrderCode);
Main.SetUserValue("PutOrderCode",PutOrderCode);
Entry = false;
if (ExitTime > EntryTime)
Main.KillTimer(1);
Account1.OrderSell(CallOrderCode, 1, Option.GetBid(CallOrderCode, 2),0);
Account1.OrderSell(PutOrderCode, 1, Option.GetBid(PutOrderCode, 2), 0);
CurrentVol = 1;
Main.SetTimer(2, 5000);
}
if (Exit == true && HHMMSS >= ExitTime)
{
Exit = false;
if (ExitTime > EntryTime)
Main.KillTimer(1);
var SellDate = Main.GetUserValue("SellDate")
Main.MessageList(HHMMSS,"청산시작",YYYYMMDD,SellDate);
if (YYYYMMDD == SellDate)
{
CallOrderCode = Main.GetUserValue("CallOrderCode");
PutOrderCode = Main.GetUserValue("PutOrderCode");
if (CallOrderCode != "")
{
Account1.SetBalance(CallOrderCode, 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
CSV = Account1.Balance.count;
else
CSV = 0;
if (CSV > 0)
{
Main.SetTimer(3, 5000);
CSX = 1;
Account1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 2),0);
}
}
if (PutOrderCode != "")
{
Account1.SetBalance(PutOrderCode, 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
PSV = Account1.Balance.count;
else
PSV = 0;
if (PSV > 0)
{
Main.SetTimer(4, 5000);
PSX = 1;
Account1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 2),0);
}
}
}
}
}
if (nEventID == 2)
{
CurrentVol = CurrentVol+1;
if (CurrentVol <= MaxEnryVol)
{
Account1.OrderSell(CallOrderCode, 1, Option.GetBid(CallOrderCode, 2),0);
Account1.OrderSell(PutOrderCode, 1, Option.GetBid(PutOrderCode, 2), 0);
}
else
{
Main.KillTimer(2);
}
}
if (nEventID == 3)
{
CSX = CSX+1;
if (CSX <= CSV)
{
Account1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 2),0);
}
else
{
Main.KillTimer(3);
}
}
if (nEventID == 4)
{
PSX = PSX+1;
if (PSX <= PSV)
{
Account1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 2),0);
}
else
{
Main.KillTimer(4);
}
}
}