做小时线,套日线,选择MACD,当日线MACD金叉时,在本小时K线结束时偷鸡进场,结果本日的每个小时都会触发买入条件,按照我的思路,COUNT(A1,4)应该会从1开始累积起来,但是从实际看下来,COUNT(A1,4)在当天一直等于1。
想让老师看看,该怎样修改,可以达到我想要的效果,谢谢!
DIFDAY:=MACD.DIF#DAY;
DEADAY:=MACD.DEA#DAY;
A1:=CROSS(DIFDAY,DEADAY);
A2:=COUNT(A1,4)=1;
进场:=ISLASTBAR AND A2;
你是否有检查你的DIFDAY 和DEADAY的引用呢?
如下才能正确引用:
DIFDAY:"MACD.DIF#DAY";
DEADAY:"MACD.DEA#DAY";
1.你原先的引用方式 我本地甚至都编译不了。
2.假设正常引用。你代码里面就是判断统计最近4个K A1=1的数量是否等于1。 所以你可以查看下当天小时K对应的A1值的情况了。
你可以在小时线上把A1,A2都输出出来。 另外考虑到你是小引大,当日几个小时K线上引用到的 DIFDAY,DEADAY值应该都是一样的吧。
光从代码暂时无法判断你这个是什么情况了,另外你是走完K运行还是固定轮询运行的呢,每个小时K上都有开仓信息?。
举例来说:
比如今天第一根K线就满足了日线金叉(CROSS),照道理,第二根K线的时候用COUNT(A1,4),计算得出的周期应该是2,但是在小时线上,这个周期仍然是1,实际上当天4根K线都是1;
似乎日线CROSS对于每根小时线都是成立的。
我知道你这个思路是什么意思。 但是现在问题是如果你是小时K
DIFDAY:"MACD.DIF#DAY";
DIFDAY:"MACD.DEA#DAY";
这种引用在当天的小时K线上引用的值都应该是一样的,因为他们引用到的都是同一个日线的macd下的dif和dea,这种情况下 COUNT(A1,4)=1; 这个条件 至多在当天的前三个K才可能成立。并且还要要求昨日日线满足macd金叉才行。
按照正常逻辑 不可能出现你说的情况的,每个K的count都返回1。所以需要你直接在图表上输出你的a1,a2等变量值。
我不清楚你到底如何检查你的变量返回值的,是图表输出?还是根据实际下单信号倒推出来的。
我图片发不上来,我用的是在图表上输出,当天小时线上4根K的A2都是1,A1显示的是当天第一个K为1.
我明白了,日线CROSS在小时K上只成立了一次,所以用COUNT(A1,4)肯定等于1;看来我这样的做法是有问题的。
请教老师,有其它方法可以做到我想要的效果吗?
count函数处理逻辑是这样:如果4个K 的a1都是1,那么在最后一个K上,返回值肯定是4.这个函数机制是没问题的
。问题在于按照你的代码 ,今日的几个小时K上的A1值肯定是一样的,不可能是不同的值的,我本地直接测试,是这样不会错的。

此主题相关图片如下:temp.png

这上面最后面几个K对应的DIFDAY,DIFDAY 都是一样的。也就是说a1值对应的也是一样的。不会有差异的。
你上面发的代码是完整代码吗?我无论如何重现不了你说的情况。
[此贴子已经被作者于2018/8/27 17:24:17编辑过]
我找到原因了,我引用的是“MACD.DIFF#DAY”;不是“MACD.DIF#DAY”。
使用“MACD.DIFF#DAY”的话,A1只出现在当天第一个K线上,
使用“MACD.DIF#DAY”,A1会出现在当天所有K线上。
但是我发觉不管我用哪个,似乎都没法达到我的要求;
比如今天第二根K线出现了日线金叉,使用“MACD.DIF#DAY”,A1会从当天第一根K线开始为1,也就是说在第二根K线的时候,使用COUNT(A1,4)会等于2,变成类似未来函数的样子。
请教老师,这种情况下有什么其他办法解决吗?