예스스탁
예스스탁 답변
2018-01-02 18:18:25
안녕하세요
예스스탁입니다.
작성하신 코드만 보기에는 특별한 문제가 보이지 않습니다.
간단한 내용으로 주문집행을 해 보아도 문제 없이 발생하고 있습니다.
아래와 같이 15시5분에 수행할 로직에
메세지 추가하셔서 15시5분에 각 변수별로 어떤 값이 리턴되는지 확인해 보셔야 할것 같습니다.
아래 내용이 정상적으로 값이 찍히지 않으면 02-3453-1060으로 전화주시기 바랍니다.
//15시 5분
if (Exit == false && HHMMSS >= 150500 )
{
Exit = true;
//내부파일의 값을 가져와 변수에 저장
var PreDayCall = Main.GetUserValue("CallOrderCode");
var PreDayPut = Main.GetUserValue("PutOrderCode");
Main.MessageList("call",PreDayCall,"put",PreDayPut);
//PreDayCall에 값이 있으면
if (PreDayCall != "")
{
//잔고셋팅후 매도포지션이면 청산하고
//내부파일의 값을 빈공간으로 만듬
Account1.SetBalanceItem(PreDayCall,0)
Main.MessageList(Account1.Balance.count,Account1.Balance.position);
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)
Main.MessageList(Account1.Balance.count,Account1.Balance.position);
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", "");
}
새해 복 많이 받으세요
> 팡팡 님이 쓴 글입니다.
> 제목 : 다음날 청산 되는 수식
> 아래 수식은 전일 15시 10분에 매도하여 다음날 15시 5분에 청산하는 수식입니다.
그런데 실전에서는 당일 15시 10분에 주문(매도)이 되나 다음날 15시 05분에 청산이 안되는데 뭐가 잘못되었는지 수정 부탁합니다.
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.SetUserValue("CallOrderCode", "");
Main.SetUserValue("PutOrderCode", "");
}
//차트가 매수유지봉
if (Chart1.GetOpenContracts() > 0)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("매수신호유지");
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
================================ 중략 ========================================
//종목을 찾았으면
if (CC < 99999999 && PP < 99999999)
{
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", "");
}
//콜매도, 풋매도 금액의 합으로 +500000원 익절, -500000원 손절
if (HHMMSS < 150500)
{
// 옵션매도포지션 전체 손익계산
var num = Account1.GetTheNumberOfBalances();
var PLsum = 0;
for(var i = 0; i < num; i++)
{
//잔고셋팅
Account1.SetBalanceIndex(i);
//매도포지션이고 옵션종목이고
if (Account1.Balance.position == 1 && (Account1.Balance.code.substring(0,1) == "2" || Account1.Balance.code.substring(0,1) == "3"))
{
//각 옵션매도종목의 (평균단가-현재가)*수량*50만원을 누적
PLsum = PLsum + ((Account1.Balance.avgUnitCost - Account1.Balance.current)*Account1.Balance.count)*500000;
}
}
//손익이 +50만원이상이거나 -50만원 이하이면
if (PLsum >= 500000 || Plsum <= -500000)
{
for(var i = 0; i < num; i++)
{
//잔고셋팅
Account1.SetBalanceIndex(i);
//매도포지션이고 옵션종목이고
if (Account1.Balance.position == 1 && (Account1.Balance.code.substring(0,1) == "2" || Account1.Balance.code.substring(0,1) == "3"))
{
Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0,1);
}
}
}
}
}
}