CCI 指標(biāo)升級和新特征(穩(wěn)健統(tǒng)計的CCI)
簡要歷史
商品通道指數(shù)(CCI)是每位交易員都熟悉的。 它由唐納德·蘭伯特(Donald Lambert)開發(fā),并于 1980 年首次在商品雜志(現(xiàn)名為現(xiàn)代交易者)上發(fā)表。自那時起,這一指標(biāo)獲得了應(yīng)有的聲譽,并在交易者中廣受歡迎。 它存在于?MetaTrader?交易平臺工具包中,既可用于手動交易,也可作為自動交易系統(tǒng)的一部分使用
計算算法
該指標(biāo)的計算非常簡單明了。 該指標(biāo)顯示價格相對于絕對偏差均值的平均偏離程度。 其算法如下所示。 指標(biāo)周期為 N 個價格讀數(shù)。 之后:
計算均值

求絕對偏差均值

計算指標(biāo)值

在原始指標(biāo)中,校正系數(shù) k=0.015。 選擇它的方式是,1.5*MAD 的價格偏差等于 100 個指標(biāo)單位。 在這種情況下,3*MAD 的偏差為 200 個單位。 (有趣的是,如果用乘法代替除法,則歸一化系數(shù)k的值為 66.6)
可能的算法變化
該指標(biāo)的顯著特點是使用絕對偏差均值。 這種方式在計算機技術(shù)誕生之初就已經(jīng)被完全證明是正確的,因為與計算更合適的標(biāo)準(zhǔn)偏差相比,計算絕對偏差所需的計算資源較少。 現(xiàn)代計算機可以在合理的時間內(nèi)處理平方和根運算。 因此,計算算法如下。
求數(shù)字之和:

求平方和:

計算指標(biāo)值:

這樣的算法更精確,但仍不完美。 主要問題是,估算平均值和均方根值需要足夠多的價格讀數(shù)(不少于三十個)。 然而,較短周期也可用于交易。 例如,在 CCI 的經(jīng)典版本中,建議周期采用 14 個樣本。
這種情形需要強健的統(tǒng)計方法。 即使在金融市場過熱的極端情況下,它們也能獲得相當(dāng)穩(wěn)定和可靠的參數(shù)估算值。
注:強健的統(tǒng)計方法為穩(wěn)健統(tǒng)計。穩(wěn)健統(tǒng)計是數(shù)理統(tǒng)計學(xué)的一個方面,研究當(dāng)總體假定稍有變動及記錄數(shù)據(jù)有失誤時,統(tǒng)計方法的適應(yīng)性問題。一個統(tǒng)計方法在實際應(yīng)用中要有良好的表現(xiàn),需要兩個條件:一是該方法所依據(jù)的條件與實際問題中的條件相符;二是樣本確是隨機的,不包含過失誤差,如記錄錯誤等。但實際應(yīng)用中這些條件很難嚴(yán)格滿足,比方說,原來在提出該方法時是依據(jù)總體分布為正態(tài)分布的假定,但實際問題中總體的分布與正態(tài)略有偏離;或在大量的觀測數(shù)據(jù)中存在受到過失誤差影響的“異常數(shù)據(jù)”等。如果在這種情況下,所用統(tǒng)計方法的性能僅受到少許影響,就稱它具有穩(wěn)健性。
我們來看看強健的方法是如何工作的,并拿它們與經(jīng)典方法進行比較。 例如,我們?nèi)∪齻€值的時間序列:p[0]=1,p[1]=3,p[2]=8。
然后將經(jīng)典方式簡并為以下計算:
Mean (1 + 3 + 8) / 3 = 4
絕對偏差 (abs(1 – 4) + abs(3 – 4) + abs(8 – 4)) /3 = 2.67
通道的下限和上限 1.33 – 6.67?
現(xiàn)在,我們?nèi)?biāo)準(zhǔn)偏差進行計算:
Mean (1 + 3 + 8) / 3 = 4
標(biāo)準(zhǔn)偏差 sqrt(((1 – 4)^2 + (3 – 4)^2 + (8 – 4)^2) / 3) = 2.94
通道的下限和上限 1.06 – 6.94
強健估值的計算成本更高。 我們用泰爾-森(Theil-Sen)方法來估算平均值。 為此,我們應(yīng)該首先找到時間序列值對分的所有半值合計。 這些對分的數(shù)量可以通過以下等式獲得:num=(N*(N-1)) / 2。
?穩(wěn)健回歸 : RANSACRegressor隨機采樣一致性算法和TheilSenRegressor泰爾森回歸
在這種情況下,穩(wěn)定的均值等于這半值合計的中位數(shù)。 為了找到中位值,我們應(yīng)該首先按升序給數(shù)組進行排序。 然后中位值將與數(shù)組中心的值相對應(yīng)。 為了找到中位值,如果數(shù)組大小是奇數(shù),我們需要中心元素的索引,如果數(shù)組的大小是偶數(shù),則需要兩個中心元素的索引。 然后中位數(shù)等于這兩個元素的平均值。
計算這兩種情況索引值公式(“size” 是數(shù)組中的元素數(shù)量):
尺寸為奇數(shù)
????Index = size / 2
尺寸為偶數(shù)
?????Index1 = size / 2 – 1; Index2 = size / 2
在我們的示例中,如下所示:
hs1 = (1 + 3) / 2 = 2
hs2 = (1 + 8) / 2 = 4.5
hs3 = (3 + 8) / 2 = 5.5
????????排序 2, 4.5, 5.5
均值 = 4.5
現(xiàn)在我們繼續(xù)討論偏差。 我們需要找到原始時間序列的絕對值,與其平均值之間的中位數(shù)。
d1 = abs(1 – 4,5) = 3.5
d2 = abs(3 – 4,5) = 1.5
d3 = abs(8 – 4,5) = 3.5
????????排序 3.5, 1.5, 3.5
偏離 = 3.5
通道 1–8 的下限和上限
比較經(jīng)典和升級的指標(biāo)版本
我們來比較這些方式。 經(jīng)由正常計算,時間序列的最小值和最大值超出了均值 +/- 偏差。 在強健估算的情況下,原始序列的所有值都符合這些邊界。 這三種方式的差異是顯而易見的,但這僅是我們的示例。 現(xiàn)在我們看看不同的計算方法在實際數(shù)據(jù)上的表現(xiàn)。 我們將這三種算法作為單獨的指標(biāo)來實現(xiàn)。 這也將令我們能更了解計算每個選項的特點。
該指標(biāo)的出現(xiàn)在很大程度上取決于兩個變量 — 應(yīng)用的價格常數(shù)及其周期。 在 MQL5 里,價格常量可在定義指標(biāo)屬性時設(shè)置。
在 MQL4 里,我將使用單獨的函數(shù)。
指標(biāo)周期顯示計算中采用的價格讀數(shù)數(shù)量。
變量值應(yīng)至少為三。 請記住,在周期較小的情況下,可能會得到不正確(過陡峭)的值。
經(jīng)典 CCI 版本在第?i?根柱線上的計算如下。 首先,找到樣本均值。
現(xiàn)在是計算絕對偏差均值的時候了。
如果絕對偏差均值大于零,則指標(biāo)等于:
采用標(biāo)準(zhǔn)偏差的指標(biāo)版本計算如下。 首先,我們需要找到價格的總和,及其平方。
現(xiàn)在我們需要找到計算指標(biāo)所需的分母。
如果分母大于零,則結(jié)果如下:
最后,我們研究采用強健方法進行的計算。 首先,我們需要準(zhǔn)備兩個數(shù)組來存儲中間結(jié)果。 一個數(shù)組存儲半和值,而另一個數(shù)組則存儲絕對差值。
首先,準(zhǔn)備半和值數(shù)組,留待進一步備用。 為此,我們來定義它的大小。
現(xiàn)在,我們找到數(shù)組中心元素的索引。 出于通用性緣故,我將使用兩個索引。 如果大小是奇數(shù),則這些索引將相互匹配,否則保持不同。
然后,準(zhǔn)備?diff?數(shù)組。 其大小與指標(biāo)周期一致。 元素索引與前一種情況相同。
現(xiàn)在是開始計算指標(biāo)值的時候了。 我們需要一個額外的計數(shù)器,方便用半和值來填充數(shù)組。
填充數(shù)組后,應(yīng)該對其進行排序。 來自數(shù)組中心的值應(yīng)用作均值的估值。
在下一階段,查找標(biāo)準(zhǔn)偏差的強健估值。
如果標(biāo)準(zhǔn)偏差大于零,則指標(biāo)值為:
現(xiàn)在我們可以比較不同版本的指標(biāo)的行為。 在某些情況下,指標(biāo)看起來非常相似。

但也有一些區(qū)域的差異非常明顯。

比較指標(biāo)的小型智能系統(tǒng)
視覺比較很主觀,可能會導(dǎo)致錯誤的結(jié)論。 我們的結(jié)論需要更可靠的基礎(chǔ)。 為了評估所有指標(biāo)版本,我們編寫一個簡單的智能系統(tǒng)。 我們?yōu)樗峙湎嗤拈_盤和收盤規(guī)則,并比較結(jié)果。 我將采用以下規(guī)則 — 穿過給定的水平面,則在一個方向開倉;在相反的方向平倉(如果有的話)。
EA 參數(shù):
TypeInd?- 指標(biāo)類型(經(jīng)典、方形、現(xiàn)代)
iPeriod?- 指標(biāo)周期
iPrice?- 指標(biāo)價格
Level?- 欲跟蹤其交叉的級別。 其值 150 對應(yīng)于經(jīng)典 CCI 中的 100 級。
為了加快測試速度,指標(biāo)計算算法已移動到 EA 當(dāng)中。 指標(biāo)值在新柱線開盤時計算。 如果指標(biāo)值向上穿過負級別值,則開多頭倉位。 與此同時,空頭持倉平倉。 如果指標(biāo)值向下穿過正級別值,則開空頭倉位(多頭持倉平倉)。
測試參數(shù):
EURUSD 貨幣對
H1 時間幀
時間區(qū)間 – 2021 全年
周期 = 14
價格類型 = PRICE_TYPICAL
級別 = 150
所有三種情況的余額曲線選項如下所示。
TypeInd = 經(jīng)典

TypeInd = 方形

正如我們所見,應(yīng)用標(biāo)準(zhǔn)差導(dǎo)致交易次數(shù)減少,隨后大額虧損減少。
TypeInd = 現(xiàn)代

采用強健估算增加了交易次數(shù),而大幅虧損的次數(shù)則進一步減少。 對于該指標(biāo)版本來說這是一個很大的優(yōu)勢。
無論如何,在所有情況下,開倉和平倉規(guī)則都需要認(rèn)真改進。
用于評估趨勢的指標(biāo)修改
在仔細觀察 CCI 指標(biāo)(任何版本)的同時,我有了一個驚人的發(fā)現(xiàn) — 它即可以取正值,也可以取負值。 我不知道這是否值得諾貝爾獎,但?MetaQuotes 有限公司?應(yīng)該設(shè)立自己的獎項。 我理應(yīng)獲得該獎項。 但開個玩笑就夠了。
正指標(biāo)值與上升趨勢相關(guān),而負指標(biāo)值與下降趨勢相關(guān)。 我們來更詳細地探討一下這個問題。 新指標(biāo)的總體思路如下:我們總結(jié)了從趨勢開始到結(jié)束的 CCI 指標(biāo)值。 當(dāng)然,我們將把這個走勢與均值進行比較。 以這種方式,我們就能夠評估趨勢走勢的持續(xù)時間及其強度。
采用強健估算的計算版本作為基礎(chǔ)。 唯一不同的是,我們將在 CCI 指標(biāo)值超過零軸后,對其總和進行累加。 此累計額的數(shù)值將用作輸出。 上升趨勢和下降趨勢的平均數(shù)額將單獨計算,以便進行比較。 該指標(biāo)的總覽圖如下所示。

依據(jù)這個指標(biāo),我們可以評估趨勢的開始、結(jié)束和強度。 基于這個指標(biāo)的最簡單策略可能是這樣的 — 在趨勢完成時,如果趨勢高于平均值(指標(biāo)越過了相應(yīng)的級別),我們可以預(yù)期價格會朝相反的方向移動。
結(jié)束語
正如我們所見,重新審視技術(shù)指標(biāo)可能非常有用。 沒有一個指標(biāo)是最終版本 — 總是有可能針對具體策略進行細化和修改。 附帶文件:
mCCI?— 三種 CCI 版本的指標(biāo)
EA CCI?— 比較不同 CCI 版本的交易 EA
tCCI?— 計算累計趨勢量的指標(biāo)。