jk:=VALUEWHEN(DATE<>REF(DATE,1),OPEN);//今开盘价
MA10:=MA(CLOSE,10);
MA30:=MA(CLOSE,30);
MA100:=MA(CLOSE,100);
BK:=MA10>MA30 AND close>MA100 and CROSS(CLOSE,REF(HHV(HIGH,10),1));
SK:=MA10<MA30 AND close<MA100 and CROSS(REF(LLV(LOW,10),1),CLOSE);
new:close,LINETHICK0;
low10:REF(LLV(LOW,10),1),LINETHICK1;//用来调试问题的
high10:REF(HHV(HIGH,10),1),LINETHICK1;//同上
{开多} ENTERLONG: BK,TFILTER; //10上穿30且close大于100,等待破前10根线的最高价开多
{平多} EXITLONG: (MA10<MA30 AND CROSS(REF(LLV(LOW,10),1),CLOSE))or time>1458,TFILTER; //10在30下,且突破前10根线的最低价平多
{开空} ENTERSHORT:SK,TFILTER;
{平空} EXITSHORT: (MA10>MA30 AND CROSS(CLOSE,REF(HHV(HIGH,10),1))) or time>1458,TFILTER;
平仓条件本来是写10下穿30,但也有同样问题暂时就写成10<30吧,关键是,平仓有几次不对,已经满足10<30,并且破了前十根线最低,还是不平仓。测试品种ru1105,截其中一次2010年12月22,(应该10:32就平多且反手),交易信号连线明显不对,反手时间也不对,刚接触金字塔,请看下是什么问题。
没贴上,再贴一次
这个问题我以前也碰到过
问题就出在 cross
把 CROSS(REF(LLV(LOW,10),1),CLOSE) 改为 C<REF(LLV(LOW,10),1) 即可
或者写个变量记录 是否已经发生过 C<REF(LLV(LOW,10),1) ,然后结合均线判断下单条件是否成立
你说的是1:32吧,我是1105合约,ma10=37424,ma30=37439,肯定满足的
这个问题我以前也碰到过
问题就出在 cross
把 CROSS(REF(LLV(LOW,10),1),CLOSE) 改为 C<REF(LLV(LOW,10),1) 即可
或者写个变量记录 是否已经发生过 C<REF(LLV(LOW,10),1) ,然后结合均线判断下单条件是否成立
我把cross全部改成小于,大于的条件判断语句了,貌似可以,是没理解透cross的逻辑,还是本来就存在这种bug,这个函数存在的意义在哪,改成大于小于判断语句后会不会有新的毛病?
什么情况下非用这个函数不可呢?
还有用变量,判断是不是得用 if then语句了,编程基础不好,麻烦了