예스스탁
예스스탁 답변
2018-03-20 11:08:12
안녕하세요
예스스탁입니다.
11시 양매도로 작성한 식입니다.
아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다.
var CallCode,CallID,CallNum,CallFill;
var PutCode,PutID,PutNum,PutFill;
var entry;
var vol = 1;//진입수량
function Main_OnStart()
{
//타이머 5초단위
Main.SetTimer(1, 5000);
step = 0;
CallFill = false;
PutFill = false;
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (step == 0 && HHHMMSS > 110000)
{
//step은 1로 변경
step = 1;
//ATM콜 종목코드
CallCode = Option1.GetATMCallRecent(0);
//ATM풋 종목코드
PutCode = Option1.GetATMPutRecent(0);
//Call종목 매수3호가로 매도주문하고 주문아이디는 CallID에 저장
CallID = Account1.OrderSell(CallCode,vol,Option1.GetBid(CallCode,3),0);
//Put종목 매수3호가로 매도주문하고 주문아이디는 PutID에 저장
PutID = Account1.OrderSell(PutCode,vol,Option1.GetBid(PutCode,3),0);
}
//양매도 후 콜/풋 모두 체결이 되었으면
if (HHHMMSS > 110000 && step == 1 && CallFill == true && PutCall == true )
{
//손익저장할 변수(초기값0)
var sumPL = 0;
//CallCode 잔고셋팅
Account1.SetBalance(CallCode,0);
//수량이 1이상이고 매도포지션이면 손익을 sumPL에 합산저장
if (Account1.Balance.count >= 1 && Account1.Balance.position == 1)
{
sumPL = SumPL + (Account1.Balance.avgUnitCost - Account1.Balance.current);
}
//PutlCode 잔고셋팅
Account1.SetBalance(CallCode,0);
//수량이 1이상이고 매도포지션이면 손익을 sumPL에 합산저장
if (Account1.Balance.count >= 1 && Account1.Balance.position == 1)
{
sumPL = SumPL + (Account1.Balance.avgUnitCost - Account1.Balance.current);
}
//합산손익이 +0.5 이상이면
if (sumPL >= 0.5)
{
//step은 2로 변경
step = 2;
//콜풋 모두 매도3호가로 매수주문
Account1.OrderBuy(CallCode, vol, Option1.GetAsk(CallCode, 3), 0);
Account1.OrderBuy(PutCode, vol, Option1.GetAsk(PutCode, 3), 0);
}
}
//수익청산되지 않고 15시가 되면
if (step == 1 && HHHMMSS >= 150000)
{
//step은 2로 변경
step = 2;
Main.KillTimer(1);
//콜풋 모두 매도3호가로 매수주문
Account1.OrderBuy(CallCode, vol, Option1.GetAsk(CallCode, 3), 0);
Account1.OrderBuy(PutCode, vol, Option1.GetAsk(PutCode, 3), 0);
}
}
//주문응답수신
function Main_OnOrderResponse(OrderResponse)
{
//수신된 주문응답의 아이디가 CallID와 같으면
if (OrderResponse.orderID == CallID)
{
//CallNum에 주문번호저장
CallNum = OrderResponse.orderNum;
}
//수신된 주문응답의 아이디가 PutID와 같으면
if (OrderResponse.orderID == PutID)
{
//PutNum에 주문번호저장
PutNum = OrderResponse.orderNum;
}
}
//체결응답수신
function Main_OnNotifyFill(NotifyFill)
{
//CallNum에 대한 체결응답이면
if (NotifyFill.orderNum == CallNum)
{
//CallNum에 대한 미체결객체 세팅하고
Account1.SetUnfill(CallNum);
//미체결수량이 없으면(주문전량체결)
if (Account1.Unfill.count == 0)
{
//CallFill에 true 저장
CallFill = true;
}
}
//PutNum에 대한 체결응답이면
if (NotifyFill.orderNum == PutNum)
{
//PutNum에 대한 미체결객체 세팅하고
Account1.SetUnfill(PutNum);
//미체결수량이 없으면(주문전량체결)
if (Account1.Unfill.count == 0)
{
//PutFill에 true 저장
PutFill = true;
}
}
}
즐거운 하루되세요
> 하늘북 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 선물옵션 거래시
옵션 양매도를 할경우 가격교차지점에서 양매도 포지션을 진입하거나, 일정시간즉 매일 11시에 양매도 진입하고, 양합이 50틱 수익 발생시 일괄청산하거나, 매일 15에 일괄청산하는 수식을 부탁드려도 될까요?