답변완료
수식 추가부탁합니다
전일 매도한 콜매도(예 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
2192
글번호 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
2212
글번호 223721
답변완료
수식
해외선물(오일,금,유로 fx) 매매시 각각 차트를 2개씩띄워 놓고(차트주기는 동일)
1번차트와 2번 차트에 적용되는 시스템식은 다름
이때 1번차트의 신호를 메인으로 보고
1번차트가 매수면 2번차트는 매수신호에 의해진입 매도신호에의해 청산
1번차트가 매도면 2번차트는 매도신호에 의해진입 매수신호에의해 청산
물론 2번차트에 의해서 보유중이면 1번차트신호가 바뀔시 바로 청산하고요
그런데
예제6. 주기가 다른 여러 차트를 참조해 주문발생하기 중
OnRiseSignal은 연결된 차트에서 완성신호가 발생했을 때 호출되는 이벤트이고 완성신호 정보는
완성신호객체(Signal)가 제공합니다.
(위부분이 핵심인듯 한데)
보고 해보려고 하니 비슷한 도움말인데 응용을 해보려니 좀 어렵내요
질문요약
1번차트 매매신호를 기준으로 매수면 2번차트의 매수신호에 의해 진입 매도에 청산
1번차트 매매신호를 기준으로 매도면 2번차트의 매도신호에 의해 진입 매수에 청산
2번차트 수식은 1번차트 수식과는 달라서 (신호가 각각 나옴)
1번신호가 바뀌면 보유중이면 무조건 청산 입니다.
해외선물 3가지 종목을 동시에 매매할겁니다.
감사합니다.
예로 GOLD 1번차트 macd (주기가 50) 골든일때 매수 신호 발생시
GOLD 2번차트 macd (주기가 10) 골든일때 매수해서 데드일때 청산
여기서 GOLD 1번차트 2번차트 주기는 동일
1번차트 macd (주기가 50) 데드일때 매도 신호 발생시
2번차트 macd (주기가 10) 데드일때 매도해서 골든일때 청산
진입에 의해 보유시 1번차트가 반대신호로 나오면 무조건청산
입니다.
(((******1번차트의 위의 예시처럼 macd식을 이용할것이아니고 차트에 macd 수식을 적용했을때 발생되어지는 차트신호만 받아서 예제6번처럼 1번차트의 발생신호 이벤트만
받아들여서 2번차트신호에 의해 매매할겁니다******)2번차트는 직전봉이 스토케스틱 30이하침체진입후 현재봉이 앞봉값보다 높을때 매수,,직전봉이 스토케스틱 70이상 과열진입후 현재봉이 앞봉값보다 낮을때 매도)) 입니다.
1번차트에 발생된 신호만 2번차트에서 받아들여 2번차트는 스토케스틱 수식에의해 매매
골드,유로fx,오일 동시매매
==========================================================
==========================================================
아래수식은 1번문의한 내용을 수식화한것입니다.
그런데 예스트레더작성한것을
예스스팟에서는 syntax 에러가 난다고해서 실행을 못해보고 있습니다.
<<<<<<<<<<<<<<< 2번문의 >>>>>>>>>>>>>>>>>
input : b_time1(000000),e_time1(240000),목표청산1(3);
input : stoK_p11(150),stoK_p12(20),stoK_p13(30);
input : ma_p11(15),ma_p12(5),ma_p13(10),ma_p14(80),ma_p15(10),ma_p16(40),ma_p17(35);
input : sto1(10),sto2(5);
Var:stoK1(0),stoD1(0),TRIXv(0),TRIXsig(0),stok2(0),T(0);
stok2 = StochasticsK(sto1,sto2);
If b_time1 <= Time and Time <= e_time1 Then
{
stoK1 = StochasticsK(stoK_p11,stoK_p12);
stoD1 = StochasticsD(stoK_p11,stoK_p12,stoK_p13);
If countif(ma(C,ma_p11)[1] < ma(C,ma_p11),1) == 1
and (ma(C,ma_p12)[1] <= ma(C,ma_p13)[1] and ma(C,ma_p12) > ma(C,ma_p13))
and countif(ma(C,ma_p14)[1] < ma(C,ma_p14),1) == 1
and countif(ma(C,ma_p15)[1] < ma(C,ma_p15),1) == 1
and countif(ma(C,ma_p16)[1] < ma(C,ma_p16),1) == 1
and countif(ma(C,ma_p17)[1] < ma(C,ma_p17),1) == 1
Then
{
T = 1;
if MarketPosition == -1 Then
ExitShort("매도1청산");
}
If countif(ma(C,ma_p11)[1] > ma(C,ma_p11),1) == 1
and (ma(C,ma_p12)[1] >= ma(C,ma_p13)[1] and ma(C,ma_p12) < ma(C,ma_p13))
and countif(ma(C,ma_p14)[1] > ma(C,ma_p14),1) == 1
and countif(ma(C,ma_p15)[1] > ma(C,ma_p15),1) == 1
and countif(ma(C,ma_p16)[1] > ma(C,ma_p16),1) == 1
and countif(ma(C,ma_p17)[1] > ma(C,ma_p17),1) == 1
Then
{
T = -1;
if MarketPosition == 1 Then
ExitLong("매수1청산");
}
}
if T == 1 then{
if countif(stok2>stok2[1],2) == 1 and stok2[1] < 10 Then
buy("매수2");
if countif(stok2<stok2[1],2) == 1 and stok2[1] > 90 Then
ExitLong("매수2청산");
}
if T == -1 then{
if countif(stok2<stok2[1],2) == 1 and stok2[1] > 90 Then
sell("매도2");
if countif(stok2>stok2[1],2) == 1 and stok2[1] < 10 Then
ExitShort("매도2청산");
}
답변을 메일로만 받을수있을까요 ?
444422ver@ naver.com
2015-11-22
2190
글번호 223718