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