예스스탁
예스스탁 답변
2016-01-29 18:12:48
안녕하세요
예스스탁입니다.
스팟은 단순 가이드 정도의 식만 작성해 드립니다.
아래식 참고하셔서 수정보완해 사용하시기 바랍니다.
진입신호발생시 신호의 시간을 저장해
동일시간이면 주문이 되지 않게 했습니다.
스크립트 객체화면에는 계좌객체(객체명 Account1), 차트객체(객체명Chart1) 준비하시면 됩니다.
var Start = 0;
var PutOrderCode,CallOrderCode;
var T;
function Main_OnStart()
{
Start = 0;
Main.MessageList("시작",Start);
T = 0;
}
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1 && Signal.time != T )
{
T = Signal.time;
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
var CallCode = new Array(UNum+LNum+1);
var CallPrice = new Array(UNum+LNum+1);
for (var i = -LNum; i <= UNum; i++)
{
if (Option.GetCurrent(0, i) <= 3.0 && Option.GetCurrent(0, i) >= 1.0)
{
CallPrice[i+LNum] = Option.GetCurrent(0, i);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
else{
CallPrice[i+LNum] = 0;
CallCode[i+LNum] = 0;
}
}
var CC = 0;
CallOrderCode = "";
for (var i = -LNum; i <= UNum; i++)
{
if (CallPrice[i+LNum] > CC)
{
CC = CallPrice[i+LNum];
CallOrderCode = CallCode[i+LNum]
}
}
if (CC > 0)
{
Start = 1;
Account1.OrderBuy(CallOrderCode, Signal.count, Option.GetAsk(CallOrderCode, 3), 0);
}
}
if (Start == 1 && Signal.signalKind == 2)
{
Account1.OrderSell(CallOrderCode, Signal.count, Option.GetBid(CallOrderCode, 3), 0);
}
if (Signal.signalKind == 3 && Signal.time != T)
{
T = Signal.time;
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
var PutCode = new Array(UNum+LNum+1);
var PutPrice = new Array(UNum+LNum+1);
for (var i = -UNum; i <= LNum; i++)
{
if (Option.GetCurrent(1, i) <= 0 && Option.GetCurrent(1, i) >= 1)
{
PutPrice[i+UNum] = Option.GetCurrent(1, i);
PutCode[i+UNum] = Option.GetATMPutRecent(i);
}
else{
PutPrice[i+UNum] = Option.GetCurrent(1, i);
PutCode[i+UNum] = Option.GetATMPutRecent(i);
}
}
var PP = 0;
PutOrderCode = "";
for (var i = -UNum; i <= LNum; i++)
{
if (PutPrice[i+UNum] > PP)
{
PP = PutPrice[i+UNum];
PutOrderCode = PutCode[i+UNum];
}
}
if (PP > 0)
{
Start = -1;
Account1.OrderBuy(PutOrderCode, Signal.count, Option.GetAsk(PutOrderCode, 3), 0);
}
}
if (Start == 1 && Signal.signalKind == 4)
{
Account1.OrderSell(PutOrderCode, Signal.count, Option.GetBid(PutOrderCode, 3), 0);
}
}
즐거운 하루되세요
> mao 님이 쓴 글입니다.
> 제목 : 문의드림니다
> 선물시스템 신호를 받아 옵션피라미딩으로 매매하려합니다
즉 선물매수신호시 콜옵션매수,선물매도신호시 풋옵션매수 하는 피라미딩 스팟수식을
작성 부탁드림니다(옵션종목선택은 3.0 이하 1.0 이상 종목중 3.0 에 가장근접한 종목으로)
그런데 여기서 주의할점은
선물전략 A매수전략,B매수전략,C매수전략 3개를 합해서 선물매수시스템이 구성되는데
우연히 3개의 전략에서 동시에 매수신호가 나올시 피라미딩적용탭에서
적용안함을 선택하면 동일봉 동시에 3개의 매수신호가 나왔다 하더라도 하나만 매수진입됨니다
그러나 피라미딩을 허용으로 하면 동일봉 동일시점에서 3개의 매수신호가 나와서 3개가 매수
되어 버림니다
피라미딩허용으로 적용할려 하는데 비록 동일봉 동일시점에서 3개의 매수신호가 나왔다하더라도 하나만 매수체결 될수있도록 스팟수식 작성 부탁드림니다
매도도 마찬가지로 작성부탁드림니다