股票量化交易軟件:逆轉(zhuǎn)形態(tài)測(cè)試雙頂/雙底形態(tài)

形態(tài)形成的理論觀
在價(jià)格圖表上可以頻繁返現(xiàn)雙頂/雙底形態(tài)。 它的形成與交易價(jià)位理論密切相關(guān)。 當(dāng)價(jià)格達(dá)到支撐位或阻力位時(shí)(取決于之前的走勢(shì)),該形態(tài)在趨勢(shì)結(jié)束時(shí)形成。 在重復(fù)測(cè)試價(jià)位過(guò)程中進(jìn)行調(diào)整之后,它會(huì)再次回滾而非突破。
在這一點(diǎn)位上,逆勢(shì)交易者開始從該價(jià)位回滾時(shí)交易,并將價(jià)格推向調(diào)整。 在調(diào)整走勢(shì)獲得動(dòng)量的同時(shí),順勢(shì)交易者開始獲利了結(jié)離場(chǎng),或?qū)⑻潛p持倉(cāng)平倉(cāng)來(lái)避免突破該價(jià)位。 這進(jìn)一步加強(qiáng)了走勢(shì),導(dǎo)致了新趨勢(shì)的出現(xiàn)。

編輯
在圖表上搜索形態(tài)時(shí),不必搜索頂部/底部的精準(zhǔn)匹配。 頂部/底部?jī)r(jià)位的偏差被認(rèn)為是正常的。 只需確保峰值在相同的支撐/阻力位之內(nèi)。 形態(tài)可靠性取決于它所基于的級(jí)別強(qiáng)度。
2. 形態(tài)交易策略
形態(tài)的普及引發(fā)了多種涉及它的策略。 在互聯(lián)網(wǎng)上,交易這種形態(tài)至少有三個(gè)不同的入場(chǎng)點(diǎn)。
2.1. 案例 1
第一個(gè)入場(chǎng)點(diǎn)是基于頸線的突破。 止損設(shè)置在頂/底線之外。 有不同的方法來(lái)定義“頸線突破”。 交易者可以使用在頸線下方收盤的柱線,以及突破頸線一段固定距離的柱線。 兩種方法都有其優(yōu)點(diǎn)和缺點(diǎn)。 在凌厲走勢(shì)的情況下,蠟燭可以在距頸線足夠的距離處收盤,令形態(tài)效率很低。

編輯
這種方法的缺點(diǎn)是止損價(jià)位相對(duì)較高,這降低了策略的利潤(rùn)/風(fēng)險(xiǎn)比。
2.2. 案例 2
第二個(gè)入場(chǎng)點(diǎn)基于鏡面等級(jí)理論,當(dāng)頸線從支撐變成阻力時(shí),反之亦然。 此處的入場(chǎng)點(diǎn)是在價(jià)格突破后回到頸線時(shí)進(jìn)行的。 在這種情況下,止損設(shè)置超出最后一次調(diào)整的極值,從而顯著降低止損價(jià)位。 不幸的是,價(jià)格并不總是在突破后回測(cè)頸線,從而減少了入場(chǎng)次數(shù)。

編輯
2.3. 案例 3
第三個(gè)入場(chǎng)點(diǎn)基于趨勢(shì)理論。 它的定義是突破從走勢(shì)起點(diǎn)到頸線極值的趨勢(shì)線。 與第一種情況一樣,止損設(shè)置在頂/底線之外。 與第一個(gè)入場(chǎng)點(diǎn)相比,早期入場(chǎng)提供較低的止損價(jià)位。 與第二種情況相比,它還提供更多信號(hào)。 與此同時(shí),這樣的入場(chǎng)點(diǎn)會(huì)發(fā)出更多的假信號(hào),因?yàn)樵跇O值線和頸部之間可能形成通道,或者可能存在旗形形態(tài)。 兩種情況都表示趨勢(shì)延續(xù)。

編輯
所有三種策略都指示在等于極值和頸線之間距離的價(jià)位上離場(chǎng)。

編輯
此外,在判斷圖表上的形態(tài)時(shí),您應(yīng)該注意到雙頂/雙底應(yīng)該從價(jià)格走勢(shì)中清晰地脫穎而出。 在描述形態(tài)時(shí),通常會(huì)添加限制:兩個(gè)頂部/底部之間應(yīng)該至少有六根柱線。
此外,由于形態(tài)形成是基于價(jià)位理論,形態(tài)交易不應(yīng)該與之相矛盾。 因此,基于預(yù)期目的,頸線不應(yīng)低于初始走勢(shì)的菲波納奇等級(jí) 50。 此外,為了濾除假信號(hào),赫茲股票量化可以添加第一次調(diào)整的最低價(jià)位(形成頸線)作為價(jià)格等級(jí)強(qiáng)度的指標(biāo)。
3. 創(chuàng)建 EA
3.1. 搜索極值
赫茲股票量化將從形態(tài)搜索模塊開始開發(fā) EA。 我們用赫茲股票量化標(biāo)準(zhǔn)發(fā)行包中的之字折線指標(biāo)來(lái)搜索價(jià)格極值。 將指標(biāo)計(jì)算部分移至文章 [1] 中所述的類。 該指標(biāo)包含兩個(gè)指標(biāo)緩沖區(qū),其中包含極值點(diǎn)的價(jià)格值。 指標(biāo)緩沖區(qū)包含極值之間的空值。 為了避免創(chuàng)建兩個(gè)包含多個(gè)空值的指標(biāo)緩沖區(qū),它們由包含有關(guān)極值信息的結(jié)構(gòu)數(shù)組所取代。 用于存儲(chǔ)有關(guān)極值信息的結(jié)構(gòu)如下所示。
? struct s_Extremum ? ? { ? ? ?datetime ? ? ? ? ?TimeStartBar; ? ? ?double ? ? ? ? ? ?Price; ? ? ? ? ? ?s_Extremum(void) ?: ?TimeStartBar(0), ? ? ? ? ? ? ? ? ? ? ? ? ? Price(0) ? ? ? ? { ? ? ? ? } ? ? ?void Clear(void) ? ? ? ?{ ? ? ? ? TimeStartBar=0; ? ? ? ? Price=0; ? ? ? ?} ? ? };
如果您至少使用過(guò)一次之字折線指標(biāo),您就會(huì)知道在搜索最佳參數(shù)時(shí)必須要做出一些妥協(xié)。 參數(shù)值太小會(huì)將大走勢(shì)分成小部分,而太大的參數(shù)值會(huì)掩蓋短期走勢(shì)。 搜索形態(tài)圖形的算法對(duì)于尋找極值的品質(zhì)要求很高。 在嘗試尋找中間點(diǎn)的同時(shí),我決定使用具有小參數(shù)值的指標(biāo),并創(chuàng)建一個(gè)額外的上層結(jié)構(gòu),將單向走勢(shì)與短期調(diào)整合并到一個(gè)走勢(shì)。
CTrends 類是為解決這個(gè)問(wèn)題而開發(fā)的。 類的頭部提供如下。 在初始化期間,將指標(biāo)類對(duì)象的引用和趨勢(shì)延續(xù)的最小移動(dòng)值傳遞給類。
class CTrends : public CObject ?{ private: ? CZigZag ? ? ? ? ?*C_ZigZag; ? ? ? ? // 鏈接到之字折線指標(biāo)對(duì)象 ? s_Extremum ? ? ? ?Trends[]; ? ? ? ? // 極值數(shù)組 ? int ? ? ? ? ? ? ? i_total; ? ? ? ? ?// 保存的極值總數(shù) ? double ? ? ? ? ? ?d_MinCorrection; ?// 趨勢(shì)延續(xù)的最小移動(dòng)值 public: ? ? ? ? ? ? ? ? ? ? CTrends(); ? ? ? ? ? ? ? ? ? ?~CTrends(); //--- 類初始化方法 ? virtual bool ? ? ?Create(CZigZag *pointer, double min_correction); //--- 獲取有關(guān)極值的信息 ? virtual bool ? ? ?IsHigh(s_Extremum &pointer) const; ? virtual bool ? ? ?Extremum(s_Extremum &pointer, const int position=0); ? virtual int ? ? ? ExtremumByTime(datetime time); //--- 獲取一般信息 ? virtual int ? ? ? Total(void) ? ? ? ? ?{ ?Calculate(); return i_total; ? } ? virtual string ? ?Symbol(void) const ? { ?if(CheckPointer(C_ZigZag)==POINTER_INVALID) return "Not Initilized"; return C_ZigZag.Symbol(); ?} ? virtual ENUM_TIMEFRAMES Timeframe(void) const ? { ?if(CheckPointer(C_ZigZag)==POINTER_INVALID) return PERIOD_CURRENT; return C_ZigZag.Timeframe(); ?} ? protected: ? virtual bool ? ? ?Calculate(void); ? virtual bool ? ? ?AddTrendPoint(s_Extremum &pointer); ?};
要獲取極值數(shù)據(jù),類中提供了以下方法:
ExtremumByTime — 獲取數(shù)據(jù)庫(kù)中指定時(shí)間的極值數(shù)字,
Extremum — 返回?cái)?shù)據(jù)庫(kù)中指定位置的極值,
IsHigh — 如果指定的極值是頂部,則返回 true; 如果是底部,則返回 false。
通用信息模塊擁有返回已保存的極值總數(shù),所用品名和時(shí)間幀的方法。
類的主要邏輯在 Calculate 方法中實(shí)現(xiàn)。 我們來(lái)仔細(xì)查看。
在方法的開頭,檢查指標(biāo)類對(duì)象的引用的相關(guān)性,以及指標(biāo)已發(fā)現(xiàn)的存在極值。