예스스탁
예스스탁 답변
2019-04-24 13:58:56
안녕하세요
예스스탁입니다.
청산시에 잔고확인해 잔고에 있는 수량과 신호발생 중 낮은 수량으로 청산하게 수정하고
만기일에는 15시에 보유수량 모두 청산하고 동일행사가의 콜풋으로 진입하게 작성했습니다.
스팟답변은 가이드입니다. 내용 참고하셔서 수정보완하시기 바랍니다.
var Start;
var BuyC1_code;
var BuyC2_code;
var BuyP1_code;
var BuyP2_code;
var SellC1_code;
var SellC2_code;
var SellP1_code;
var SellP2_code;
function Main_OnStart()
{
Main.MessageLog("시작");
Start = 0;
//옵션 만기일이면 타이머셋팅 5초간격
if (Option.GetRemainDays(0,0) == 1)
{
Main.SetTimer(1, 5000);
}
}
function Chart1_OnRiseSignal(Signal)
{
Main.MessageLog("신호완성/"+Signal.signalKind);
//Buy 신호발생
if (Signal.signalKind == 1 )
{
Start = 1;
SellP1_code = Option.GetATMPutRecent(0,0); //풋 ATM 종목코드
var SellP1_price = Option.GetBidByCode(SellP1_code,2);
var Vol = Signal.count; //신호수량
Account1.OrderSell(SellP1_code, Vol, SellP1_price, 0);
Main.MessageLog("상방합성선물매수");
}
//매수청산신호
if (Start == 1 && Signal.signalKind == 3 )
{
Account1.SetBalance(SellP1_code, 0)
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
var BxP1_price = Option.GetAskByCode(Account1.Balance.code, 2);
Account1.OrderBuy(Account1.Balance.code,Math.min(Account1.Balance.count,Signal.count), BxP1_price, 0);
}
Main.MessageLog("상방합성선물매수청산");
}
//Sell 신호발생
if (Signal.signalKind == 3 )
{
Start = 1;
SellC1_code = Option.GetATMCallRecent(0,0); //콜 ATM 종목코드
var SellC1_price = Option.GetBidByCode(SellC1_code,2);
var Vol = Signal.count; //신호수량
Account1.OrderSell(SellC1_code, Vol, SellC1_price , 0);
Main.MessageLog("하방합성선물매도");
}
//매도청산신호
if (Start == 1 && Signal.signalKind == 1 )
{
Account1.SetBalance(SellC1_code, 0):
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
var SxC1_price = Option.GetAskByCode(Account1.Balance.code, 2);
Account1.OrderBuy(Account1.Balance.code,Math.min(Account1.Balance.count,Signal.count), SxC1_price, 0);
}
Main.MessageLog("하방합성선물매도청산");
}
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//15시 이후이면
if (nEventID == 1 && HHMMSS >= 150000)
{
//타이머종료
Main.KillTimer(1);
//전체 종목수
var num = Account1.GetTheNumberOfBalances();
//전체 종목 중 옵션만 청산하고 차월물로 진입
for(var i = 0 ; i < num ; i++)
{
//잔고셋팅
Account1.SetBalance(i);
//옵션함수로 해당 종목이 옵션인지 확인
if (Option.GetCurrent(Account1.Balance.code) > 0 && Account1.Balance.count > 0)
{
//종목코드
var cc = Account1.Balance.code;
//잔고수량
var vv = Account1.Balance.count;
//매도포지션이면
if (Account1.Balance.position == 1)
{
//청산
Account1.OrderBuy(cc, vv,Option.GetAsk(cc, 5),0);
//차근월물 코드 찾기
var strike = Option.GetExercisePrice(cc);
//잔고종목이 콜이면
if (cc == Option.GetCodeByExercisePrice(0,strike))
var NextMonth = Option.GetCodeByExercisePrice(2, strike);
else //잔고종목이 풋이면
var NextMonth = Option.GetCodeByExercisePrice(3, strike);
//동일행사가의 차근월물 매도주문
Account1.OrderSell(NextMonth,vv,Option.GetBid(NextMonth,5),0);
}
//매수포지션이면
if (Account1.Balance.position == 2)
{
//청산
Account1.OrderSell(cc, vv,Option.GetBid(cc, 5),0);
//차근월물 코드 찾기
var strike = Option.GetExercisePrice(cc);
//잔고종목이 콜이면
if (cc == Option.GetCodeByExercisePrice(0,strike))
var NextMonth = Option.GetCodeByExercisePrice(2, strike);
else //잔고종목이 풋이면
var NextMonth = Option.GetCodeByExercisePrice(3, strike);
//동일행사가의 차근월물 매수주문
Account1.OrderBuy(NextMonth,vv,Option.GetAsk(NextMonth,5),0);
}
}
}
}
}
즐거운 하루되세요
> 몬스터 님이 쓴 글입니다.
> 제목 : 옵션 만기일 거래 시스템
> 수고하십니다.
아래의 옵션매매 시스템을 보완하고 싶습니다.
1. 장개시시 잔고종목 및 수량 확인
2. 청산신호시 잔고수량을 확인하여 전체 잔고 종목 및 수량을 청산
3. 만기일 1500시이후 옵션 당월물 보유수량 전체를 청산하고 차월물 진입
----------------------------------------------------------------------
var Start;
var BuyC1_code;
var BuyC2_code;
var BuyP1_code;
var BuyP2_code;
var SellC1_code;
var SellC2_code;
var SellP1_code;
var SellP2_code;
function Main_OnStart()
{
Main.MessageLog("시작");
Start = 0;
}
function Chart1_OnRiseSignal(Signal)
{
Main.MessageLog("신호완성/"+Signal.signalKind);
//Buy 신호발생
if (Signal.signalKind == 1 )
{
Start = 1;
SellP1_code = Option.GetATMPutRecent(0,0); //풋 ATM 종목코드
var SellP1_price = Option.GetBidByCode(SellP1_code,2);
var Vol = Signal.count; //신호수량
Account1.OrderSell(SellP1_code, Vol, SellP1_price, 0);
Main.MessageLog("상방합성선물매수");
}
//매수청산신호
if (Start == 1 && Signal.signalKind == 3 )
{
var BxP1_price = Option.GetAskByCode(SellP1_code, 2);
var Vol = Signal.count; //신호수량
Account1.OrderBuy(SellP1_code, Vol, BxP1_price, 0);
Main.MessageLog("상방합성선물매수청산");
}
//Sell 신호발생
if (Signal.signalKind == 3 )
{
Start = 1;
SellC1_code = Option.GetATMCallRecent(0,0); //콜 ATM 종목코드
var SellC1_price = Option.GetBidByCode(SellC1_code,2);
var Vol = Signal.count; //신호수량
Account1.OrderSell(SellC1_code, Vol, SellC1_price , 0);
Main.MessageLog("하방합성선물매도");
}
//매도청산신호
if (Start == 1 && Signal.signalKind == 1 )
{
var SxC1_price = Option.GetAskByCode(SellC1_code, 2);
var Vol = Signal.count; //신호수량
Account1.OrderBuy(SellC1_code, Vol, SxC1_price, 0);
Main.MessageLog("하방합성선물매도청산");
}
}