예스스탁
예스스탁 답변
2018-06-29 13:00:46
안녕하세요
예스스탁입니다.
해외선물에 맞추 변경해 드립니다.
진입시간, 청산시간, 수익은 종목에 맞게 재지정하시기 바랍니다.
스크립트객체 화면설정
계좌객체 추가 --> 속성에서 객체명은 Acccount, 주문낼 계좌번호 지정
종목객체 추가 --> 속성에서 객체명은 MarketData1,주문낼 종목으로 지정
var ID,Fill;
var entry,HHMMSS,HHMMSS;
var vol = 1;//진입수량
var 진입시간 = 110000;
var 청산시간 = 150000;
var 수익 = 0.5;
function Main_OnStart()
{
//타이머 5초단위
Main.SetTimer(1, 5000);
step = 0;
Fill = false;
}
function Main_OnTimer(nEventID)
{
var d = new Date();
HHMMSS1 = HHMMSS;
HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (step == 0 && HHHMMSS >= 진입시간 && HHMMSS1 < 진입시간)
{
//step은 1로 변경
step = 1;
EID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),vol,MarketData1.Bid(3),2);
}
if (HHHMMSS > 110000 && step == 1 && Fill == true )
{
//CallCode 잔고셋팅
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),2);
//수량이 1이상이고 매도포지션이면 손익을 sumPL에 저장
if (Account1.Balance.count >= 1 && Account1.Balance.position == 1)
{
var sumPL = (Account1.Balance.avgUnitCost - Account1.Balance.current);
//손익이 지정한 수익 이상이면
if (sumPL >= 수익)
{
//step은 2로 변경
step = 2;
//매도3호가로 매수주문
Account1.OrderBuy(GetOrderCode(MarketData1.code), vol,MarketData1.Ask(3), 2);
}
}
}
//수익청산되지 않고 15시가 되면
if (step == 1 && HHHMMSS >= 청산시간 && HHHMMSS1 < 청산시간 )
{
//step은 2로 변경
step = 2;
Main.KillTimer(1);
//콜풋 모두 매도3호가로 매수주문
Account1.OrderBuy(GetOrderCode(MarketData1.code), vol,MarketData1.Ask(3), 2);
}
}
//주문응답수신
function Main_OnOrderResponse(OrderResponse)
{
//수신된 주문응답의 아이디가 CallID와 같으면
if (OrderResponse.orderID == ID)
{
//CallNum에 주문번호저장
Num = OrderResponse.orderNum;
}
}
//체결응답수신
function Main_OnNotifyFill(NotifyFill)
{
//CallNum에 대한 체결응답이면
if (NotifyFill.orderNum == Num)
{
//Num에 대한 미체결객체 세팅하고
Account1.SetUnfill(Num);
//미체결수량이 없으면(주문전량체결)
if (Account1.Unfill.count == 0)
{
//Fill에 true 저장
Fill = true;
}
}
}
즐거운 하루되세요
> 하늘북 님이 쓴 글입니다.
> 제목 : 문의 드립니다.^.^
> 안녕하세요?
작성해 주심 전략 감사합니다...
아래 전략에 오일거래를 할수 있도록 수정 부탁드리겠습니다.
감사합니다...^.^
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;
}
}
}