예스스탁
예스스탁 답변
2021-05-06 16:15:40
안녕하세요
예스스탁입니다.
1
해당 수식에 전일거래한 종목의 코드가
Main.SetUserValue("CallOrderCode", CallOrderCode);
Main.SetUserValue("PutOrderCode", PutOrderCode);
위함수를 이용해 내부파일에 적혀지게 되어 있습니다.
그리고 15시5분에
var PreDayCall = Main.GetUserValue("CallOrderCode");
var PreDayPut = Main.GetUserValue("PutOrderCode");
위 함수를 이용해 저장된 종목코드를 가져와서 해당 종목이 있는지 확인후에 청산하게 되어 있습니다.
잔고에는 해당 종목의 진입일에 대한 정보가 없어
수식에서 전일종목임을 알기 위해서는 별도로 내부파일에 적어서 보관한후에 필요한 시점에 값을 호출하여 청산하게 하셔야합니다.
스팟수식은 저희가 식흐름에 대한 가이드만 제공합니다.
해당 수식 내용을 수정하셔서 식완성해 가셔야 합니다.
2
15시5분에 잔고에 매도한 옵션종목이 있으면 모두 전량 청산하게 수정해 드립니다.
function Main_OnTimer(nEventID)
{
if (nEventID <= 1)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//15시 10분
if (Entry == false && HHMMSS >= 151000 )
{
Entry = true;
//차트가 매수유지봉
if (Chart1.GetOpenContracts() > 0)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("매수신호유지");
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
//================================ 중략 ========================================
{
Account1.OrderSell(CallOrderCode, 1, 0, 1);
Account1.OrderSell(PutOrderCode, 1, 0, 1);
Main.SetUserValue("CallOrderCode", CallOrderCode);
Main.SetUserValue("PutOrderCode", PutOrderCode);
}
}
}
//15시 5분
if (Exit == false && HHMMSS >= 150500 )
{
Exit = true;
var num = Account1.GetTheNumberOfBalances();
if (num >= 1)
{
for (var i = 0; i < num; i++)
{
Account1.SetBalance(i);
if (Account1.Balance.count > 0 && Option.GetCurrent(Account1.Balance.code) > 0)
{
if Account1.Balance.position == 1)
{
Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1);
}
if (Account1.Balance.position == 1)
{
Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1);
}
}
}
}
}
}
즐거운 하루되세요
> 팡팡 님이 쓴 글입니다.
> 제목 : 수식부탁합니다.
> 안녕하세요
많은 도움 받고있습니다.
당일 콜,풋 양매도한 전량을 종목에 상관없이 당일 15시 5분에 콜풋 모두 청산하는 식 원합니다.
아래 식은 전일 양매도한 걸 당일 15시 5분에 청산하는식이나 정상작동되지 않습니다.
var CallOrderCode,PutOrderCode;
var Entry, Exit;
function Main_OnStart()
{
Entry = false;
Exit = false;
Main.SetTimer(1, 5000);
}
function Main_OnTimer(nEventID)
{
if (nEventID <= 1)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//15시 10분
if (Entry == false && HHMMSS >= 151000 )
{
Entry = true;
//차트가 매수유지봉
if (Chart1.GetOpenContracts() > 0)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("매수신호유지");
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
================================ 중략 ========================================
{
Account1.OrderSell(CallOrderCode, 1, 0, 1);
Account1.OrderSell(PutOrderCode, 1, 0, 1);
Main.SetUserValue("CallOrderCode", CallOrderCode);
Main.SetUserValue("PutOrderCode", PutOrderCode);
}
}
}
//15시 5분
if (Exit == false && HHMMSS >= 150500 )
{
Exit = true;
//내부파일의 값을 가져와 변수에 저장
var PreDayCall = Main.GetUserValue("CallOrderCode");
var PreDayPut = Main.GetUserValue("PutOrderCode");
//PreDayCall에 값이 있으면
if (PreDayCall != "")
{
//잔고셋팅후 매도포지션이면 청산하고
//내부파일의 값을 빈공간으로 만듬
Account1.SetBalanceItem(PreDayCall,0)
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1);
Main.SetUserValue("CallOrderCode", "");
}
}
//PreDayPutl에 값이 있으면
if (PreDayPut != "")
{
//잔고셋팅후 매도포지션이면 청산하고
//내부파일의 값을 빈공간으로 만듬
Account1.SetBalanceItem(PreDayPut,0)
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1);
Main.SetUserValue("PutOrderCode", "");
}
}
//모두 수행후 값을 빈공간으로 만듬
Main.SetUserValue("CallOrderCode", "");
Main.SetUserValue("PutOrderCode", "");
}