|      
    在設(shè)計(jì)公式時(shí),我們經(jīng)常遇到這樣的問題,如何使買賣信號(hào)一一對(duì)應(yīng)?    比如下面的代碼:  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);  drawicon(tjb,close,4);   drawicon(tjs,close,5);     圖示如下,可以看出,買入信號(hào)連續(xù)發(fā)出多次后,才出現(xiàn)賣出信號(hào),賣出信號(hào)連續(xù)發(fā)出多次后,才發(fā)出買入信號(hào)。      |      如何過濾連續(xù)的買入、賣出信號(hào),使買入后只要沒有發(fā)出賣出信號(hào),就不再發(fā)出買入信號(hào);同樣,賣出后只要沒有出現(xiàn)買入信號(hào),就不再發(fā)出賣出信號(hào)。即買入、賣出信號(hào)一一對(duì)應(yīng)。    容易想到的是使用過濾函數(shù)filter(),但這個(gè)函數(shù)是難以實(shí)現(xiàn)的,因?yàn)槲磥碛卸嗌賯(gè)連續(xù)的買入(或賣出)信號(hào)是未知的。    另一種方法是,從前一次賣出(或買入)信號(hào)開始累加買入(或賣出)信號(hào),如果累加次數(shù)等于1,則發(fā)出真正的買入(或賣出)信號(hào)。      但這里還有一個(gè)問題,如果首次信號(hào)是賣出信號(hào)的話,也應(yīng)該過濾,因?yàn)闆]有買入哪來賣出?應(yīng)讓首次信號(hào)是買入信號(hào)才合理。方法是,在第1根K線的位置,虛擬一個(gè)賣出信號(hào)。    以下是實(shí)現(xiàn)上述想法的常規(guī)函數(shù)代碼:    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);    //以下為常規(guī)函數(shù)處理代碼//  tjb:=cross(close,lower);//初始買入信號(hào),可換成其它任意買入條件  tjs:=cross(upper,close);//初始賣出信號(hào),可換成其它任意賣出條件    {以下代碼,使買、賣信號(hào)一一對(duì)應(yīng)}  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; //買入信號(hào)  tjsell:=count(tjs,barslast(tjb))=1 and tjs; //賣出信號(hào)    drawicon(tjbuy,low,4);  drawicon(tjsell,high,5);  圖示如下:       |       (文章來源:南方財(cái)富 http://www.vnvu.cn)   |