예스스탁
예스스탁 답변
2023-04-06 11:42:56.0
안녕하세요
예스스탁입니다.
아래 내용을 참고하시기 바랍니다.
스크립트 객체설정
차트객체추가 --> 객체명 Chart1, 차트와 동일 아이디 지정
옵션객체추가 --> 객체명 Option1, 코스피200지수옵션으로 지정
계좌객체추가 --> 객체명 Account1, 주문낼 계좌번호 지정
var CallOrderCode, PutOrderCode;
var BVOL,BID,BNUM,SVOL,SID,SNUM;
var BXVOL,BXID,BXNUM,SXVOL,SXID,SXNUM;
//스팟시작 이벤트
function Main_OnStart()
{
Main.MessageList("Start");
}
//신호발생 이벤트
function Chart1_OnRiseSignal(Signal)
{
//매수진입신호
if (Signal.signalKind == 1)
{
//+1외가격 콜옵션
CallOrderCode = Option1.GetATMCallRecent(1);
BVOL = Signal.count;
//매수1호가로 매수주문
BID = Account1.OrderBuy(CallOrderCode, BVOL, Option1.GetBid(CallOrderCode, 1), 0);
//1번 타이머 3초 셋팅
Main.SetTimer(1, 3000);
}
//매수청산신호
if (BVOL > 0 && Signal.signalKind == 2)
{
//청산수량은 진입수량
BXVOL = BVOL;
//진입주문 미체결 셋팅
Account1.SetUnfill(BNUM);
//미체결이 있으면
if (Account1.Unfill.count > 0)
{
//진입수량에서 미체결수량 차감해서 청산수량 산정
BXVOL = BVOL-Account1.Unfill.count;
//미체결 진입주문은 취소
Account1.OrderCancel(BNUM);
}
//청산수량이 있으면
if (BXVOL > 0)
{
//매도 1호가로 매도주문
Account1.OrderSell(CallOrderCode, BXVOL, Option1.GetAsk(CallOrderCode, 1), 0);
//2번 타이머 3초 셋팅
Main.SetTimer(2, 3000);
}
}
//매도진입신호이면
if (Signal.signalKind == 3)
{
//1외가격 풋옵션
PutOrderCode = Option1.GetATMPutRecent(1);
SVOL = Signal.count;
//매도1호가로 매도주문
SID = Account1.OrderSell(PutOrderCode, SVOL, Option1.GetAsk(PutOrderCode, 1), 0);
//3번 타이머 3초 셋팅
Main.SetTimer(3, 3000);
}
//매도청산신호
if (SVOL > 0 && Signal.signalKind == 4)
{
//청산수량은 진입수량
SXVOL = SVOL;
//진입주문 미체결 셋팅
Account1.SetUnfill(SNUM);
//미체결이 있으면
if (Account1.Unfill.count > 0)
{
//진입수량에서 미체결수량 차감해서 청산수량 산정
SXVOL = SVOL-Account1.Unfill.count;
//미체결 진입주문은 취소
Account1.OrderCancel(SNUM);
}
//청산수량이 있으면
if (SXVOL > 0)
{
//매수1호가로 매수주문
Account1.OrderBuy(PutOrderCode, BXVOL, Option1.GetBid(PutOrderCode, 1), 0);
//4번 타이머 3초 셋팅
Main.SetTimer(4, 3000);
}
}
}
//주문응답 이벤트
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BID)
{
BNUM = OrderResponse.orderNum;
}
if (OrderResponse.orderID == BXID)
{
BXNUM = OrderResponse.orderNum;
}
if (OrderResponse.orderID == SID)
{
SNUM = OrderResponse.orderNum;
}
if (OrderResponse.orderID == SXID)
{
SXNUM = OrderResponse.orderNum;
}
}
//타이머 이벤트
function Main_OnTimer(nEventID)
{
//1번 타이머 동작
if (nEventID == 1)
{
//1번 타이머 종료
Main.KillTimer(1);
//매수진입주문 미체결셋팅
Account1.SetUnfill(BNUM);
//미체결수량이 있으면
if (Account1.Unfill.count > 0)
{
//매도1호가로 정정
Account1.OrderReplacePrice(BNUM,Option1.GetAsk(Account1.Unfill.code, 1))
}
}
//2번 타이머 동작
if (nEventID == 2)
{
//2번 타이머 종료
Main.KillTimer(2);
//매수청산주문 미체결셋팅
Account1.SetUnfill(BXNUM);
//미체결수량이 있으면
if (Account1.Unfill.count > 0)
{
//매수1호가로 정정
Account1.OrderReplacePrice(BXNUM,Option1.GetBid(Account1.Unfill.code, 1))
}
}
//3번 타이머 동작
if (nEventID == 3)
{
//3번 타이머 종료
Main.KillTimer(3);
//매도진입주문 미체결셋팅
Account1.SetUnfill(SNUM);
//미체결수량이 있으면
if (Account1.Unfill.count > 0)
{
//매수1호가로 정정
Account1.OrderReplacePrice(SNUM,Option1.GetBid(Account1.Unfill.code, 1))
}
}
//4번 타이머 동작
if (nEventID == 4)
{
//4번 타이머 종료
Main.KillTimer(1);
//매도청산주문 미체결셋팅
Account1.SetUnfill(SXNUM);
//미체결수량이 있으면
if (Account1.Unfill.count > 0)
{
//매도1호가로 정정
Account1.OrderReplacePrice(SXNUM,Option1.GetAsk(Account1.Unfill.code, 1))
}
}
}
즐거운 하루되세요
> 시고르시고르 님이 쓴 글입니다.
> 제목 : 수식작성 부탁드립니다.
>
1. 차트에서 매수신호발생 >>
매수 수량과 같은 수량으로 1번째 외가격 콜매도.
(매도1호가에 주문.3초안에 체결이 되지 않을시 매수1호가에 매도주문으로 변경
아래 주문에서도 같은 방식으로 주문)
2. 차트에서 매수청산 신호 발생 >> 콜옵션 청산
3. 차트에서 매도신호발생 >> 매도 수량과 같은 수량으로 1번째 외가격 풋매도
4. 차트에서 매도청산 신호 발생 >> 풋옵션 청산
5. 3시30분까지 수량이 남아있으면 청산주문 발생
스팟언어가 익숙치 않아 부득이 부탁드리게 되었습니다. 감사합니다.