如何过滤连续的买入、卖出信号,使买入后只要没有发出卖出信号,就不再发出买入信号;同样,卖出后只要没有出现买入信号,就不再发出卖出信号。即买入、卖出信号一一对应。 容易想到的是使用过滤函数filter(),但这个函数是难以实现的,因为未来有多少个连续的买入(或卖出)信号是未知的。 另一种方法是,从前一次卖出(或买入)信号开始累加买入(或卖出)信号,如果累加次数等于1,则发出真正的买入(或卖出)信号。
但这里还有一个问题,如果首次信号是卖出信号的话,也应该过滤,因为没有买入哪来卖出?应让首次信号是买入信号才合理。方法是,在第1根K线的位置,虚拟一个卖出信号。 以下是实现上述想法的常规函数代码:
input:n(26,5,300),p(2,0.1,10); close; mid : ma(close,n); upper: mid + p*std(close,n); lower: mid - p*std(close,n);
//以下为常规函数处理代码// tjb:=cross(close,lower);//初始买入信号,可换成其它任意买入条件 tjs:=cross(upper,close);//初始卖出信号,可换成其它任意卖出条件
{以下代码,使买、卖信号一一对应} tsb:=barssince(tjb); tss:=barssince(tjs); if tjs[datacount]<tjb[datacount] then begin a:=setlbound(tjs,1); tjs:=tjs or barpos=1; end; tjbuy:=count(tjb,barslast(tjs))=1 and tjb; //买入信号 tjsell:=count(tjs,barslast(tjb))=1 and tjs; //卖出信号
drawicon(tjbuy,low,4); drawicon(tjsell,high,5);
这个过滤方法很好,不知道有没有高人转成通达信的。
交易系统信号过滤问题,如何避免连续信号 {rh为原来的入货条件,ch为原来出货条件} {多头买入} enterlong: count(rh,barslast(ch))=1 and rh; {多头卖出} exitlong: count(ch,barslast(rh))=1 and ch; |