답변완료
문의드립니다.
1. 예스트레이더 연결선물신호(이평선 매수매도)로 가장 거래대금이 많은 ELW사는 것(매수진입이면 KOSPI200콜, 매도진입이면 KOSPI200 풋) 예제 부탁드립니다.
아래는 선물 매수신호로 등가옵션 콜매수하는 예제인데요. 이거랑 많이 차이가 나나요?
/*선물 매수신호시 등가옵션 콜매수
선물 매도 신호시 등가옵션 풋 매수
청산신호시 해당옵션 청산*/
//실행해야 할 모든 내용은 이벤트 안에 입력하셔야 합니다.
//추가로 시그널종류(Signal.signalKind)는 이벤트 발생시 인지가 되고 휘발성입니다.
//그러므로 OnRiseSignal시그널 발생시에 처리되는 내용이 아니라면
//변수에 최근 발생한 시그널종류를 저장하고 이용하셔야 합니다.
var Start;
var BuyC_Code;
var BuyP_Code;
var SellC_Code;
var SellP_Code;
var kind;
function Main::[안내]태그제한으로등록되지않습니다-xx[안내]태그제한으로등록되지않습니다-xxOnStart()
{
Main.MessageLog("시작");
Start = 0;
}
function C1::OnRiseSignal(Signal)
{
Kind = Signal.signalKind
Main.MessageLog("신호완성/"+Signal.signalKind);
if (Signal.signalKind == 1)//선물챠트에서 매수신호발생하면 콜 매수
{
Start = 1;
BuyC_code = Option.GetATMCallRecent(0);
var BuyC_price = Option.GetBidByCode(BuyC_Code, 2);
A1.OrderBuy(BuyC_Code, vol, BuyC_price, 1);
Main.MessageLog("등가콜매수");
}
if (Signal.signalKind == 3)//선물챠트에서 매도신호발생하면 풋 매수
{
Start = 1;
BuyP_code = Option.GetATMPutRecent(0);
var BuyP_price = Option.GetBidByCode(BuyP_Code, 2);
A1.OrderSell(BuyP_Code, vol, BuyP_price, 1);
Main.MessageLog("등가풋매수");
}
if (Start = 1 && Signal.signalKind == 2) //선물챠트 매수 청산신호발생하면 콜 매수 청산
{
var BxC_price = Option.GetBidByCode(BuyC_Code, 2);
A1.OrderSell(BuyC_Code, vol, BxC_price, 1);
Main.MessageLog("등가콜청산");
}
if (Start = 1 && Signal.signalKind == 4) //선물챠트 매도청산신호발생하면 풋 매수 청산
{
var BxP_price = Option.GetBidByCode(BuyP_Code, 2);
A1.OrderSell(BuyP_Code, vol, BxP_price, 1);
Main.MessageLog("등가풋청산");
}
}
[출처] [예스스팟] 선물차트참조 옵션매수 (시스메틱 트레이더) |작성자 시스메틱
2017-12-29
2646
글번호 224294
답변완료
다음날 청산 되는 수식
아래 수식은 전일 15시 10분에 매도하여 다음날 15시 5분에 청산하는 수식입니다.
그런데 실전에서는 당일 15시 10분에 주문(매도)이 되나 다음날 15시 05분에 청산이 안되는데 뭐가 잘못되었는지 수정 부탁합니다.
var CallOrderCode,PutOrderCode;
var Entry, Exit;
function Main_OnStart()
{
Entry = false;
Exit = false;
Main.SetTimer(1, 5000);
}
function Main_OnTimer(nEventID)
{
if (nEventID <= 1)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//15시 10분
if (Entry == false && HHMMSS >= 151000 )
{
Entry = true;
//차트가 무포지션
if (Chart1.GetOpenContracts() == 0)
{
Main.SetUserValue("CallOrderCode", "");
Main.SetUserValue("PutOrderCode", "");
}
//차트가 매수유지봉
if (Chart1.GetOpenContracts() > 0)
{
Main.MessageList("--------------------------------------------");
Main.MessageList("매수신호유지");
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
================================ 중략 ========================================
//종목을 찾았으면
if (CC < 99999999 && PP < 99999999)
{
Account1.OrderSell(CallOrderCode, 1, 0, 1);
Account1.OrderSell(PutOrderCode, 1, 0, 1);
Main.SetUserValue("CallOrderCode", CallOrderCode);
Main.SetUserValue("PutOrderCode", PutOrderCode);
}
}
}
//15시 5분
if (Exit == false && HHMMSS >= 150500 )
{
Exit = true;
//내부파일의 값을 가져와 변수에 저장
var PreDayCall = Main.GetUserValue("CallOrderCode");
var PreDayPut = Main.GetUserValue("PutOrderCode");
//PreDayCall에 값이 있으면
if (PreDayCall != "")
{
//잔고셋팅후 매도포지션이면 청산하고
//내부파일의 값을 빈공간으로 만듬
Account1.SetBalanceItem(PreDayCall,0)
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1);
Main.SetUserValue("CallOrderCode", "");
}
}
//PreDayPutl에 값이 있으면
if (PreDayPut != "")
{
//잔고셋팅후 매도포지션이면 청산하고
//내부파일의 값을 빈공간으로 만듬
Account1.SetBalanceItem(PreDayPut,0)
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1);
Main.SetUserValue("PutOrderCode", "");
}
}
//모두 수행후 값을 빈공간으로 만듬
Main.SetUserValue("CallOrderCode", "");
Main.SetUserValue("PutOrderCode", "");
}
//콜매도, 풋매도 금액의 합으로 +500000원 익절, -500000원 손절
if (HHMMSS < 150500)
{
// 옵션매도포지션 전체 손익계산
var num = Account1.GetTheNumberOfBalances();
var PLsum = 0;
for(var i = 0; i < num; i++)
{
//잔고셋팅
Account1.SetBalanceIndex(i);
//매도포지션이고 옵션종목이고
if (Account1.Balance.position == 1 && (Account1.Balance.code.substring(0,1) == "2" || Account1.Balance.code.substring(0,1) == "3"))
{
//각 옵션매도종목의 (평균단가-현재가)*수량*50만원을 누적
PLsum = PLsum + ((Account1.Balance.avgUnitCost - Account1.Balance.current)*Account1.Balance.count)*500000;
}
}
//손익이 +50만원이상이거나 -50만원 이하이면
if (PLsum >= 500000 || Plsum <= -500000)
{
for(var i = 0; i < num; i++)
{
//잔고셋팅
Account1.SetBalanceIndex(i);
//매도포지션이고 옵션종목이고
if (Account1.Balance.position == 1 && (Account1.Balance.code.substring(0,1) == "2" || Account1.Balance.code.substring(0,1) == "3"))
{
Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0,1);
}
}
}
}
}
}
2017-12-14
2699
글번호 224278