예스스탁
예스스탁 답변
2019-08-30 11:26:44
안녕하세요
예스스탁입니다.
아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다.
신호발생시 주문까지만 작성해 드립니다.
지정가 주문에 대해 미체결 해소는 방법을 모르겠습니다.
해당 부분은 사용자분이 구상하셔서 추가해 보셔야 합니다.
옵션 종류는 옵션객체 속성에서 지정하시면 됩니다.
스크립트 객체설정
차트객체추가 --> 객체명 Chart1, 차트아이디 연결
옵션객체추가 --> 객체명 Option1, 일반이나 미니옵션 중 선택
계좌객체추가 --> 객체명 Account1, 계좌번호지정
var T;
var Put1,Put2,Put3,BEP1,BEP2,BEP3,BXP1,BXP2,BXP3;
var Call1,Call,Call3,SEP1,SEP2,SEP3,SXP1,SXP2,SXP3;
function Main_OnStart()
{
T = 0;
}
function Chart1_OnRiseSignal(Signal)
{
//매수진입신호 발생(T가 0일때만)
if (T == 0 && Signal.signalKind == 1)
{
//T는 1
T = 1;
//풋등가부터 아래 행사가 총 3개 지정
Put1 = Option1.GetATMPutRecent(0);
Put2 = Option1.GetATMPutRecent(1);
Put3 = Option1.GetATMPutRecent(2);
//매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가
//매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가
BEP1 = Option1.GetCurrent(Put1);
BEP2 = Option1.GetCurrent(Put2);
BEP3 = Option1.GetCurrent(Put3);
for (var i = 1; i <= 5; i++)
{
if (Option1.GetBid(Put1,i) > 0)
BEP1 = Option1.GetBid(Put1,i);
if (Option1.GetAsk(Put2,i) > 0)
BEP2 = Option1.GetAsk(Put2,i);
if (Option1.GetBid(Put3,i) > 0)
BEP3 = Option1.GetBid(Put3,i);
}
//각 가격이 0이상이면 주문
if (BEP1 > 0)
Account1.OrderSell(Put1, 2,BEP1,0);
if (BEP2 > 0)
Account1.OrderBuy(Put2,3, BEP2, 0);
if (BEP3 > 0)
Account1.OrderSell(Put3,4, BEP3, 0);
}
//매수청산 신호 발생
if (T == 1 && Signal.signalKind == 2)
{
//T는 2
T = 2;
//매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가
//매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가
BXP1 = Option1.GetCurrent(Put1);
BXP2 = Option1.GetCurrent(Put2);
BXP3 = Option1.GetCurrent(Put3);
for (var i = 1; i <= 5; i++)
{
if (Option1.GetAsk(Put1,i) > 0)
{
BXP1 = Option1.GetAsk(Put1,i);
}
if (Option1.GetBid(Put2,i) > 0)
{
BXP2 = Option1.GetBid(Put2,i);
}
if (Option1.GetAsk(Put3,i) > 0)
{
BXP3 = Option1.GetAsk(Put3,i);
}
}
//각 가격이 0이상이면 주문
if (BXP1 > 0)
Account1.OrderBuy(Put1, 2,BXP1,0);
if (BXP2 > 0)
Account1.OrderSell(Put2,3, BXP2, 0);
if (BXP3 > 0)
Account1.OrderBuy(Put3,4, BXP3, 0);
}
//매도진입신호 발생(T가 0일때만)
if (T == 0 && Signal.signalKind == 3)
{
T = -1;
//콜등가부터 위 행사가 총 3개 지정
Call1 = Option1.GetATMCallRecent(0);
Call2 = Option1.GetATMCallRecent(1);
Call3 = Option1.GetATMCallRecent(2);
//매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가
//매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가
SEP1 = Option1.GetCurrent(Call1);
SEP2 = Option1.GetCurrent(Call2);
SEP3 = Option1.GetCurrent(Call3);
for (var i = 1; i <= 5; i++)
{
if (Option1.GetBid(Call1,i) > 0)
SEP1 = Option1.GetBid(Call1,i);
if (Option1.GetAsk(Call2,i) > 0)
SEP2 = Option1.GetAsk(Call2,i);
if (Option1.GetBid(Call3,i) > 0)
SEP3 = Option1.GetBid(Call3,i);
}
//각 가격이 0이상이면 주문
if (SEP1 > 0)
Account1.OrderSell(Call1, 2,SEP1,0);
if (SEP2 > 0)
Account1.OrderBuy(Call2,3, SEP2, 0);
if (SEP3 > 0)
Account1.OrderSell(Call3,4, SEP3, 0);
}
//매도청산 신호 발생
if (T == -1 && Signal.signalKind == 4)
{
//T는 -2
T = -2;
//매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가
//매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가
SXP1 = Option1.GetCurrent(Call1);
SXP2 = Option1.GetCurrent(Call2);
SXP3 = Option1.GetCurrent(Call3);
for (var i = 1; i <= 5; i++)
{
if (Option1.GetAsk(Call1,i) > 0)
{
SXP1 = Option1.GetAsk(Call1,i);
}
if (Option1.GetBid(Call2,i) > 0)
{
SXP2 = Option1.GetBid(Call2,i);
}
if (Option1.GetAsk(Call3,i) > 0)
{
SXP3 = Option1.GetAsk(Call3,i);
}
}
//각 가격이 0이상이면 주문
if (SXP1 > 0)
Account1.OrderBuy(Call1, 2,SXP1,0);
if (SXP2 > 0)
Account1.OrderSell(Call2,3, SXP2, 0);
if (SXP3 > 0)
Account1.OrderBuy(Call3,4, SXP3, 0);
}
}
즐거운 하루되세요
> dandy 님이 쓴 글입니다.
> 제목 : 스팟수식 요청 드립니다.
> 안녕하세요.
연결선물 차트에서 매도신호 발생하면 (매도신호->콜옵션)
당일 등가 콜옵션 2개 매도, 등가+2.5 콜옵션 3개 매수, 등가+5.0 콜옵션 4개 매도하고
매도청산신호가 발생하면 전량 청산하고 당일 매매종료.
연결선물 차트에서 매수신호 발생하면 (매수신호->풋옵션)
당일 등가 풋옵션 2개 매도, 등가-2.5 풋옵션 3개 매수, 등가-5.0 풋옵션 4개 매도하고
매수청산신호가 발생하면 전량 청산하고 당일 매매종료.
옵션가격은 현재 주문가에서 호가 잔량이 있는 + - 5호가 이내에서 미체결이 발생하지
않도록하고, 미체결이 발생할경우 즉시 정정주문으로 체결되도록 스팟수식 요청 드립니다.
옵션 가격별 매도수량 매수량은 변수로 요정드리고, 수식 설명 주석 요청 드립니다.
1.일반옵션진입 2.미니옵션진입 2가지 스팟수식요청 드립니다.
감사합니다.