답변완료
문의드림니다
수식 문의드림니다
선물신호를 이용하여 미니선물을 매매하고자 합니다
선물시스템 매수신호시 미니선물 매수진입하고, 매수청산시 미니선물 매수청산하고
선물시스템 매도신호시 미니선물 매도진입하고, 매도청산시 미니선물 매도청산하는
수식 부탁드림니다
아래 수식은 이전에 다른 분이 문의드려 작성해 주신건데
포지션시스템으로 작성된 것으로 알고 있읍니다
저는 데이당일매매를 하고자 하는데 아래 수식을 수정하여
선물신호를 이용하여 미니선물을 매매핳 수 있는 스팟수식 부탁 드림니다
수량은 외부변수로 만들어 주시면 좋겠습니다
부탁드림니다
//////////////////////////////////////////////////////////////////////////////////
function Main_OnStart()
{
Main.MessageList("선물to미니_스팟_시작");
}
functionChart1_OnRiseSignal(Signal)
{
//매수신호 발생
if(Signal.signalKind == 1)
{
Main.MessageList("Buy_Signal");
//잔고셋팅
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
//잔고가 매수포지션이 아니면
if (Account1.Balance.position != 2)
{
//매도5호가로 2계약 매수주문
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),2, MarketData1.Ask(5),0);
}
}
//매수청산신호발생
if(Signal.signalKind == 2)
{
Main.MessageList("ExitLong_Signal");
//잔고셋팅
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
//잔고가 매수포지션이면
if (Account1.Balance.position == 2)
{
//매수5호가로 잔고수량만큼만 매도주문
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count,MarketData1.Bid(5), 0);
}
}
//매도신호 발생
if(Signal.signalKind == 3)
{
Main.MessageList("Sell_Signal");
//잔고셋팅
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
//잔고가 매도포지션이 아니면
if (Account1.Balance.position != 1)
{
//매수5호가로 2계약 매도주문
Account1.OrderSell(Main.GetOrderCode(MarketData1.code),2, MarketData1.Bid(5),0);
}
}
//매도청산신호발생
if (Signal.signalKind== 4)
{
Main.MessageList("ExitShort_Signal");
//잔고셋팅
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
//잔고가 매도포지션이면
if (Account1.Balance.position == 1)
{
//매도5호가로 잔고수량만큼만 매수주문
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count,MarketData1.Ask(5), 0);
}
}
}
2015-11-27
2095
글번호 223729
답변완료
수식 추가부탁합니다
전일 매도한 콜매도(예 2.1)와 풋매도(예 3.58) 잔고가 당일 콜매도 가격이 풋매도 가격보다 커지면 콜풋 전량 청산되는 식 즉, 전일 저장된 콜매도, 풋매도를 비교해서 당일 가격이 콜>풋, 풋>콜 등 역전되는 가격 시점에서 청산되는 식 부탁합니다.
전일 저장된 CallOrderCode,PutOrderCode 비교해서
전일 콜가격 > 풋가격 이고, 당일 콜가격 < 풋가격이 커지는 시점(가격역전)
전일 콜가격 < 풋가격 이고, 당일 풋가격 < 콜가격이 커지는 시점(가격역전)
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();
//14시 30분
if (Entry == false && HHMMSS >= 143000 && HHMMSS <= 143100 )
{
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;
//콜옵션중 2.0에 가장 가까운 종목
//콜옵션 모든 종목을 현재가-2.0을 해서 절대값을 취해 저장
var CallCode = new Array(UNum+LNum+1);
var CallPrice = new Array(UNum+LNum+1);
for (var i = -LNum; i <= UNum; i++)
{
CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-3.0);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var CC = 99999999;
CallOrderCode = "";
for (var i = -LNum; i <= UNum; i++)
{
if (CallPrice[i+LNum] < CC)
{
CC = CallPrice[i+LNum];
CallOrderCode = CallCode[i+LNum]
}
}
//풋옵션중 3.0에 가장 가까운 종목
//풋옵션 모든 종목을 현재가-3.0을 해서 절대값을 취해 저장
var PutCode = new Array(UNum+LNum+1);
var PutPrice = new Array(UNum+LNum+1);
for (var i = -UNum; i <= LNum; i++)
{
PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-3.0);
PutCode[i+UNum] = Option.GetATMPutRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var PP = 99999999;
PutOrderCode = "";
for (var i = -UNum; i <= LNum; i++)
{
if (PutPrice[i+UNum] < PP)
{
PP = PutPrice[i+UNum];
PutOrderCode = PutCode[i+UNum];
}
}
//종목을 찾았으면
if (CC < 99999999 && PP < 99999999)
{
Account1.OrderSell(PutOrderCode1, Vo1, Option.GetBid(PutOrderCode, 3), 0);
Account1.OrderSell(CallOrderCode, Vo1, Option.GetBid(CallOrderCode, 3), 0);
Main.SetUserValue("PutOrderCode", PutOrderCode);
Main.SetUserValue("CallOrderCode", CallOrderCode);
}
=================== 중 략 =========================================================
//13시 30분
if (Exit == false && HHMMSS >= 133000 && HHMMSS <= 133100 )
{
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", "");
}
}
//PreDayPut에 값이 있으면
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", "");
}
2015-11-18
2183
글번호 223722
답변완료
수식 변경 요청 드립니다.
안녕하세요
아래 코스피 200 연결선물 다수(5개이상)의 시스템을 예스스팟을 이용 미니선물로
운용 진입 청산하는 수식에, 동일계좌내 다수의 손익의 합이 목표수익 50만원 달성시
일괄청산 당일 매매종료 수식 추가, 내용 설명 요청 드립니다.
감사합니다.
-------------------------------------------------------------------------------------
//차트에서 신호발생
function Chart1_OnRiseSignal(Signal)
{
//매수진입신호 발생
if (Signal.signalKind == 1)
{
//MarketData1종목을 매도5호가로 1계약 매수주문
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0);
}
//매수포지션 청산신호 발생
if (Signal.signalKind == 2)
{
//MarketData1종목을 매수5호가로 1계약 매도주문
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0);
}
//매도 진입신호 발생
if (Signal.signalKind == 3)
{
//MarketData1종목을 매수5호가로 1계약 매도주문
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0);
}
//매도 포지션 청산신호 발생
if (Signal.signalKind == 4)
{
//MarketData1종목을 매도5호가로 1계약 매수주문
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0);
}
}
2015-11-18
2203
글번호 223721