예스스탁
예스스탁 답변
2014-06-19 14:10:50
안녕하세요
예스스탁입니다.
아래식 참고하시기 바랍니다.
각각 Buy와 Sell신호가 처임발생할때 종목을 선정하고
이후에는 계속 해당 종목에 대해서 주문을 발생하게 수정했습니다.
var Start;
var UNum; var LNum;
var CallCode; var CallPrice;
var PutCode; var PutPrice;
var CC; var PP;
var CallOrderCode; var PutOrderCode;
var BuyCnt, SellCnt;
function Main_OnStart()
{
Start = 0;
BuyCnt = 0;
SellCnt = 0;
}
function Chart1_OnRiseSignal(Signal)
{
//buy신호 발생시
if (Signal.signalKind == 1)
{
BuyCnt = BuyCnt +1;
//스팟 시작 후 첫 buy신호에서만 종목선정
if (BuyCnt == 1)
{
UNum = Option.uppersATM;
LNum = Option.lowersATM;
PutCode = new Array(UNum+LNum+1);
PutPrice = new Array(UNum+LNum+1);
for (var i = -UNum; i <= LNum; i++)
{
if (Option.GetCurrent(1, i) <= 3.0 && Option.GetCurrent(1, i) >= 1.5)
{
PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-2.3);
PutCode[i+UNum] = Option.GetATMPutRecent(i);
}
else
{
PutPrice[i+UNum] = 9999999;
PutCode[i+UNum] = 9999999;
}
}
PP = 9999999;
PutOrderCode = 9999999;
for (var i = -LNum; i <= UNum; i++)
{
if (PutPrice[i+LNum] < PP)
{
PP = PutPrice[i+LNum];
PutOrderCode = PutCode[i+LNum]
}
}
if (PP < 9999999)
{
Main.MessageList("Buy 신호 발생 - 주문 종목",PutOrderCode);
}
else
{
Main.MessageList("Buy 신호 발생 - 지정한 가격대 종목이 없음");
}
}
if (PP < 9999999)
{
Account1.OrderSell(PutOrderCode, 1, 0, 1);
Start = 1;
}
}
// Exitlong신호 발생시
if (Start == 1 && Signal.signalKind == 2)
{
Start = 0;
Account1.OrderBuy(PutOrderCode, 1, 0, 1);
}
//sell신호 발생시
if (Signal.signalKind == 3)
{
SellCnt = SellCnt+1;
//스팟 시작 후 첫 Sell신호에서만 종목선정
if (SellCnt == 1)
{
UNum = Option.uppersATM;
LNum = Option.lowersATM;
CallCode = new Array(UNum+LNum+1);
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.5)
{
CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.3);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
else
{
CallPrice[i+LNum] = 9999999;
CallCode[i+LNum] = 9999999;
}
}
CC = 9999999;
CallOrderCode = 9999999;
for (var i = -UNum; i <= LNum; i++)
{
if (CallPrice[i+UNum] < CC)
{
CC = CallPrice[i+UNum];
CallOrderCode = CallCode[i+UNum];
}
}
if (CC < 9999999)
{
Main.MessageList("Sell 신호 발생 - 주문 종목",CallOrderCode);
}
else
{
Main.MessageList("Sell 신호 발생 - 지정한 가격대 종목이 없음");
}
}
if (CC < 9999999)
{
Account1.OrderSell(CallOrderCode, 1, 0, 1);
}
}
//exitshort신호 발생시
if ( Start == -1 && Signal.signalKind == 4)
{
Start = 0;
Account1.OrderBuy(CallOrderCode, 1, 0, 1);
}
}
즐거운 하루되세요
> 탄젠트80 님이 쓴 글입니다.
> 제목 : 간단한 질문 문의
> 안녕하세요
기존 게시판에 공개된 스팟전략으로 공부중인데 초보라 이해부탁드려요
아래는 선물신호시 3.0~1.5의 프리값중 2.3에 가까운 옵션 종목을 매도하는
스팟전략인데요
장중의 프리값의 큰변동시 진입종목이 변경될때가 있는데 이와 상관없이 처음 진입한
종목을 당일 장중 내내 거래하고 싶습니다. 어려우셔도 아래식을 지정종목으로 거대될수
있도록 스팟전략 부탁드립니다.
- 예)금일의 경우 장중내내
선물 매수신호시 ---> 풋 외가 1호가(P257.5) 매도
선물 매도신호시 ---> 콜 외가 1호가(C262.5) 매도
=============================================================================
var Start;
var UNum; var LNum;
var CallCode; var CallPrice;
var PutCode; var PutPrice;
var CC; var PP;
var CallOrderCode; var PutOrderCode;
function Main_OnStart()
{
Start = 0;
}
function Chart1_OnRiseSignal(Signal)
{
UNum = Option.uppersATM;
LNum = Option.lowersATM;
CallCode = new Array(UNum+LNum+1);
PutCode = new Array(UNum+LNum+1);
CallPrice = new Array(UNum+LNum+1);
PutPrice = new Array(UNum+LNum+1);
for (var i = -LNum; i <= UNum; i++)
{
if (Option.GetCurrent(0, i) <= 3.0 && Option.GetCurrent(0, i) >= 1.5)
{
CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.3);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
else
{
CallPrice[i+LNum] = 9999999;
CallCode[i+LNum] = 9999999;
}
}
for (var ii = -UNum; ii <= LNum; ii++)
{
if (Option.GetCurrent(1, ii) <= 3.0 && Option.GetCurrent(1, ii) >= 1.5)
{
PutPrice[ii+UNum] = Math.abs(Option.GetCurrent(1, ii)-2.3);
PutCode[ii+UNum] = Option.GetATMPutRecent(ii);
}
else
{
PutPrice[ii+UNum] = 9999999;
PutCode[ii+UNum] = 9999999;
}
}
//buy신호 발생시
if (Signal.signalKind == 1)
{
Start = 1;
PP = 9999999;
PutOrderCode = 9999999;
for (var iii = -LNum; iii <= UNum; iii++)
{
if (PutPrice[iii+LNum] < PP)
{
PP = PutPrice[iii+LNum];
PutOrderCode = PutCode[iii+LNum]
}
}
if (PP < 9999999)
{
Account1.OrderSell(PutOrderCode, 1, 0, 1);
Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드:"+PutOrderCode+" /START:"+Start);
}
else
{
Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start);
}
}
// Exitlong신호 발생시
if (Start == 1 && Signal.signalKind == 2)
{
Start = 0;
if (PP > 0)
{
Account1.OrderBuy(PutOrderCode, 1, 0, 1);
Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드:"+PutOrderCode+" /START:"+Start);
}
else
{
Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start);
}
}
//sell신호 발생시
if (Signal.signalKind == 3)
{
Start = -1;
CC = 9999999;
CallOrderCode = 9999999;
for (var iiii = -UNum; iiii <= LNum; iiii++)
{
if (CallPrice[iiii+UNum] < CC)
{
CC = CallPrice[iiii+UNum];
CallOrderCode = CallCode[iiii+UNum];
}
}
if (CC < 9999999)
{
Account1.OrderSell(CallOrderCode, 1, 0, 1);
Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드:"+CallOrderCode+" /START:"+Start);
}
else
{
Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start);
}
}
//exitshort신호 발생시
if ( Start == -1 && Signal.signalKind == 4)
{
Start = 0;
if (CC > 0)
{
Account1.OrderBuy(CallOrderCode, 1, 0, 1);
Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드:"+CallOrderCode+" /START:"+Start);
}
else
{
Main.MessageLog("B신호종류:"+Signal.signalKind+" /종목코드: 지정한 가격대 종목이 없음"+" /START:"+Start);
}
}
}
================================================================================
수고하세요~