예스스탁
예스스탁 답변
2014-08-05 15:16:22
안녕하세요
예스스탁입니다.
예스스팟의 수식답변은 가이드 입니다.
아래내용 참고하셔서 수정 보완해 사용하시기 바랍니다.
스크립트 객체화면에서 아래와 같이 설정하고 식 적용하셔야 합니다.
차트객체 추가 --> 속성에서 객체명 Chart1, 아이디 지정
계좌객체 추가 --> 속성에서 객체명 Account1, 계좌번호 지정
옵션객체 추가
외부변수 추가 --> 속성에서 변수명 Vol, 초기값 1, 데이터형 숫자
var Start;
var CC, CallOrderCode;
var PP, PutOrderCode;
function Main_OnStart()
{
Start = 0;
Main.SetTimer(1, 5000);
}
function Chart1_OnRiseSignal(Signal)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (Signal.signalKind == 1 && HHMMSS < 150000)
{
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
var CallCode = new Array(UNum+LNum+1);
var CallPrice = new Array(UNum+LNum+1);
var PutCode = new Array(UNum+LNum+1);
var PutPrice = new Array(UNum+LNum+1);
for (var i = -LNum; i <= UNum; i++)
{
if (Option.GetCurrent(0, i) <= 3.0 && Option.GetDelta(0,i) != 0)
{
CallPrice[i+LNum] = Math.abs(0.5 - Math.abs(Option.GetDelta(0,i)));
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
else
{
CallPrice[i+LNum] = 999999;
CallCode[i+LNum] = 999999;
}
}
for (var i = -UNum; i <= LNum; i++)
{
if (Option.GetCurrent(1, i) <= 3.0 && Option.GetDelta(1,i) != 0 )
{
PutPrice[i+UNum] = Math.abs(0.5 - Math.abs(Option.GetDelta(1,i)));
PutCode[i+UNum] = Option.GetATMPutRecent(i);
}
else
{
PutPrice[i+UNum] = 999999;
PutCode[i+UNum] = 999999;
}
}
CC = 999999;
CallOrderCode = 999999;
for (var i = -LNum; i <= UNum; i++)
{
if (CallPrice[i+LNum] < CC)
{
CC = CallPrice[i+LNum];
CallOrderCode = CallCode[i+LNum]
}
}
PP = 999999;
PutOrderCode = 999999;
for (var i = -UNum; i <= LNum; i++)
{
if (PutPrice[i+UNum] < PP)
{
PP = PutPrice[i+UNum];
PutOrderCode = PutCode[i+UNum];
}
}
if (CC < 999999 && PP < 999999)
{
Start = 1;
Account1.OrderBuy(CallOrderCode, Vol, 0, 1);
Account1.OrderSell(PutOrderCode, Vol, 0, 1);
}
}
if (Start == 1 && Signal.signalKind == 2 && HHMMSS < 150000 )
{
Start = 0;
Account1.OrderSell(CallOrderCode, Vol, 0, 1);
Account1.OrderBuy(PutOrderCode, Vol, 0, 1);
}
if (Signal.signalKind == 3 && HHMMSS < 150000 )
{
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
var CallCode = new Array(UNum+LNum+1);
var CallPrice = new Array(UNum+LNum+1);
var PutCode = new Array(UNum+LNum+1);
var PutPrice = new Array(UNum+LNum+1);
for (var i = -LNum; i <= UNum; i++)
{
if (Option.GetCurrent(0, i) <= 3.0 && Option.GetDelta(0,i) != 0)
{
CallPrice[i+LNum] = Math.abs(0.5 - Math.abs(Option.GetDelta(0,i)));
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
else
{
CallPrice[i+LNum] = 999999;
CallCode[i+LNum] = 999999;
}
}
for (var i = -UNum; i <= LNum; i++)
{
if (Option.GetCurrent(1, i) <= 3.0 && Option.GetDelta(1,i) != 0 )
{
PutPrice[i+UNum] = Math.abs(0.5 - Math.abs(Option.GetDelta(1,i)));
PutCode[i+UNum] = Option.GetATMPutRecent(i);
}
else
{
PutPrice[i+UNum] = 999999;
PutCode[i+UNum] = 999999;
}
}
CC = 999999;
CallOrderCode = 999999;
for (var i = -LNum; i <= UNum; i++)
{
if (CallPrice[i+LNum] < CC)
{
CC = CallPrice[i+LNum];
CallOrderCode = CallCode[i+LNum]
}
}
PP = 999999;
PutOrderCode = 999999;
for (var i = -UNum; i <= LNum; i++)
{
if (PutPrice[i+UNum] < PP)
{
PP = PutPrice[i+UNum];
PutOrderCode = PutCode[i+UNum];
}
}
if (CC < 999999 && PP < 999999)
{
Start = -1;
Account1.OrderSell(CallOrderCode, Vol, 0 , 1);
Account1.OrderBuy(PutOrderCode, Vol, 0, 1);
}
}
if (Start == -1 && Signal.signalKind == 4 && HHMMSS < 150000 )
{
Start = 0;
Account1.OrderBuy(CallOrderCode, Vol, 0, 1);
Account1.OrderSell(PutOrderCode, Vol, 0, 1);
}
}
//15시 청산
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1 && HHMMSS >= 150000)
{
Main.KillTimer(1);
if (Start == 1)
{
Start = 0;
Account1.OrderSell(CallOrderCode, Vol, 0, 1);
Account1.OrderBuy(PutOrderCode, Vol, 0, 1);
}
if (Start == -1)
{
Start = 0;
Account1.OrderBuy(CallOrderCode, Vol, 0, 1);
Account1.OrderSell(PutOrderCode, Vol, 0, 1);
}
}
}
즐거운 하루되세요
> 착한이 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 안녕하세요.
아래 내용으로 전략식 부탁드립니다.
// 예스트레이더의 선물 매수매도시 합성선물 매수/매도
// 3.0 이하의 콜옵션과 풋옵션중에 델타 0.5에 가장 근접하는 콜/풋 종목을 찾고
// 선물매수신호 -> 합성선물매수(콜매수 and 풋매도)
// 선물매도신호 -> 합성선물매수(콜매도 and 풋매수)
// 선물청산신호 -> 합성선물청산
// 리버스주문으로 반대포지션 진입시 보유종목 청산후 그 시점에서 3.0 이하의 델타 0.5 종목 진입
// 오후 3시 잔고청산기능(미청산종목보유시)
// 모든주문은 시장가
// 옵션수량 조절가능하도록
감사합니다.