enterbars>2 or enterbars=-1
tenterbars(1)>2 or tenterbars(1)=-1
分别是图表和后台的,放到条件里去
数据刷新的周期是30分钟,是要开仓条件成立后2天再开仓哦
tenterbars(1)>2 or tenterbars(1)=-1 知道我要的是日级?
是要刚好完整的跨越2个交易日(比如一天300个K,2天就是600K,必须跨度达到600K,日期上可能都不止2个交易日了),还是说只要开仓信号和满足条件的位置 是在跨2个交易日的日期上即可(按完整K线跨度算可能是不足2个交易日,但是日期是满足的)。
如果是要完整的2个交易日的跨度,这种试了下,是做不到的。因此只能按照第二种方式做,只要跨2个交易日即可,不管实际K线跨度是多少。
//参考这个思路。macdjc开仓,死叉平仓
input:p(26,20,100,8),s(12,5,40,4),m(9,2,60,6);
DIFF :=EMA(CLOSE,S) - EMA(CLOSE,P);
DEA :=EMA(DIFF,M);
MACD1 :2*(DIFF-DEA), COLORSTICK;
macdjc:cross(diff,dea),NODRAW;//macd金叉
macdsc:cross(dea,diff),NODRAW;
DRAWICON(macdjc,h,1);//标记下金叉位置
DRAWICON(macdsc,l,2);
VARIABLE:dt:=0,datedif:=0;//datedif 纪录实际交易日天数
if date<>ref(date,1) then datedif:=datedif+1;
if macdjc and dt=0 then //满足金叉 且当前dt为0,纪录下此时的datedif
begin
dt:=datedif;
end
if datedif-dt>2 and dt<>0 and holding=0 then buy(1,1,market);//交易日跨度大于2开仓。1号纪录的,2,3都是交易的话,4号上就出开仓信号。
if macdsc and dt<>0 and holding<>0 then //平仓时候重置dt为0.下次金叉时候再给dt赋值。这里if后面的条件必须完完整整,无论你本地代码怎么的,红色部分的是不可少的。
begin
sell(1,holding,market);
dt:=0;
end
简单点就行
像27号有开仓信号到今天29号仍满足条件开仓条件即执行开仓。
那也只要改这里的就行
if datedif-dt>1 and dt<>0 and holding=0 then buy(1,1,market);//交易日跨度大于2开仓。1号纪录的,2,3都是交易的话,4号上就出开仓信号。
另外听你的意思不仅仅说信号满足后多少天开仓,而且还要当时也要满足条件才开仓?比如2个交易日后的那天的金叉才开仓或者之后金叉的位置才开仓?
if datedif-dt>2 and dt<>0 and holding=0 and macdjc then buy(1,1,market);//交易日跨度大于2开仓。1号纪录的,2,3都是交易的话,4号上就出开仓信号。
开仓地方再加一个条件判断就行了。这样实际效果就是某条件满足后,2个交易日后的某个交易日如果再次满足就开仓。
具体效果和思路,你加载下面代码看下就知道了。笑脸是开仓条件满足位置,哭脸是平仓条件满足位置。
//参考这个思路。macdjc开仓,死叉平仓
input:p(26,20,100,8),s(12,5,40,4),m(9,2,60,6);
DIFF :=EMA(CLOSE,S) - EMA(CLOSE,P);
DEA :=EMA(DIFF,M);
MACD1 :2*(DIFF-DEA), COLORSTICK;
macdjc:cross(diff,dea),NODRAW;//macd金叉
macdsc:cross(dea,diff),NODRAW;
DRAWICON(macdjc,h,1);//标记下金叉位置
DRAWICON(macdsc,l,2);
VARIABLE:dt:=0,datedif:=0;//datedif 纪录实际交易日天数
if date<>ref(date,1) then datedif:=datedif+1;
if macdjc and dt=0 then //满足金叉 且当前dt为0,纪录下此时的datedif
begin
dt:=datedif;
end
if datedif-dt>1 and dt<>0 and holding=0 and macdjc then buy(1,1,market);//交易日跨度大于2开仓。1号纪录的,2,3都是交易的话,4号上就出开仓信号。
if macdsc and dt<>0 and holding<>0 then //平仓时候重置dt为0.下次金叉时候再给dt赋值。这里if后面的条件必须完完整整,无论你本地代码怎么的,红色部分的是不可少的。
begin
sell(1,holding,market);
dt:=0;
end