input:xs(300,3,300,3);
ma60:ma(c,xs);
ma1:ma(c,1);
t3l:=ref(llv(l,3),1);
t3h:=ref(hhv(h,3),1);
t3m:(T3L+T3H)/2;
l1:ma(c/ma60,1);
tt1:c>t3m;
tt2:c<t3m;
tt3:c<ma60;
tt4:c>ma60;
PD:cross(ma1,ma60) and tt3;// //平多条件 死叉60均 并小于60日均
PK:cross(ma1,ma60) and tt4;// //平空条件金叉60均 并大于60日均
KD:cross(ma1,t3m) and tt4; // //开多条件 金叉 并大于60日均
KK:cross(ma1,t3m) and tt3;// //开空条件收盘价死叉 并小于60日均
//交
平多:SELL(PD,1,marketr);
平空:SELLSHORT(PK,1,marketr); //平空信号
开多:BUY(KD AND HOLDING=0,1,marketr); //开多信号
//平多信号
开空:BUYSHORT(KK AND HOLDING=0,1,marketr); //开空信号
执行不了 请问老师错在那
把数据量扩充大点。你默认的ma参数是300.那么至少300个K,ma60才能正常有值。
程序没有语法错误。只是条件比较苛刻。能满足条件的k线位置很少。自然不会或者出现开平记录。
pk 和 pd 如果不加 tt3 tt4 能执行 但是就分不清金叉还是死叉了 这个怎么解决 cross 没法判断 是 上叉还是下叉 ,加上tt3 和 tt4就不执行了 就卡在这
比如做多 离场 就 c 下叉 ma60 如果这么 写cross(c,ma60)既能是上叉又能是下叉 不加 tt3 是没法判断了
cross 就是表示上穿的意思。不存在说分不分得清。通常金叉,死叉只是把cross里面2个参数换个位置。
金叉是 cross(a,b) 那么死叉满足就是cross(b,a)