답변완료
차트신호시 콜옵션 풋옵션 특정가격 동시 매수
아래 예제수식은 차트신호발생시
콜 1.0 이하 and 풋 1.0 이하 동시 매수 수식입니다.
미니선물차트를 이용하여
미니옵션으로 주문을 내려고 합니다.
요청사항
1. 첨부파일처럼 스크립트객체 설정하고 가동했는데
Reference Error : option is not defined 오류가 발생하는데 수식 수정바랍니다.
Account1 지정계좌
Option1 미니옵션
Chart1 미니선물
2. 수식에 청산시간 수식 추가해주십시요.
콜매수 포지션 14시35분 30초 청산
풋매수 포지션 15시15분 30초 청산
항상 고맙습니다.
******************************************************************************++
/*스크립트시작-----------------------------------------------------*/
var UNum; var LNum;
var CallCode; var CallPrice;
var PutCode; var PutPrice;
var CC; var PP;
var CallOrderCode; var PutOrderCode;
//차트에서 신호가 발생하면
function Chart1_OnRiseSignal(Signal)
{
//해당 신호가 매수신호이면
if (Signal.signalKind == 1)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("매수신호 발생");
//1.0이하 중 가장 큰 가격을 가지는 종목을 찾음
//ATM위 행사가 갯수
UNum = Option.uppersATM;
//ATM아래 행사가 갯수
LNum = Option.lowersATM;
//각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언
CallCode = new Array(UNum+LNum+1);
//각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언
CallPrice = new Array(UNum+LNum+1);
//각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언
PutCode = new Array(UNum+LNum+1);
//각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언
PutPrice = new Array(UNum+LNum+1);
//콜종목 찾기
//콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로
//for문에서 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 수행하도록 함
for (var i = -LNum; i <= UNum; i++)
{
//값이 1.0이하이면
if (Option.GetCurrent(0, i) <= 1.0)
{
//해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장
CallPrice[i+LNum] = Option.GetCurrent(0, i);
//해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장
CallCode[i+LNum] = Option.GetATMCallRecent(i);
//주의
//배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터
//저장하도록 작성해야 함
}
else//1.0보다 크면
{
//배열변수 CallPrice의 방번호 i+LNum에 -1 저장
CallPrice[i+LNum] = -1;
//배열변수 CallCode의 방번호 i+LNum에 -1 저장
CallCode[i+LNum] = -1;
}
}
//풋종목 찾기
//풋옵션은 ATM기준 아래 행사가 +단계, 위가 -단계이므로
//for문에서 HNum의 역수부터 시작해서 LNum까지 1씩 증가하면서 수행하도록 함
for (var ii = -UNum; ii <= LNum; ii++)
{
//ii단계 풋종목이 1.0이하이면
if (Option.GetCurrent(1, ii) <= 1.0 )
{
//해당종목의 현재가를 배열변수 PutPrice의 방번호 ii+LNum에 저장
PutPrice[ii+UNum] = Option.GetCurrent(1, ii);
//해당종목의 현재가를 배열변수 PutCode의 방번호 ii+LNum에 저장
PutCode[ii+UNum] = Option.GetATMPutRecent(ii);
}
else //1.0보다 크면
{
//배열변수 PutPrice의 방번호 ii+LNum에 -1 저장
PutPrice[ii+UNum] = -1;
//배열변수 PutCode의 방번호 ii+LNum에 -1 저장
PutCode[ii+UNum] = -1;
}
}
//배열변수 CallPrice의 각 배열방의 값중 가장 큰값을 찾아 CC에 저장하고
//CallCode의 동일 방번호의 값을 CallOrderCode에 저장
CC = -1;
CallOrderCode = -1;
for (var iii = -LNum; iii <= UNum; iii++)
{
if (CallPrice[iii+LNum] > CC)
{
CC = CallPrice[iii+LNum];
CallOrderCode = CallCode[iii+LNum]
}
}
//배열변수 PutPrice의 각 배열방의 값중 가장 큰값을 찾아 PP에 저장하고
//PutCode의 동일 방번호의 값을 PutOrderCode에 저장
PP = -1;
PutOrderCode = -1;
for (var iiii = -UNum; iiii <= LNum; iiii++)
{
if (PutPrice[iiii+UNum] > PP)
{
PP = PutPrice[iiii+UNum];
PutOrderCode = PutCode[iiii+UNum];
}
}
Main.MessageList("--------------------------------------------");
Main.MessageList("콜종목코드:",CallOrderCode,"/콜현재가 :",CC);
Main.MessageList("풋종목코드:",PutOrderCode,"/풋현재가 :",PP);
//콜옵션종목 매수
Account1.OrderBuy(CallOrderCode, 1, Option.GetAskByCode(CallOrderCode, 2), 1);
//콜옵션종목 매수
Account1.OrderBuy(PutOrderCode, 1, Option.GetAskByCode(PutOrderCode, 2), 1);
}
}
/*스크립트끝-------------------------------------------------------*/
답변완료
1분봉거래시 완성봉 즉 종가가 나오고나서 거래가 체결되는데..
예스트레이더에서는 1분봉이 완성이되어야 그다음봉시초에 조건이 맞으면
진입을 하는데요...예스스팟을 이용해서 미완성봉으로 매매를 하고있지만..
별 차이점이 없어서 코딩이 잘못되었는지 문의 드립니다.
예를 들어서 가격이 11000포인트라고했을때....이가격을 실시간으로 위로 11000.25 이렇게 올라갔을때 봉이 완성되기 전에 진입을 하고자 하는데...예스 스팟도 이부분을 캣취해서
매수를 못하는것인지 문의 드립니다..
그리고 매도도 11000 기준가격인상태에서 10999.75 로 11000가격아래로 빠지면 실시간으로
미완성 매도를 하고싶은데 시스템한계인것인지 극복이 가능한것인지 문의 드립니다.
function C1_OnRiseIncompleteSignal(IncompleteSignal)
{
Main.MessageList("미완성신호발생/",IncompleteSignal.signalKind);
if (IncompleteSignal.signalKind == 1) // 매수
{
Position = 1;
BID = C1.OrderBuy(OrdeCode, Signal.count,F1.current, 0);
Main.MessageLog("미완성 매수진입");
BuyFill = 0;
//Buy();
}
if (BuyFill == 1 && IncompleteSignal.signalKind == 2 ) // 엑싯롱 매수청산
{
if (BuyFill == 1)
{
C1.OrderSell(OrdeCode, Vol,F1.Bid(2), 0);
Main.MessageLog("미완성 매수청산실행");