예스스탁
예스스탁 답변
2022-05-24 16:43:40.0
안녕하세요
예스스탁입니다.
죄송하지만 해당 부분은 사용자분이 체크하시면서 수정해 보셔야 합니다.
스팟은 자바스크립트로 코딩가능한 분들이 사용한다는 전제에
저희는 간단한 가이드 정도만 답변을 드립니다.
이후 부분은 사용자분이 수정보완해 완성하셔야 합니다.
즐거운 하루되세요
> 팡팡 님이 쓴 글입니다.
> 제목 : 수식 수정 부탁합니다.
> 안녕하세요!
많은도움 받고 있습니다.
아래식은 정해진 시간에 한개식 매도하고 청산 시간에 한개식 메수하는 식인데
진입 매도는 잘되나 청산은 안되고 있으며 진입 매도 후 예스스팟 실행을 한번 종료 후 다시 실행시키면 한개씩 청산이 잘됩니다. 다시 실행하지 않아도 될 수 있게 수정 부탁합니다.
var EntryTime = 094000;
var ExitTime = 132000;
var MaxEnryVol = 3;
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,"진입시작");
-------------------------------- 중략 ---------------------------------------------
//종목을 찾았으면
Main.SetUserValue("SellDate",YYYYMMDD);
Main.SetUserValue("CallOrderCode",CallOrderCode);
Main.SetUserValue("PutOrderCode",PutOrderCode);
Entry = false;
if (ExitTime > EntryTime)
Main.KillTimer(1);
A1.OrderSell(CallOrderCode, 1, Option.GetBid(CallOrderCode, 2), 0);
A1.OrderSell(PutOrderCode, 1, Option.GetBid(PutOrderCode, 2), 0);
CurrentVol = 1;
Main.SetTimer(2, 2000);
}
if (Exit == true && HHMMSS >= ExitTime)
{
Exit = false;
if (ExitTime > EntryTime)
Main.KillTimer(1);
var SellDate = Main.GetUserValue("SellDate")
if (YYYYMMDD == SellDate)
{
CallOrderCode = Main.GetUserValue("CallOrderCode");
PutOrderCode = Main.GetUserValue("PutOrderCode");
if (CallOrderCode != "")
{
A1.SetBalance(CallOrderCode, 0);
if (A1.Balance.count > 0 && A1.Balance.position == 1)
CSV = A1.Balance.count;
else
CSV = 0;
if (PSV > 0)
{
Main.SetTimer(3, 2000);
CSX = 1;
A1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 2),0);
}
}
if (PutOrderCode != "")
{
A1.SetBalance(PutOrderCode, 0);
if (A1.Balance.count > 0 && A1.Balance.position == 1)
PSV = A1.Balance.count;
else
PSV = 0;
if (PSV > 0)
{
Main.SetTimer(4, 2000);
PSX = 1;
A1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 2),0);
}
}
}
}
}
if (nEventID == 2)
{
CurrentVol = CurrentVol+1;
if (CurrentVol <= MaxEnryVol)
{
A1.OrderSell(CallOrderCode, 1, Option.GetBid(CallOrderCode, 2),0);
A1.OrderSell(PutOrderCode, 1, Option.GetBid(PutOrderCode, 2), 0);
}
else
{
Main.KillTimer(2);
}
}
if (nEventID == 3)
{
CSX = CSX+1;
if (CSX <= CSV)
{
A1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 2),0);
A1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 2),0);
}
else
{
Main.KillTimer(3);
}
}
if (nEventID == 4)
{
PSX = PSX+1;
if (PSX <= PSV)
{
A1.OrderBuy(CallOrderCode, 1, Option.GetAsk(CallOrderCode, 2),0);
A1.OrderBuy(PutOrderCode, 1, Option.GetAsk(PutOrderCode, 2),0);
}
else
{
Main.KillTimer(4);
}
}
}