以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- 开仓条件成立之后2天再开仓 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=188107) |
-- 作者:fxrock4 -- 发布时间:2021/4/29 10:28:56 -- 开仓条件成立之后2天再开仓 开仓条件成立之后2天再开仓 图表和后台怎么写呢?
|
-- 作者:yukizzc -- 发布时间:2021/4/29 10:37:17 -- enterbars>2 or enterbars=-1 tenterbars(1)>2 or tenterbars(1)=-1 分别是图表和后台的,放到条件里去 |
-- 作者:fxrock4 -- 发布时间:2021/4/29 11:28:44 -- 数据刷新的周期是30分钟,是要开仓条件成立后2天再开仓哦 tenterbars(1)>2 or tenterbars(1)=-1 知道我要的是日级?
|
-- 作者:FireScript -- 发布时间:2021/4/29 13:35:04 -- 是要刚好完整的跨越2个交易日(比如一天300个K,2天就是600K,必须跨度达到600K,日期上可能都不止2个交易日了),还是说只要开仓信号和满足条件的位置 是在跨2个交易日的日期上即可(按完整K线跨度算可能是不足2个交易日,但是日期是满足的)。 |
-- 作者:FireScript -- 发布时间:2021/4/29 14:04:21 -- 如果是要完整的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 |
-- 作者:fxrock4 -- 发布时间:2021/4/29 14:09:10 -- 简单点就行 像27号有开仓信号到今天29号仍满足条件开仓条件即执行开仓。
|
-- 作者:FireScript -- 发布时间:2021/4/29 14:24:10 -- 那也只要改这里的就行 if datedif-dt>1 and dt<>0 and holding=0 then buy(1,1,market);//交易日跨度大于2开仓。1号纪录的,2,3都是交易的话,4号上就出开仓信号。 另外听你的意思不仅仅说信号满足后多少天开仓,而且还要当时也要满足条件才开仓?比如2个交易日后的那天的金叉才开仓或者之后金叉的位置才开仓?
|
-- 作者:fxrock4 -- 发布时间:2021/4/29 14:39:55 -- 像RM 27号满足开仓条件了,但不开仓 29号仍满足开仓条件,则才开仓 |
-- 作者:FireScript -- 发布时间:2021/4/29 14:47:01 -- if datedif-dt>2 and dt<>0 and holding=0 and macdjc then buy(1,1,market);//交易日跨度大于2开仓。1号纪录的,2,3都是交易的话,4号上就出开仓信号。 开仓地方再加一个条件判断就行了。这样实际效果就是某条件满足后,2个交易日后的某个交易日如果再次满足就开仓。 具体效果和思路,你加载下面代码看下就知道了。笑脸是开仓条件满足位置,哭脸是平仓条件满足位置。 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 |