답변완료
스팟전략문의
수고많으십니다.
예스트레이더 선물 신호를 이용하여 옵션매수전략을 개발하고 있는데요.
신규로 예스랭귀지에 Piramiding 전략을 추가하였고, 개념은 아래와 같습니다.
선물매수신호 -> 콜매수
선물매수신호 -> 콜매수 -> 선물매수청산신호 -> 콜매수청산
선물매수신호 -> 콜매수 -> 선물피라미딩매수신호 -> 콜피라미딩매수
선물매수신호 -> 콜매수 -> 선물피라미딩매수신호 -> 콜피라미딩매수 -> 선물피라미딩매수분청산신호 -> 콜매수청산
선물매수신호 -> 콜매수 -> 선물피라미딩매수신호 -> 콜피라미딩매수 -> 선물매수청산신호 -> 콜매수청산
선물매도신호 -> 풋매수
선물매도신호 -> 풋매수 -> 선물매도청산신호 -> 풋매수청산
선물매도신호 -> 풋매수 -> 선물피라미딩매도신호 -> 풋피라미딩매수
선물매도신호 -> 풋매수 -> 선물피라미딩매도신호 -> 풋피라미딩매수 -> 선물피라미딩매도분청산신호 -> 풋매수청산
선물매도신호 -> 풋매수 -> 선물피라미딩매도신호 -> 풋피라미딩매수 -> 선물매도청산신호 -> 풋매수청산
아래의 스팟수식을 위와같은 Piramiding 신호에 대응할 수 있도록 수정부탁드립니다.
//선물매수신호시 콜매수 신호 발생시키기
if (Signal.signalKind == 1)
{
BuySignalCode = CallOrderCode;
CallOrderPrice = Option.GetCurrentByCode(BuySignalCode);
BuyID = Account1.OrderBuy(BuySignalCode, Signal.count, Option.GetAskByCode(BuySignalCode, 5), 0);
Main.MessageList("콜종목코드 : ",BuySignalCode," 콜현재가 : ",CallOrderPrice);
BuyFill = 0;
}
//선물매수신호후 청산신호가 나오면 청산실행
if (Signal.signalKind == 2)
{
CallOrderPrice = Option.GetCurrentByCode(BuySignalCode);
if (BuyFill == 1)
{
Account1.OrderSell(BuySignalCode, Signal.count, Option.GetBidByCode(BuySignalCode, 5), 0)
Main.MessageList("콜종목코드 : ",BuySignalCode," 콜현재가 : ",CallOrderPrice);
}
else
{
Account1.OrderCancel(BuyNum);
Main.MessageLog("매수주문취소");
}
}
//선물매도신호시 풋매수 신호 발생시키기
if (Signal.signalKind == 3)
{
BuySignalCode = PutOrderCode;
PutOrderPrice = Option.GetCurrentByCode(BuySignalCode);
Account1.OrderBuy(BuySignalCode, Signal.count, Option.GetAskByCode(BuySignalCode, 5), 0);
Main.MessageList("풋종목코드 : ",BuySignalCode," 풋현재가 : ",PutOrderPrice);
BuyFill = 0;
}
//선물매도신호후 청산신호가 나오면 청산실행
if (Signal.signalKind == 4)
{
PutOrderPrice = Option.GetCurrentByCode(BuySignalCode);
if (BuyFill == 1)
{
Account1.OrderSell(BuySignalCode, Signal.count, Option.GetBidByCode(BuySignalCode, 5), 0);
Main.MessageList("풋종목코드 : ",BuySignalCode," 풋현재가 : ",PutOrderPrice);
}
else
{
Account1.OrderCancel(BuyNum);
Main.MessageLog("매수주문취소");
}
}
//주문응답 이벤트
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BuyID)
{
BuyNum = OrderResponse.orderNum;
}
}
//체결통보 이벤트
function Main_OnNotifyFill(NotifyFill)
{
if (NotifyFill.orderNum == BuyNum)
{
BuyFill = 1;
}
}
2014-08-19
1078
글번호 223133
답변완료
수식 검증 부탁드립니다
항상수고 많으십니다
ChartExe[1]은 매수차트이고 ChartExe[2]는 매도차트입니다.
전일 매도포지션이더라도 종가봉에 매도청산 예비신호 발생 시 동시호가 매도진입 불가입니다.
나머지 변수들은 올바르게 리턴하는데,
미완성봉을 리턴하는 aSignal 이 undefined 가 나오는데 이유를 알수 없습니다.
감사합니다.
var aSignal ;
var RcvChCount ;
var ChartExe = new Array(20);
var SystemSet = new Array(20);
var ChartSet = new Array(20);
function Main_OnStart()
{
Main.SetTimer(99, 3000);
RcvChCount = 0 ;
ChartSet[0] = new ReqChartItem( "00000000" ,300 , CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false);
SystemSet[0] = new SystemInfo("매수",YL_TYPE_NORMAL,null,null);
Main.ReqChartEx(ChartSet[0],SystemSet[0],null);
ChartSet[1] = new ReqChartItem( "00000000" ,300 , CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false);
SystemSet[1] = new SystemInfo("매도",YL_TYPE_NORMAL,null,null);
Main.ReqChartEx(ChartSet[1],SystemSet[1],null);
}
function Main_OnRcvChartEx(ChartEx)
{
RcvChCount = RcvChCount + 1 ;
ChartExe[RcvChCount] = ChartEx ;
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
var aSignal = ChartExe[2].GetIncompleteSignal();
Main.MessageList("종목코드1",ChartExe[1].GetCode(1) );
Main.MessageList("종목코드2",ChartExe[2].GetCode(1) );
Main.MessageList("전일포지션",ChartExe[1].GetOpenContracts() );
Main.MessageList("전일포지션",ChartExe[2].GetOpenContracts() );
if (
nEventID == 99
&& HHMMDD < 090000
&& ( ChartExe[2].GetOpenContracts() < 0 )
//매도청산 예비신호발생시 동시호가 매도진입 불가
&& !(aSignal != null && aSignal[0].signalKind == 4 )
)
{
Main.KillTimer(99);
Main.MessageLog("동시호가매도조건충족:매도실행");
}
}
2014-08-13
1296
글번호 223122