예스스탁
예스스탁 답변
2024-04-18 17:21:51.0
안녕하세요
예스스탁입니다.
아래 가이드 참고하시기 바랍니다.
스크립트 객체설정
옵션객체 추가 --> 속성에서 객체명 Option1, 옵션월물지정
차트객체 추가 --> 속성에서 객체명 Chart1, 차트와 동일한 아이디 부여
계좌객체 추가 --> 속성에서 객체명 Account1, 주문낼 계좌번호 지정
var 진입수량 = 1;
var CallCode,CallMax,PutCode,PutMax;
var BV,BID,BNUM,SV,SID,SNUM;
//스팟시작
function Main_OnStart()
{
Main.MessageList("Start");
}
function Chart1_OnRiseSignal(Signal)
{
//Buy신호 발생
if (Signal.signalKind == 1)
{
//콜 3.0이하 중 가장 큰 종목 선택
CallCode = "";
CallMax = 0;
for (var i = -Option1.lowersATM; i <= Option1.uppersATM; i++)
{
if (Option1.GetCurrent(0,i) <= 3.0 && (CallMax == 0 || (CallMax > 0 && Option1.GetCurrent(0,i) > CallMax)))
{
CallMax = Option1.GetCurrent(0,i);
CallCode = Option1.GetATMCallRecent(i);
}
}
Main.MessageList("Buy발생 : 콜매수종목:",CallCode,CallMax);
//콜종목 선정이 되었으면
if (CallMax > 0)
{
//진입주문 수량
BV = 진입수량;
//매도3호가로 지정한 수량 매수주문
BID = Account1.OrderBuy(CallCode, BV, Option1.GetAsk(CallCode, 3), 0);
}
}
//매수청산신호 발생(CallMax > 0은 스팟시작후 매수진입신호가 발생했음을 의미)
if (Signal.signalKind == 2 && CallMax > 0)
{
//청산수량 기본값은 진입수량
var BXV = BV;
//진입주문 미체결 체크
Account1.SetUnfill(BNUM);
//미체결이 있으면
if (Account1.Unfill.count > 0)
{
//청산수량은 진입수량-미체결수량
BXV = BV-Account1.Unfill.count;
//진입 미체결주문 취소
Account1.OrderCancel(BNUM);
}
//청산할 수량이 있으면
if (BXV > 0)
{
//매수3호가로 매도주
Account1.OrderSell(CallCode, BXV, Option1.GetBid(CallCode, 3),0);
}
}
//Sell신호 발생
if (Signal.signalKind == 3)
{
//풋 3.0이하 중 가장 큰 종목 선택
PutCode = "";
PutMax = 0;
for (var i = -Option1.lowersATM; i <= Option1.uppersATM; i++)
{
if (Option1.GetCurrent(1,-i) <= 3.0 && (PutMax == 0 || (PutMax > 0 && Option1.GetCurrent(1,-i) > PutMax)))
{
PutMax = Option1.GetCurrent(1,-i);
PutCode = Option1.GetATMPutRecent(-i);
}
}
Main.MessageList("Sell발생 : 풋매수종목:",PutCode,PutMax);
//풋종목 선정이 되었으면
if (PutMax > 0)
{
//진입주문 수량
SV = 진입수량;
//매도3호가로 지정한 수량 매수주문
SID = Account1.OrderBuy(PutCode, SV, Option1.GetAsk(PutCode, 3), 0);
}
}
//매도청산신호 발생(PutMax > 0은 스팟시작후 매도진입신호가 발생했음을 의미)
if (Signal.signalKind == 4 && PutMax > 0)
{
//청산수량 기본값은 진입수량
var SXV = SV;
//진입주문 미체결 체크
Account1.SetUnfill(SNUM);
//미체결이 있으면
if (Account1.Unfill.count > 0)
{
//청산수량은 진입수량-미체결 수량
SXV = SV-Account1.Unfill.count;
//진입 미체결주문 주문취소
Account1.OrderCancel(SNUM);
}
//청산할 수량이 있으면
if (SXV > 0)
{
//매수3호가로 매도주문
Account1.OrderSell(PutCode, SXV, Option1.GetBid(PutCode, 3),0);
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
//Buy신호시 콜매수 주문응답
if (OrderResponse.orderID == BID)
{
//주문번호 저장
BNUM = OrderResponse.orderNum;
}
//Sell신호시 풋매수 주문응답
if (OrderResponse.orderID == SID)
{
//주문번호 저장
SNUM = OrderResponse.orderNum;
}
}
즐거운 하루되세요
> mao 님이 쓴 글입니다.
> 제목 : 문의드림니다
> 선물 분봉 당일매매 수식을 이용해서 옵션매수하는 수식부탁드림니다
즉 선물 매수신호시 콜옵션(3.0이하 중 3.0에 가장 가까운 가격) 매수하고
선물 매도신호시 풋옵션(3.0이하 중 3.0에 가장 가까운 가격) 매수하고
선물 매수청산 신호시 콜옵션 매수청산
선물 매도청산 신호시 풋옵션 매수청산 하는 수식 부탁드림니다