的反向交易:震蕩行情均值回歸量化策略)
很多人學(xué)量化一開始總喜歡追各種花哨的機器學(xué)習(xí)模型仿佛不用上神經(jīng)網(wǎng)絡(luò)就不好意思開口。但真正在實戰(zhàn)中活下來的系統(tǒng)邏輯反而樸素到有點無聊。今天要聊的這個策略名字聽起來相對小眾但背后的思想非常經(jīng)典量化策略基于波動率范圍指標(biāo)的反向交易。說白了就是價格漲過頭了去空跌過頭了去多賺的是價格回歸中樞的錢。前提只有一個——市場得處于震蕩狀態(tài)而震蕩恰恰是大多數(shù)品種在一大半時間里的常態(tài)。這個策略適合正在研究均值回歸、想開發(fā)自己第一個日間或日內(nèi)策略的人也適合被趨勢策略來回打臉、想換個思路的玩家。我會把指標(biāo)的選型、信號規(guī)則、倉位計算、回測和排雷全部講透盡量讓你看完就能動手寫第一版。1. 先搞清楚反向交易賺的到底是誰的錢策略邏輯聽起來簡單但“簡單”和“能賺錢”是兩碼事。動手寫代碼之前必須先回答一個問題這個策略的Alpha從哪來或者說它賺的是誰的錢1.1 市場價格的大部分時間都在區(qū)間里來回震蕩把任意一個交易活躍的品種拉出日線圖你會發(fā)現(xiàn)一個很直觀的現(xiàn)象真正波瀾壯闊的單邊趨勢在整個交易時間里的占比其實很小可能不到三成。剩下七成時間價格都在某個區(qū)間里來回擺動高不過某個上沿低不過某個下沿。這不是巧合而是市場參與者的行為決定的。大部分交易者尤其是中低頻的人工交易者并不具備持續(xù)推動價格形成單邊趨勢的能力。多數(shù)時候價格只是在消化各種信息、噪聲和情緒圍繞一個動態(tài)均衡位置上下波動。趨勢行情需要大量新增資金持續(xù)進場這種狀態(tài)是可遇不可求的而震蕩更像是市場的默認狀態(tài)。所以當(dāng)一個策略專門在震蕩行情里做反轉(zhuǎn)它面對的機會窗口遠比想象中多。反過來看那些追漲殺跌的新手其實就是在震蕩區(qū)間上沿追多、在下沿殺跌一次次把虧損送出來。量化反轉(zhuǎn)策略本質(zhì)上就是系統(tǒng)性地收割這些“情緒化交易”產(chǎn)生的錯誤定價。1.2 “過度反應(yīng)”才是反向策略的利潤來源那錯誤定價是怎么形成的核心就兩個字過沖。市場每天有大量交易并不是所有交易者都在理性計算價格。看到一根大陽線就沖動追進去的、看到突發(fā)的新聞立刻恐慌拋售的、還有一部分程序化策略在突破瞬間加速助漲的這些行為都會讓價格在短時間內(nèi)沖過頭。一旦沖過頭后面沒有足夠的買盤或賣盤接續(xù)價格就會像被拉長的橡皮筋一樣回彈到原來的位置。反向交易吃到的就是這段回彈利潤。注意這里有個重要前提價格沖過頭不一定總會被糾正有時候確實會開啟一段新趨勢。所以反向交易賺的并不是“所有突破的錢”而是“大部分無效突破的錢”。這個概率優(yōu)勢能不能成立取決于兩件事一是市場環(huán)境是否適合做反轉(zhuǎn)二是你判斷“過頭”的標(biāo)準到底靠不靠譜。判斷“過頭”的標(biāo)準就是我們說的波動率范圍指標(biāo)。它不需要你來主觀猜“漲太多了吧”而是用歷史數(shù)據(jù)算出一個動態(tài)邊界告訴你在當(dāng)前波動率水平下價格偏離均值到這個程度已經(jīng)從統(tǒng)計上算是一個小概率事件了。價格繼續(xù)偏離的概率變小回歸的概率變大這就是進場依據(jù)。1.3 波動率范圍指標(biāo)究竟解決了什么問題如果你完全不用波動率范圍指標(biāo)也可以做反轉(zhuǎn)比如畫一條水平支撐壓力位看到價格碰到支撐就做多碰到壓力就做空。但水平區(qū)間的最大問題是價格的重心一直在移動一個曾經(jīng)有效的支撐位在幾個月后就完全失效了。波動率范圍指標(biāo)的核心價值在于它是動態(tài)的。它跟著價格的最新均值走同時根據(jù)最新的波動率水平自動調(diào)整通道寬窄。價格劇烈波動時通道變寬價格平靜時通道收窄。用這種動態(tài)通道來定義“偏離合理區(qū)間”比固定價格的支撐壓力位靠譜得多。一句話總結(jié)波動率范圍指標(biāo)解決的是“用當(dāng)前的市場波動來動態(tài)刻畫價格均衡區(qū)間”的問題。這就是整個策略的地基。2. 波動率范圍指標(biāo)的選型與參數(shù)理解指標(biāo)選型是大多數(shù)新手最含糊的環(huán)節(jié)。很多人看到別人用布林帶自己也跟著用卻不知道布林帶、ATR通道、唐奇安通道這些看似差不多的指標(biāo)背后邏輯其實差得很遠。2.1 布林帶、ATR通道、Keltner通道、唐奇安通道橫評市面上常見的通道指標(biāo)大概有四類布林帶、ATR通道、Keltner通道、唐奇安通道。它們都能畫出上下軌但口徑完全不同。我直接用一個表格把它們的核心差異列出來指標(biāo)中軌定義通道寬度來源對波動率的反映方式適合的場景布林帶N周期均線通常簡單均線k倍標(biāo)準差基于價格偏離均值的離散程度均值回歸、波動率爆發(fā)識別ATR通道N周期均線可換成EMAk倍平均真實波幅直接反映每根K線的平均波動幅度通道突破、移動止損Keltner通道指數(shù)均線k倍ATR通道更平滑假突破較少趨勢過濾、波動率壓縮唐奇安通道N周期最高價與最低價無中軌不直接反映波動率反映極值范圍趨勢突破、海龜類系統(tǒng)重點說布林帶和ATR通道因為這兩個才是均值回歸策略里最常用的。布林帶用標(biāo)準差衡量波動率背后自帶一個統(tǒng)計解釋假設(shè)價格近似正態(tài)分布那么當(dāng)k2時理論上約95%的價格會落在通道以內(nèi)。價格突破上軌屬于小概率事件。小概率事件發(fā)生要么是新的基本面驅(qū)動要么是情緒過沖。對反轉(zhuǎn)策略來說我們賭后者的概率更大。ATR通道則更貼近交易者的直覺。ATR本身計算的是過去一段時間的平均真實波幅K線有多大波動通道寬度就按這個幅度擴張。你用2倍ATR做通道意思就是“我愿意等價格偏離均衡位置兩個平均波幅再動手”。ATR的好處是它對劇烈行情的反應(yīng)更平滑通道不會像布林帶那樣因為單根極端K線被突然拉得過寬。我個人的結(jié)論是如果你想做基于波動率范圍的均值回歸首選布林帶做研究和原型驗證因為它有統(tǒng)計框架到了實盤優(yōu)化階段再換成“EMA中軌 k倍ATR”這種改良通道因為它對極端值的處理更穩(wěn)健。唐奇安通道雖然也能畫通道但它本質(zhì)上是個極值突破指標(biāo)和波動率關(guān)系不大做反轉(zhuǎn)策略時我一般不用。2.2 通道參數(shù)的統(tǒng)計含義與實戰(zhàn)選擇選好指標(biāo)類型之后參數(shù)怎么定窗口N和倍數(shù)k這兩個參數(shù)很多人直接用默認值但并不知道它們到底在調(diào)節(jié)什么。窗口N決定了你定義“均衡價格”的時間尺度。N20意味著你認為過去20根K線的平均價格是當(dāng)前的價格中樞N60則把均衡尺度拉長到過去60根K線。窗口越短中軌越貼價格信號觸發(fā)頻繁但噪聲也多窗口越長中軌越平滑信號更少但每個信號的質(zhì)量更值得關(guān)注。做日內(nèi)15分鐘級別我一般從N30起步做日線級別N30到60更合理。倍數(shù)k決定了通道的寬度也就是你愿意等多大的偏離才動手。k1.5價格稍微沖一沖就觸發(fā)了信號多但單筆空間小k3.0信號很稀疏但一旦觸發(fā)往往意味著價格已經(jīng)脫離了很遠回歸空間也大。選擇k不是一個純粹的統(tǒng)計學(xué)問題它同時決定了策略的交易頻率和單筆盈虧比。k值越小交易越接近噪聲交易手續(xù)費和滑點的吞噬效應(yīng)越明顯k值越大空倉期越長資金利用效率下降。我的習(xí)慣是先在回測里跑一版k從1.5到3.0的敏感性曲線。如果收益率曲線整體平緩沒有出現(xiàn)明顯的尖峰那說明這個策略邏輯本身是穩(wěn)健的參數(shù)只是微調(diào)如果某個k值下收益特別突出換相鄰的k值就大幅虧損那基本可以斷定是過擬合這個結(jié)果不能用。需要注意的是ATR本身的周期也值得單獨調(diào)。ATR周期短比如7對近期波動的反應(yīng)更快通道變化更敏感ATR周期長比如20通道更平滑但信號會有滯后。我常用ATR14這也是很多交易軟件的默認值但其實14并沒有特別神秘的地方只是一個兼顧響應(yīng)速度和穩(wěn)定性的折中。3. 從信號到訂單策略規(guī)則全拆解指標(biāo)選完之后大家都以為策略就寫完了突破上軌做空跌破下軌做多回到中軌平倉。這個骨架沒錯但如果你想靠這三行邏輯去實盤大概率會被打得懷疑人生。完整策略必須把入場、出場、過濾、倉位全部串起來。3.1 入場觸發(fā)別用一根K線的收盤價決定生死最樸素的入場條件就是“收盤價突破上軌就做空”。但這里有個隱患單根K線的收盤價是全天博弈的結(jié)果尾盤幾分鐘的異動就會讓你的信號失效。往往真實情況是K線收盤價剛碰到上軌你跟著開空下一根K線立刻高開后繼續(xù)拉漲把你止損掃掉然后才開始回落。所以我堅決不用“裸突破”作為唯一入場條件。我習(xí)慣在入場條件上疊加一個確認項通常是量能或振幅確認。用振幅確認的話條件是這樣的收盤價突破通道上軌做空或跌破通道下軌做多同時當(dāng)根K線的振幅大于120%的當(dāng)前ATR這個第二個條件本質(zhì)上是在驗證突破的有效性。如果一根K線只是收盤價勉強越過上軌但全天振幅很小說明市場并沒有真正發(fā)力這個突破很可能是虛破。而一根振幅明顯超過ATR的K線至少說明資金在這個位置發(fā)生了實質(zhì)性的博弈反轉(zhuǎn)的概率會高一些。代價當(dāng)然有一部分快速行情會因為振幅確認不足而被錯過。這是合理的取舍。量化交易里沒有既能抓住所有行情、又能避開所有假信號的辦法你只能選擇把某一類特征做純。3.2 出場設(shè)計回歸中軌只是底線不是最優(yōu)解出場邏輯決定盈虧結(jié)構(gòu)重要性不亞于入場。三種主流方式各有各的道理。第一種目標(biāo)價平倉價格回到中軌附近就平倉。最簡單邏輯上完全匹配均值回歸。它的缺點是很多時候價格從中軌繼續(xù)向反向通道運行你會看著利潤從手里溜走。第二種固定ATR止盈止損入場后直接掛止盈單和止損單比如止盈1.5倍ATR、止損2倍ATR。這種方式的盈虧比天然不錯勝率也不會太低適合不想頻繁盯盤的人。第三種動態(tài)管理出場價格回歸通道內(nèi)部后先把止損移到成本價附近浮盈超過1倍ATR之后再把目標(biāo)放寬到反向通道內(nèi)側(cè)讓利潤盡量奔跑。我個人推薦第三種思路但很多人一開始駕馭不了因為動態(tài)管理會引入大量主觀判斷。我自己的處理方式是把規(guī)則量化持倉期間只要收盤價回到中軌以內(nèi)就把止損修改為入場價只要浮盈達到1倍ATR就把止盈目標(biāo)從“中軌”修改為“對側(cè)通道邊界”。這樣一來動態(tài)出場也變成了一條清晰可執(zhí)行、可回測的規(guī)則。3.3 趨勢過濾與波動率狀態(tài)過濾把最危險行情擋在門外反轉(zhuǎn)策略最怕單邊趨勢這幾乎是所有做均值回歸的人的共識。趨勢過濾不是可選項而是必選項。我常用的過濾器有三層按優(yōu)先級排序。第一層大周期均線方向過濾。取一根200周期的均線價格在均線上方時只允許做空信號生效價格在均線下方時只允許做多信號生效。這個過濾極其粗暴但效果立竿見影。它本質(zhì)上是假設(shè)大周期結(jié)構(gòu)還在空頭里所有上漲突破大概率是反彈大周期結(jié)構(gòu)還在多頭里所有下跌大概率是回踩。第二層波動率狀態(tài)過濾。計算當(dāng)前ATR在過去120根K線里的百分位。如果當(dāng)前ATR已經(jīng)超過歷史85%分位意味著市場正在極端波動當(dāng)中這時候做反轉(zhuǎn)跟拿手接飛刀差不多。策略暫停新開倉等波動率收縮回來。第三層ADX斷勢過濾。ADX超過25一般意味著趨勢動能較強不適合反轉(zhuǎn)ADX低于20則處于震蕩狀態(tài)適合反向開倉。我用ADX25作為前置條件過濾掉趨勢行情。這三層不用全上。每加一層過濾就會減少一堆信號過濾加多了很容易過擬合。我的建議是先用第一層看看回撤變化不夠理想再加第二層第三層留作最后微調(diào)。每次只動一個變量你才能準確判斷哪個條件在起作用。3.4 倉位計算用ATR動態(tài)匹配每次風(fēng)險倉位管理是反向交易的隱形勝負手。因為反轉(zhuǎn)策略的止損距離通常不大如果倉位不懂控制連續(xù)幾筆止損就能把賬戶打骨折。我習(xí)慣用固定風(fēng)險比例的倉位計算公式開倉單位數(shù) 賬戶權(quán)益 × 單筆風(fēng)險比例÷入場價 ? 止損價注意這里的分母“入場價?止損價”不是拍腦袋的固定點數(shù)而是用ATR動態(tài)算出來的。這套思路的關(guān)鍵在于市場波動大的時候止損距離自動變大倉位自動變小市場波動小的時候止損距離變小倉位自動變大。倉位與波動率匹配回撤曲線才能保持相對平整。舉一個完整的計算例子賬戶權(quán)益100萬單筆風(fēng)險設(shè)定2%也就是單筆虧損上限2000當(dāng)前入場做空價位4100ATR(14)80止損設(shè)置在入場價上方2倍ATR也就是4260止損距離 160套用公式2000 ÷ 160 12.5。也就是說按當(dāng)前單位合約面值來算這單最多開12到13個單位。如果合約乘數(shù)更大再按實際乘數(shù)換算。很多人會把“風(fēng)險2%”理解成“倉位2%”這是兩碼事。風(fēng)險2%指的是如果這單打止損賬戶會虧損2%倉位可能是20%、30%完全由止損距離決定。用ATR算出來的止損距離本質(zhì)上就是給倉位裝了一個自動調(diào)節(jié)器。3.5 可運行的第一版策略代碼骨架理論講太多容易飄直接上一段精簡但完整的代碼骨架。這一段比較偏教學(xué)實現(xiàn)方便你自己跑回測實盤時還要補數(shù)據(jù)清洗和交易撮合細節(jié)。import numpy as np import pandas as pd def add_indicators(df, mid_window30, k2.5, atr_period14, trend_window200): df df.copy() df[mid] df[close].ewm(spanmid_window, adjustFalse).mean() tr np.maximum( df[high] - df[low], np.maximum( abs(df[high] - df[close].shift(1)), abs(df[low] - df[close].shift(1)) ) ) df[atr] tr.rolling(atr_period).mean() df[upper] df[mid] k * df[atr] df[lower] df[mid] - k * df[atr] df[trend] df[close].rolling(trend_window).mean() return df def generate_signals(df): df df.copy() df[signal] 0 df[entry] np.nan for i in range(1, len(df)): close df[close].iloc[i] upper df[upper].iloc[i] lower df[lower].iloc[i] mid df[mid].iloc[i] trend df[trend].iloc[i] atr df[atr].iloc[i] bar_range df[high].iloc[i] - df[low].iloc[i] prev_signal df[signal].iloc[i - 1] if prev_signal 0: # 價格站在長期均線上方向上突破上軌且有振幅確認做空 if close trend and close upper and bar_range 1.2 * atr: df.loc[df.index[i], signal] -1 df.loc[df.index[i], entry] close # 價格站在長期均線下方向下跌破下軌且有振幅確認做多 elif close trend and close lower and bar_range 1.2 * atr: df.loc[df.index[i], signal] 1 df.loc[df.index[i], entry] close elif prev_signal -1: entry df[entry].iloc[i - 1] # 空單平倉回歸中軌或觸發(fā)2倍ATR止損 if close mid or close entry 2 * atr: df.loc[df.index[i], signal] 0 elif prev_signal 1: entry df[entry].iloc[i - 1] # 多單平倉回歸中軌或觸發(fā)2倍ATR止損 if close mid or close entry - 2 * atr: df.loc[df.index[i], signal] 0 return df這里有個特別容易踩的坑出場邏輯里用到了入場價但我只是用df[entry]粗略記錄了一下。實際接回測框架時務(wù)必要把真正的成交價、持倉數(shù)量和開倉時間記錄下來否則ATR止損條件就是紙上談兵。再一個提示循環(huán)方式在幾萬根K線上跑還能接受如果放大到分鐘級數(shù)據(jù)建議改造成向量化邏輯性能會快得多。4. 回測的坑比策略本身還多很多策略不是死在邏輯上而是死在回測的樂觀假設(shè)里。反向策略尤其如此交易頻次高、單筆利潤薄任何一個成本漏洞都會讓回測曲線和實盤曲線差出一個銀河系。4.1 成本模型手續(xù)費、滑點、沖擊成本一個都不能少所有回測第一步先建立成本模型。很多初學(xué)者用“零成本”跑出漂亮曲線我看著就頭疼。反向策略持有時間短進出頻繁成本占比高得嚇人。假設(shè)單向費率是萬幾再加上滑點一筆來回交易總成本可能達到0.1%甚至更高。如果單筆盈利平均只有0.3%成本就吃掉了三分之一的利潤。這還只是普通市場條件下的估算一旦品種流動性不夠好滑點更大直接就是兩倍甚至三倍的影響。我的做法是在回測里至少加入三項成本手續(xù)費按成交金額比例計簡化處理時單邊萬5到千1之間滑點保守假設(shè)每次入場和出場價格都往不利方向偏移0.1%到0.2%沖擊成本如果單筆量很大再加小資金可以先忽略加了成本之后你再跑一遍同一組參數(shù)才能看到一個接近實盤的凈值曲線。如果加了成本之后曲線馬上就垮了那就不是參數(shù)的問題而是策略邏輯本身的單位毛利太薄根本不值得做。4.2 數(shù)據(jù)清洗與交易時段過濾數(shù)據(jù)問題往往比策略問題更隱蔽。免費行情數(shù)據(jù)經(jīng)常會缺K線尤其是盤中某段時間流動性稀薄的時候數(shù)據(jù)源可能直接不推送。缺K線直接影響滾動指標(biāo)的計算均線、ATR這些指標(biāo)在缺K線之后的第一根K線上會出現(xiàn)一個跳躍進而產(chǎn)生一個毫無意義的假信號。所以拿到數(shù)據(jù)之后第一步是用重采樣把時間軸補齊。日線數(shù)據(jù)看有沒有跳過自然日或節(jié)假日分鐘數(shù)據(jù)看有沒有盤中缺失時段。補不出來的就明確跳過不要讓策略引擎在不連續(xù)的數(shù)據(jù)上自作主張。另外很多品種并不是24小時都具備同樣的流動性和波動特征。我會在回測里加入時間窗口過濾比如只在主要交易時段允許開倉尾盤前幾分鐘不允許新建倉位。原因很簡單尾盤流動性衰減你的信號觸發(fā)了一根大K線但實際成交價可能遠不如信號價滑點會超出模型假設(shè)。4.3 樣本外驗證是唯一的免死金牌參數(shù)優(yōu)化本質(zhì)上是把參數(shù)往歷史數(shù)據(jù)上擬合。擬合得越好越容易過擬合。這不是嘲笑誰而是統(tǒng)計規(guī)律。關(guān)鍵是你如何驗證“這個參數(shù)是真正有效還是恰好擬合了這段歷史”。我要求自己至少做三種驗證中的一種。時間切分把數(shù)據(jù)按時間順序分成前70%和后30%。前段找參數(shù)后段做驗證。如果后段效果明顯變差說明參數(shù)很可能是過擬合的。滾動窗口驗證每固定一段窗口就重新優(yōu)化參數(shù)然后在下一樣本外區(qū)間驗證。這更貼近實戰(zhàn)因為實盤參數(shù)就應(yīng)該定期重新校準。多品種交叉驗證用幾個相關(guān)性低的品種分別回測。如果你在某品種上優(yōu)化的參數(shù)放到另一個品種上也還能跑出合理的表現(xiàn)說明策略邏輯具備普適性而不是撞上了特定行情結(jié)構(gòu)。我自己的流程是把三個一起用。先在一個品種的15分鐘線上做初版驗證再拿另一個相關(guān)性很低的品種交叉驗證最后換到日線級別做壓力測試。沒有走過這套流程的策略我默認它的漂亮收益曲線是運氣。4.4 績效指標(biāo)怎么看才有意義回測結(jié)果出來不能只看年化收益率。一個年化50%但最大回撤40%的策略放在實盤里大概率拿不住因為人的心理承受能力根本跟不上凈值波動。我重點看的指標(biāo)有四個年化收益率衡量賺錢能力但單獨看沒意義最大回撤衡量凈值從峰值跌下來的最大幅度這是風(fēng)險的第一刻度夏普比率年化超額收益除以收益波動率衡量單位風(fēng)險的回報卡瑪比率年化收益除以最大回撤我更看重這個因為回撤才是實盤中真正影響持倉體驗的東西勝率和盈虧比也會看但優(yōu)先級沒有前面幾個高。反轉(zhuǎn)策略天然勝率偏高、盈虧比偏低這是它的性格不必強行扭成趨勢策略的比例。只要卡瑪比率穩(wěn)定在2以上同時最大回撤控制在你能接受的范圍里這個策略就值得繼續(xù)優(yōu)化。5. 實戰(zhàn)排雷手冊與我的真實經(jīng)驗這一部分是最值錢的全是真金白銀買來的教訓(xùn)。策略邏輯、回測方法在教科書里都能找到但下面這些坑你只有自己踩過才會有體感。5.1 常見問題速查表現(xiàn)象可能原因排查方向回測很賺實盤虧成本模型太樂觀把手續(xù)費和滑點翻倍再跑一次驗證趨勢啟動時連續(xù)止損缺少趨勢過濾或過濾強度不夠加入長期均線方向過濾或ADX過濾信號太少長期空倉參數(shù)太保守、過濾器疊加過多降低k倍、縮短均線窗口、減少過濾層參數(shù)稍微一改結(jié)果劇烈變化過擬合信號只動一個參數(shù)觀察敏感性做樣本外驗證換個品種立刻失效策略和品種波動結(jié)構(gòu)不匹配做多品種交叉驗證找波動狀態(tài)穩(wěn)定的品種止損總被掃掉掃完就反彈止損距離小于市場噪聲幅度改用ATR動態(tài)止損止損至少1.5倍ATR這些情況里最值得警惕的是第一條。做反轉(zhuǎn)策略的人十個里有八個會栽在“回測收益很漂亮實盤一跑就縮水”的現(xiàn)象上。根源幾乎都是成本模型不真實而不是策略本身有問題。所以我的建議是任何策略開發(fā)的第一步不是優(yōu)化信號而是把成本模型做到足夠保守。5.2 連續(xù)止損的時候千萬別干蠢事反轉(zhuǎn)策略有一個很折磨人的階段市場從震蕩切換到趨勢的那一瞬間策略會反復(fù)逆勢開倉、反復(fù)止損。這不是策略壞了而是它的規(guī)則正在一個不利的市場環(huán)境里運行。但“知道”和“做到”是兩回事。連續(xù)虧損幾天之后人的情緒會告訴你把這個策略關(guān)掉或者把參數(shù)改掉。這時候最理性的動作其實是什么都不做讓規(guī)則繼續(xù)跑。前提是你提前設(shè)置了熔斷機制。我常用的熔斷規(guī)則有兩條。第一條是日內(nèi)最大虧損熔斷當(dāng)日虧損達到賬戶權(quán)益的某個比例比如3%當(dāng)天余下時間不再開新倉只處理已有持倉。第二條是連續(xù)止損熔斷連續(xù)三次止損后當(dāng)天暫停交易第二天再重新計數(shù)。這兩條寫進代碼里非常簡單但在實戰(zhàn)中能救命因為它強制你在最混亂的時刻停止操作防止情緒化手動干預(yù)把虧損放大。5.3 極端波動行情里的自我保護把“波動率范圍”這幾個字再拆開看一眼。既然策略是做波動率范圍的回歸那當(dāng)你本身處于波動率極端放大的環(huán)境里也就是做反轉(zhuǎn)最危險的時候。某天突然放量急跌或者急漲ATR在幾個周期內(nèi)快速放大但通道的擴寬是有滯后性的。第一根極端K線很容易直接穿透舊通道這時候如果你按信號機械做多或做空等于拿手去接飛刀。我前面提到過波動率狀態(tài)過濾這里再展開一點。我不只看絕對ATR值還看相對膨脹程度。計算公式很簡單波動率膨脹率 當(dāng)前ATR ÷ 過去120根K線ATR的中位數(shù)當(dāng)這個膨脹率超過2.0我直接暫停新開倉。原因很直白價格正在被一種非常強的動能推動均值回歸的統(tǒng)計基礎(chǔ)已經(jīng)被暫時破壞了。等波動率回落到正常水平再重新啟動策略。這個過濾器比單純依賴通道擴寬更安全因為它主動判斷當(dāng)前狀態(tài)而不是等模型被動適應(yīng)。5.4 幾條用真金白銀換來的心得第一參數(shù)別用網(wǎng)格搜索硬掃。我見過有人把k從1.0掃到4.0步長0.1最后選出那個收益最高的尖峰參數(shù)然后實盤一塌糊涂。正確的做法是先固定中軌窗口只掃k看年化收益曲線是不是平緩的。平緩才是參數(shù)穩(wěn)健的表現(xiàn)尖峰就是過擬合。第二純布林帶和改良ATR通道之間我最終選了后者。布林帶用標(biāo)準差標(biāo)準差對極端值的反應(yīng)會把通道拉得很寬通道變寬意味著信號滯后。而ATR對極端值的反應(yīng)相對溫和通道擴展更平滑反轉(zhuǎn)信號能早一步觸發(fā)?,F(xiàn)在我用的是“EMA中軌 k倍ATR”的組合你可以理解成布林帶的波動率改良版。第三實盤一定要記交易日志?;販y曲線再漂亮也不如自己實盤跑500筆記錄來得真實。我每筆實盤都會記錄信號編號、入場原因、出場原因、盈虧、當(dāng)時的ATR和通道位置。等樣本量積累多了翻日志復(fù)盤你會比看任何統(tǒng)計指標(biāo)都更了解自己的策略。很多策略缺陷都是在日志里突然看明白的。最后再提醒一個細節(jié)做日線級別的反向策略必須把隔夜跳空當(dāng)成成本的一部分算進去。日線反轉(zhuǎn)單往往持倉好幾天隔夜跳空一次可能就把你兩三筆的利潤吃光。如果你的策略主要在日線級別跑建議先統(tǒng)計一下歷史隔夜跳空幅度再決定這個策略到底適不適合你。別讓執(zhí)行環(huán)節(jié)成為整個系統(tǒng)里最大的黑洞。