經(jīng)指標(biāo)公式從入門到避坑:未來(lái)函數(shù)、信號(hào)漂移與參數(shù)優(yōu)化詳解)
很多朋友拿到指標(biāo)公式的第一反應(yīng)是把參數(shù)一改跑一遍回測(cè)看收益曲線紅不紅。其實(shí)這個(gè)順序反了。我自己在文華財(cái)經(jīng)軟件里寫指標(biāo)寫了很長(zhǎng)時(shí)間從一開(kāi)始到處找別人編好的公式到后來(lái)自己動(dòng)手改、自己寫最大的體會(huì)是指標(biāo)公式不是用來(lái)“預(yù)測(cè)”行情的它是把交易規(guī)則變成一種可以被驗(yàn)證、被重復(fù)、被復(fù)盤的東西。這篇文章我就想把這些體會(huì)寫出來(lái)聊聊文華財(cái)經(jīng)指標(biāo)公式到底該怎么學(xué)、怎么寫、怎么避開(kāi)那些最容易踩的坑。先說(shuō)一下這篇文章適合誰(shuí)。如果你是剛剛接觸文華財(cái)經(jīng)軟件還分不清“指標(biāo)”和“模型”的區(qū)別或者你已經(jīng)會(huì)套用別人的公式但一改參數(shù)就出問(wèn)題又或者你想把自己腦子里的交易想法變成一段能跑、能回測(cè)的代碼——這篇文章應(yīng)該都能給你一些有參考價(jià)值的東西。我會(huì)從最基礎(chǔ)的概念講起一直說(shuō)到信號(hào)漂移、參數(shù)優(yōu)化這些進(jìn)階問(wèn)題全程用實(shí)際案例說(shuō)話。1. 指標(biāo)公式和手動(dòng)畫線到底差在哪先給公式正名很多人覺(jué)得指標(biāo)公式是“高深”的東西好像有了一個(gè)公式就拿到了賺錢的密碼。我最早也有這種想法。但用久了你會(huì)發(fā)現(xiàn)行情軟件里那些指標(biāo)公式本質(zhì)上和你拿筆在圖表上畫趨勢(shì)線、標(biāo)支撐壓力位沒(méi)有根本區(qū)別——都是對(duì)過(guò)去價(jià)格走勢(shì)的一種加工和展示。只不過(guò)公式把這種加工變成了確定性的規(guī)則同樣的數(shù)據(jù)進(jìn)來(lái)輸出永遠(yuǎn)是一致的不會(huì)因?yàn)槟憧幢P的心情而變化。1.1 公式能幫你確認(rèn)什么不能幫你決定什么文華財(cái)經(jīng)的指標(biāo)公式能做的事情大概可以分成三類。第一類是行情可視化。比如最常見(jiàn)的均線、MACD、布林帶它們把從開(kāi)盤價(jià)、收盤價(jià)、最高最低價(jià)和成交量里算出來(lái)的結(jié)果畫在圖表上讓趨勢(shì)和位置變得更直觀。這一類的核心是“看”不直接產(chǎn)生買賣信號(hào)。第二類是信號(hào)提示。比如均線金叉死叉、突破N日高點(diǎn)、量能突變公式在滿足條件的那根K線位置上做一個(gè)標(biāo)記告訴你“這里出現(xiàn)了信號(hào)”。這一類的核心是“提醒”它能克服人盯盤時(shí)注意力不集中的問(wèn)題也能夠保證你每次發(fā)現(xiàn)信號(hào)的規(guī)則完全一致。第三類是模型回測(cè)。這相當(dāng)于把第二類信號(hào)再往前推一步依據(jù)信號(hào)給出開(kāi)倉(cāng)方向、開(kāi)倉(cāng)價(jià)格、止損止盈條件然后在歷史K線上完整地模擬執(zhí)行一遍最后輸出總收益、勝率、最大回撤、盈利因子這些統(tǒng)計(jì)量。我自己見(jiàn)過(guò)不少把指標(biāo)公式當(dāng)成“圣杯”的朋友。他們希望公式直接告訴他們明天漲還是跌或者下一個(gè)買點(diǎn)在哪里。實(shí)話說(shuō)文華財(cái)經(jīng)指標(biāo)公式做不到任何基于歷史數(shù)據(jù)的公式都做不到。它能做的是當(dāng)某一種你定義好的形態(tài)出現(xiàn)時(shí)第一時(shí)間告訴你并且告訴你這套規(guī)則放到過(guò)去十年里大概是什么樣的表現(xiàn)。真正決定盈虧的是你怎么定義規(guī)則、怎么控制風(fēng)險(xiǎn)而不是公式本身有多復(fù)雜。1.2 文華里“指標(biāo)”和“模型”的兩個(gè)入口在文華財(cái)經(jīng)系列軟件里寫公式有兩個(gè)入口新手常常搞混。一個(gè)是“指標(biāo)”一個(gè)是“模型”它們對(duì)應(yīng)的文件夾不同用途也不同。指標(biāo)公式主要用來(lái)畫線、做可視化代碼寫完后你在K線圖下方能看到它對(duì)應(yīng)的指標(biāo)線或者買賣點(diǎn)標(biāo)記。它的輸出偏重“顯示”就算里面寫了開(kāi)倉(cāng)平倉(cāng)語(yǔ)句也不會(huì)真正去模擬資金變化。模型則不一樣它更偏重信號(hào)執(zhí)行邏輯用來(lái)掛到K線圖上做歷史回測(cè)、參數(shù)優(yōu)化甚至配合程序化交易。你可以簡(jiǎn)單理解成指標(biāo)是“為了看”模型是“為了做”。在軟件里新建公式的時(shí)候注意先看清楚建到“指標(biāo)”目錄還是“模型”目錄。我見(jiàn)過(guò)有朋友把一段含BK買開(kāi)、SK賣開(kāi)語(yǔ)句的代碼建成了指標(biāo)結(jié)果編譯能通過(guò)但信號(hào)怎么都不對(duì)其實(shí)就是放錯(cuò)了位置。從這里開(kāi)始后面的語(yǔ)法學(xué)習(xí)才有意義。2. 動(dòng)筆之前先翻譯思路把交易規(guī)則拆成公式能識(shí)別的零件我見(jiàn)過(guò)太多人拿到公式編輯器就急著敲代碼。這樣做的結(jié)果一般是改了幾行編譯報(bào)錯(cuò)再改幾行回測(cè)出來(lái)一團(tuán)糟最后干脆放棄。問(wèn)題不在于代碼能力而在于思路沒(méi)有翻譯成公式能識(shí)別的語(yǔ)言。寫指標(biāo)公式和寫文章一樣列大綱永遠(yuǎn)比動(dòng)筆重要。2.1 從想法到條件規(guī)則的三個(gè)層次一條真實(shí)的交易思路至少包含三個(gè)層次的信息。第一層是“入場(chǎng)”你要明確在什么樣的條件下進(jìn)場(chǎng)做多還是做空。第二層是“離場(chǎng)”離場(chǎng)不一定是反手信號(hào)可以是止盈、止損、時(shí)間止損或者趨勢(shì)破壞。第三層是“過(guò)濾”也就是在入場(chǎng)信號(hào)成立時(shí)什么情況下你不進(jìn)場(chǎng)比如震蕩行情里避開(kāi)突破信號(hào)或者成交量過(guò)大時(shí)不追單。我建議第一步先在紙上把這個(gè)邏輯寫清楚。舉個(gè)例子你可能想做一個(gè)“均線交叉量能放大”的突破策略那么邏輯可以寫成這樣入場(chǎng)做多條件5日均線上穿20日均線且當(dāng)前成交量大于5日平均成交量。離場(chǎng)條件5日均線下穿20日均線或者收盤價(jià)跌破最近10日最低價(jià)??雌饋?lái)很簡(jiǎn)單但翻譯成公式的時(shí)候要處理很多細(xì)節(jié)“上穿”在公式里怎么定義是前一根K線MA5小于MA20、當(dāng)前K線MA5大于MA20還是只要當(dāng)前K線MA5等于或高于MA20就算“成交量大于5日平均”里的5日均量是包含當(dāng)前根K線還是不包含這些細(xì)節(jié)不決定你賺不賺錢但決定你的公式結(jié)果是否真正反映你的思路。2.2 一個(gè)具體的思路分批止盈指標(biāo)的設(shè)計(jì)過(guò)程我拿自己寫過(guò)的一個(gè)“移動(dòng)止損分批止盈”模型舉例。當(dāng)時(shí)我的交易思路是這樣的單筆倉(cāng)位分成兩部分第一部分在價(jià)格達(dá)到1倍初始風(fēng)險(xiǎn)時(shí)平倉(cāng)第二部分用均線跟蹤止損直到趨勢(shì)破壞才離場(chǎng)。翻譯成公式語(yǔ)言時(shí)我需要定義的東西包括入場(chǎng)信號(hào)用哪個(gè)條件開(kāi)倉(cāng)后的最高價(jià)怎么跟蹤記錄止盈閾值怎么計(jì)算以及第二部分的離場(chǎng)條件是什么。這里有個(gè)很關(guān)鍵的細(xì)節(jié)跟蹤止損需要用到“未來(lái)函數(shù)”以外的寫法也就是只能引用當(dāng)前K線之前的數(shù)據(jù)不能偷看后面的K線。我用文華財(cái)經(jīng)的麥語(yǔ)言大概寫了這樣一段核心邏輯示意MA5:MA(CLOSE,5); MA10:MA(CLOSE,10); 入場(chǎng)條件:CROSS(MA5,MA10); 跟蹤最高:HHV(HIGH,BARSLAST(入場(chǎng)條件)1); 止盈價(jià)位:入場(chǎng)價(jià)初始風(fēng)險(xiǎn)*1;上面這段只是思路展示。真正完整跑起來(lái)還要定義初始風(fēng)險(xiǎn)怎么計(jì)算、入場(chǎng)價(jià)怎么記錄、以及第二部分的離場(chǎng)怎么表達(dá)。把思路拆成這樣的“零件”之后你再去查函數(shù)、寫代碼效率會(huì)高很多而且出問(wèn)題時(shí)也容易定位。3. 麥語(yǔ)言里的幾個(gè)關(guān)鍵語(yǔ)法點(diǎn)我用一個(gè)分批止盈指標(biāo)來(lái)演示文華財(cái)經(jīng)系列軟件里的公式語(yǔ)言常被大家叫“麥語(yǔ)言”語(yǔ)法結(jié)構(gòu)不算復(fù)雜很多句子讀起來(lái)和自然語(yǔ)言差不多。但有幾個(gè)語(yǔ)法點(diǎn)新手階段容易繞不清楚我挑幾個(gè)最常踩的講。3.1 變量計(jì)算和高頻函數(shù)先弄懂“賦值”和“引用”麥語(yǔ)言里用“:”表示賦值。比如MA5:MA(CLOSE,5);意思是把5周期收盤價(jià)均線的值存到“MA5”這個(gè)變量里。后面你要引用它直接寫MA5就行。注意“:”和“”的區(qū)別“:”是賦值不會(huì)輸出到圖表“”在條件判斷里表示等于比較兩個(gè)值是否相等。常用函數(shù)里REF、HHV、LLV、MA、CROSS這幾個(gè)幾乎繞不開(kāi)。REF(X,N)表示取X變量在N個(gè)周期之前的值這個(gè)函數(shù)是寫信號(hào)判斷的基礎(chǔ)。比如要判斷“當(dāng)前收盤價(jià)創(chuàng)10日新高”正統(tǒng)寫法是創(chuàng)新高:CLOSEREF(HHV(HIGH,10),1);為什么不能直接寫CLOSEHHV(HIGH,10)因?yàn)镠HV(HIGH,10)包含了當(dāng)前K線的最高價(jià)那“創(chuàng)新高”就永遠(yuǎn)不可能在最高價(jià)那根K線上成立——這根K線本身就創(chuàng)造新高收盤價(jià)怎么可能大于自己的最高價(jià)這種細(xì)節(jié)就是新手最容易懵的地方。用REF往前推一根比較的才是“過(guò)去10根K線中的最高價(jià)”邏輯就對(duì)了。CROSS(A,B)表示A從小于B變成大于B也就是“上穿”。注意它要求的是前后兩個(gè)周期狀態(tài)的改變所以用它判斷金叉死叉比較標(biāo)準(zhǔn)比直接寫MA5MA10更能精確表達(dá)“剛剛發(fā)生穿越”。3.2 多條件組合和信號(hào)輸出AND、OR、NOT怎么配合復(fù)合條件用AND并且、OR或者、NOT取反連接。我見(jiàn)過(guò)有人把幾十個(gè)條件全部串在一起寫成一長(zhǎng)行一編譯就提示語(yǔ)法錯(cuò)誤。我建議分層寫先用:把中間變量拆開(kāi)再組合成信號(hào)條件。這樣可讀性強(qiáng)排查也方便。比如多頭共振:MA5MA10 AND MA10MA20; 金叉信號(hào):CROSS(MA5,MA20); 開(kāi)倉(cāng)信號(hào):金叉信號(hào) AND 多頭共振 AND VOLREF(HHV(VOL,5),1);這樣一段代碼每一行的含義都很清楚后面如果發(fā)現(xiàn)信號(hào)太多或者太少可以單獨(dú)查看“多頭共振”的賦值是否合理而不是在長(zhǎng)表達(dá)式里大海撈針。信號(hào)輸出的寫法也要注意。如果你希望信號(hào)在圖表上顯示成箭頭、標(biāo)記或者文字需要用DRAWICON、DRAWTEXT這類繪圖函數(shù)如果你希望模型語(yǔ)句直接觸發(fā)開(kāi)平倉(cāng)要用BK、SK、BP、SP這些頭寸語(yǔ)句。繪圖函數(shù)和頭寸語(yǔ)句的機(jī)制完全不同放在指標(biāo)里和模型里的行為也不一樣。我建議新手先分開(kāi)練習(xí)在指標(biāo)里只畫標(biāo)記確認(rèn)信號(hào)邏輯符合預(yù)期之后再?gòu)?fù)制到模型里加頭寸語(yǔ)句。3.3 跨周期引用用#引用別的時(shí)間周期但別亂用文華財(cái)經(jīng)的公式支持跨周期引用數(shù)據(jù)常用寫法是在函數(shù)名稱后面加“#”比如日線MA20:MA(CLOSE,20)#DAY;這在小周期圖表里引用大周期指標(biāo)時(shí)非常實(shí)用比如在30分鐘圖里看日線級(jí)別均線??缰芷谝玫脑硎切≈芷诘拿恳桓鵎線都去尋找它所在的那根大周期K線對(duì)應(yīng)的值。這里有個(gè)容易忽略的問(wèn)題大周期K線沒(méi)有走完時(shí)它的值是在變化的所以引用到的值也會(huì)跟著變化信號(hào)可能在日內(nèi)來(lái)回閃爍。我在寫日內(nèi)策略時(shí)吃過(guò)虧引用了日線均線做過(guò)濾早盤均線方向剛確定下午收盤前方向又變了導(dǎo)致同一個(gè)信號(hào)在里面反復(fù)出現(xiàn)。后來(lái)我在引用大周期數(shù)據(jù)時(shí)盡量加上“確認(rèn)”條件比如等到大周期K線結(jié)束才取值或者用SHIFT景再次引用來(lái)規(guī)避未收盤取值的問(wèn)題。4. 信號(hào)漂移和未來(lái)函數(shù)90%的指標(biāo)問(wèn)題出在這如果讓我說(shuō)一個(gè)新手和老手之間最大的分水嶺我覺(jué)得不是代碼寫得漂亮不漂亮而是對(duì)“信號(hào)漂移”有沒(méi)有概念。很多人寫出來(lái)的公式回測(cè)曲線非常漂亮但單獨(dú)打開(kāi)K線圖按信號(hào)一個(gè)個(gè)核對(duì)卻發(fā)現(xiàn)歷史信號(hào)位置不斷變化這種公式就是有問(wèn)題的。4.1 什么是未來(lái)函數(shù)它是怎樣讓信號(hào)“事后看很準(zhǔn)”的未來(lái)函數(shù)簡(jiǎn)單說(shuō)就是在計(jì)算某根K線信號(hào)時(shí)偷偷使用了當(dāng)時(shí)還不存在的數(shù)據(jù)。比如用到了之后幾根K線的高低點(diǎn)、之后幾根K線的數(shù)值那么這跟K線的信號(hào)在當(dāng)根K線結(jié)束的時(shí)候根本無(wú)法確定只有等到后續(xù)數(shù)據(jù)到來(lái)之后才能“回頭確認(rèn)”。舉一個(gè)很常見(jiàn)的例子有人寫條件“當(dāng)前K線最高價(jià)等于過(guò)去20根K線里的最高價(jià)”用來(lái)做突破入場(chǎng)。表面上這行代碼在歷史回測(cè)里找出了很多“精準(zhǔn)”的突破買點(diǎn)但實(shí)際盤中執(zhí)行時(shí)你不可能在這根K線還沒(méi)走完的時(shí)候確認(rèn)它最終會(huì)成為20日最高——除非你假設(shè)自己開(kāi)了上帝視角。這就是信號(hào)漂移的來(lái)源回測(cè)里成立的信號(hào)實(shí)盤壓根抓不住。文華財(cái)經(jīng)的軟件在編譯時(shí)對(duì)部分未來(lái)函數(shù)會(huì)給出提示或者禁止使用但不是所有情況都能自動(dòng)識(shí)別。有些寫法稍微繞了一下比如用BARSSINCE、CURRBARSCOUNT這類函數(shù)反推當(dāng)前K線在某個(gè)區(qū)間內(nèi)的位置間接用到了未來(lái)信息軟件不一定報(bào)錯(cuò)結(jié)果卻已經(jīng)失真了。4.2 文華環(huán)境里排查信號(hào)漂移的具體做法我自己排查信號(hào)漂移有一個(gè)笨但有效的辦法把公式加載到K線圖上把“信號(hào)顯示”打開(kāi)然后按鍵盤上的“←”鍵讓K線向左移動(dòng)觀察最右側(cè)、也就是最新那根K線上的信號(hào)。如果最新K線上原本沒(méi)有信號(hào)但隨著后續(xù)K線一根根出現(xiàn)前面某根K線上突然多了一個(gè)信號(hào)或者信號(hào)方向變了那基本可以斷定公式里有未來(lái)因素。另一個(gè)辦法是充分利用軟件的“回放”或者逐K線模式。逐K線模式下公式引擎按時(shí)間順序一根K線一根K線地推進(jìn)計(jì)算每根K線計(jì)算時(shí)只能拿到“當(dāng)時(shí)”的數(shù)據(jù)。如果公式在普通模式下回測(cè)和逐K線模式下回測(cè)的結(jié)果差異很大那多半有函數(shù)順序或者未來(lái)引用的問(wèn)題。還有一個(gè)很典型的排查點(diǎn)中間變量是否被重復(fù)賦值覆蓋。比如在模型里你對(duì)某個(gè)條件變量在不同分支下分別賦值最后信號(hào)取決于哪個(gè)分支最后執(zhí)行而分支的執(zhí)行順序可能和K線狀態(tài)有關(guān)。這種問(wèn)題不一定涉及未來(lái)函數(shù)但會(huì)讓信號(hào)變得非常難理解我建議中間變量命名盡量唯一不要復(fù)用。4.3 盤中信號(hào)與收盤確認(rèn)別在還沒(méi)走完的K線上“搶跑”很多新手激動(dòng)地發(fā)現(xiàn)自己的公式在盤中不斷彈出信號(hào)覺(jué)得“策略真靈敏”。實(shí)際上這可能是K線未走完導(dǎo)致的“假信號(hào)”。比如你用5分鐘K線判斷均線金叉這根5分鐘K線還沒(méi)收盤收盤價(jià)還在變化金叉可能在這根K線中間反復(fù)成立又消失。要避免這種情況可以在條件里加上“是否走完”的確認(rèn)比如用ISLASTBAR或判斷當(dāng)前K線收盤后執(zhí)行。但這也會(huì)帶來(lái)一個(gè)實(shí)際成本如果非要等K線收盤才確認(rèn)信號(hào)那么真正下單的價(jià)格會(huì)比信號(hào)K線的收盤價(jià)晚一點(diǎn)。這個(gè)執(zhí)行偏離是必然存在的回測(cè)和實(shí)盤不一致的一個(gè)重要原因就在這里。所以我在設(shè)計(jì)模型時(shí)會(huì)把信號(hào)確認(rèn)方式設(shè)計(jì)成和實(shí)際下單動(dòng)作一致而不是讓回測(cè)里的“理想成交價(jià)”蒙蔽自己。5. 參數(shù)優(yōu)化出來(lái)的漂亮曲線為什么不值得迷信講完信號(hào)漂移再說(shuō)一個(gè)更隱蔽的問(wèn)題參數(shù)過(guò)度優(yōu)化。文華財(cái)經(jīng)軟件提供了參數(shù)優(yōu)化功能很多人拿到新策略的第一件事就是把均線參數(shù)從1到200全部掃一遍然后挑一個(gè)回測(cè)收益最高的參數(shù)組合覺(jué)得自己發(fā)現(xiàn)了“最佳參數(shù)”。這種做法非常常見(jiàn)但也很危險(xiǎn)。5.1 回測(cè)指標(biāo)該看哪幾個(gè)數(shù)而不是只看收益率回測(cè)報(bào)告里字段很多我一般重點(diǎn)看幾個(gè)凈利潤(rùn)、最大回撤、盈利因子、勝率、平均盈虧比、信號(hào)數(shù)量、交易次數(shù)。單獨(dú)看凈利潤(rùn)最容易誤導(dǎo)比如一個(gè)策略一年交易了300次勝率只有30%但靠幾次大盈利把總收益拉正了實(shí)際執(zhí)行時(shí)連虧十幾筆的體驗(yàn)是非常難熬的你可能根本撐不到那幾次大盈利。我用一個(gè)表格列出我在回測(cè)時(shí)最看重的幾項(xiàng)參考基準(zhǔn)指標(biāo)關(guān)注原因我自己覺(jué)得比較合理的范圍僅供參考盈利因子總盈利/總虧損越高說(shuō)明盈虧結(jié)構(gòu)越好穩(wěn)定策略一般希望在1.5以上低于1.2要小心最大回撤反映策略最難受階段的虧損幅度低于20%相對(duì)可控超過(guò)30%執(zhí)行難度極高勝率贏的次數(shù)占比但不是越高越好25%-60%都可能正常關(guān)鍵是盈虧比配合交易次數(shù)信號(hào)太少?zèng)]有統(tǒng)計(jì)意義太多則成本壓力大一個(gè)品種一年至少幾十次以上幾百次要細(xì)算成本凈利潤(rùn)和回撤比收益/回撤衡量風(fēng)險(xiǎn)調(diào)整后收益2以上算不錯(cuò)3以上要懷疑是否過(guò)度擬合信號(hào)數(shù)量太少是另一個(gè)大坑。如果一個(gè)參數(shù)組合在十年里只產(chǎn)生了三次交易收益再高也沒(méi)有統(tǒng)計(jì)意義因?yàn)闃颖緮?shù)量太少無(wú)法區(qū)分是策略有效還是運(yùn)氣好。我一般要求單個(gè)參數(shù)組合至少要有幾十筆以上的交易才敢繼續(xù)往下看。5.2 參數(shù)掃描和樣本劃分用“區(qū)域”代替“單點(diǎn)”用文華財(cái)經(jīng)的參數(shù)優(yōu)化功能時(shí)建議不要只盯著最優(yōu)的那一個(gè)參數(shù)點(diǎn)而是觀察參數(shù)變化時(shí)績(jī)效的平滑度。如果參數(shù)從4改成6收益從50%變成5%說(shuō)明策略對(duì)參數(shù)極其敏感這個(gè)“最優(yōu)”大概率是擬合出來(lái)的如果參數(shù)在很大一個(gè)區(qū)間內(nèi)績(jī)效都比較穩(wěn)定比如從10到30收益都在一個(gè)合理范圍內(nèi)波動(dòng)那說(shuō)明策略的邏輯本身有承受力參數(shù)不是決定生死的關(guān)鍵。我自己的做法是先在一段樣本內(nèi)做優(yōu)化找到相對(duì)穩(wěn)定的參數(shù)區(qū)域再用另一段完全獨(dú)立的樣本數(shù)據(jù)去驗(yàn)證。如果優(yōu)化用的樣本表現(xiàn)很好驗(yàn)證樣本表現(xiàn)明顯變差那這個(gè)參數(shù)組合就需要謹(jǐn)慎使用。樣本劃分沒(méi)有絕對(duì)標(biāo)準(zhǔn)我習(xí)慣把時(shí)間序列分成前半段和后半段或者按不同行情狀態(tài)劃分比如趨勢(shì)段、震蕩段分開(kāi)看這樣能更清楚策略到底吃的是什么行情。你可以靈活運(yùn)用文華軟件里的多種周期或多品種回測(cè)方式。不要只在一個(gè)品種、一個(gè)周期上反復(fù)調(diào)參換一個(gè)品種、換一個(gè)周期同樣的邏輯能否守住基本盤這是檢驗(yàn)策略邏輯是否具備普適性的重要參考。當(dāng)然這里不是說(shuō)要一個(gè)策略通吃所有品種而是說(shuō)參數(shù)的變化不應(yīng)該帶來(lái)顛覆性的結(jié)果差異。5.3 小心過(guò)度優(yōu)化的三個(gè)信號(hào)我總結(jié)了三個(gè)很容易識(shí)別的過(guò)擬合信號(hào)分享出來(lái)給大家參考。第一最優(yōu)參數(shù)恰好落在參數(shù)掃描邊界上比如掃描范圍設(shè)成3到100最優(yōu)值正好是3或者100那很可能范圍邊緣還有更“好”的組合而這種邊緣最優(yōu)基本不可信。第二回測(cè)最大回撤特別小同時(shí)收益又特別高聽(tīng)上去很完美但往往是因?yàn)閹坠P極端行情貢獻(xiàn)了大部分利潤(rùn)遇到新的極端行情完全無(wú)法復(fù)制。第三去掉一兩筆盈利最大的交易之后策略直接從盈利變成虧損這就說(shuō)明收益質(zhì)量很差策略的盈虧基礎(chǔ)太脆弱。這幾類情況我在文華軟件里都碰到過(guò)。坦白說(shuō)發(fā)現(xiàn)自己的策略屬于第三種情況時(shí)感覺(jué)非常沮喪但早發(fā)現(xiàn)總比真金白銀去市場(chǎng)上驗(yàn)證好。我后來(lái)給自己定了個(gè)規(guī)矩如果去掉最大的一筆盈利交易后策略仍然能保持正收益這個(gè)策略我才愿意認(rèn)真考慮實(shí)盤。6. 上線前我建議你先跑完這份驗(yàn)證清單一個(gè)指標(biāo)公式或策略模型寫出來(lái)之后不要急著掛上去實(shí)盤。我自己在正式用某個(gè)公式之前會(huì)走過(guò)一套相對(duì)完整的驗(yàn)證流程從數(shù)據(jù)到執(zhí)行都檢查一遍。這章節(jié)就當(dāng)是我提供的一份參考清單。6.1 數(shù)據(jù)層面的確認(rèn)復(fù)權(quán)、周期、手續(xù)費(fèi)滑點(diǎn)首先要確認(rèn)回測(cè)數(shù)據(jù)是否復(fù)權(quán)。商品期貨因?yàn)橛袚Q月的問(wèn)題不同合約的連續(xù)性數(shù)據(jù)如果不做復(fù)權(quán)處理價(jià)格跳空會(huì)造成虛假突破或虛假止損。文華財(cái)經(jīng)軟件里有默認(rèn)的連續(xù)合約和復(fù)權(quán)設(shè)置但不同設(shè)置對(duì)回測(cè)結(jié)果影響很大。我建議至少用兩種數(shù)據(jù)設(shè)置各跑一遍看結(jié)論方向是否一致。其次確認(rèn)手續(xù)費(fèi)和滑點(diǎn)模型?;販y(cè)軟件里的默認(rèn)手續(xù)費(fèi)可能偏低實(shí)盤交易所收取的手續(xù)費(fèi)加上期貨公司加收的部分以及成交價(jià)偏離信號(hào)價(jià)造成的滑點(diǎn)會(huì)顯著吞噬短線策略的利潤(rùn)。我一般會(huì)在回測(cè)設(shè)置里把手續(xù)費(fèi)調(diào)得比實(shí)際略高一點(diǎn)滑點(diǎn)按固定跳數(shù)估算寧可回測(cè)難看一點(diǎn)也不要實(shí)盤被現(xiàn)實(shí)打臉。還要注意文華財(cái)經(jīng)軟件的回測(cè)默認(rèn)可能需要設(shè)置“每杠”或“固定保證金”不同資金模式下信號(hào)數(shù)量、連虧表現(xiàn)也不同。如果你是固定一手測(cè)試信號(hào)數(shù)少但簡(jiǎn)單如果你按固定資金測(cè)試要注意資金變動(dòng)會(huì)導(dǎo)致手?jǐn)?shù)變化進(jìn)而影響回撤比例。6.2 模擬和實(shí)盤的過(guò)渡先解決執(zhí)行層面的差異很多人在回測(cè)和模擬盤之間會(huì)忽略一個(gè)問(wèn)題回測(cè)里假設(shè)信號(hào)一出現(xiàn)就能立刻成交但你用的實(shí)際行情軟件、下單軟件、網(wǎng)絡(luò)延遲、人工確認(rèn)速度都會(huì)讓成交價(jià)和信號(hào)價(jià)之間產(chǎn)生偏差。所以在正式投入資金之前至少用模擬盤連續(xù)跟一段時(shí)間觀察實(shí)際成交的滑點(diǎn)有多大、信號(hào)有沒(méi)有漏發(fā)、盤中延遲會(huì)不會(huì)導(dǎo)致錯(cuò)過(guò)價(jià)格。我在模擬階段有一個(gè)固定做法每天收盤后把當(dāng)天實(shí)際產(chǎn)生的成交記錄和回測(cè)系統(tǒng)在同K線上的理論信號(hào)做對(duì)比。如果發(fā)現(xiàn)同一天有信號(hào)但模擬盤沒(méi)下單說(shuō)明可能是K線走完確認(rèn)邏輯、暫停、或者軟件設(shè)置有問(wèn)題這些都要記下來(lái)一件件排查。模擬盤雖然不賺真錢但對(duì)建立信任感極其重要——你上了真錢之后再發(fā)現(xiàn)信號(hào)邏輯有問(wèn)題是來(lái)不及的。6.3 別忘了算交易成本和心態(tài)承受力寫了這么多最后說(shuō)一個(gè)可能容易被忽略的點(diǎn)交易成本不是只在回測(cè)里填一個(gè)數(shù)字那么簡(jiǎn)單。短周期策略交易頻率高滑點(diǎn)、手續(xù)費(fèi)、延遲成本會(huì)疊加很可能把一個(gè)賬面正期望的策略變成負(fù)期望。我在評(píng)估一個(gè)指標(biāo)公式時(shí)會(huì)專門算一下單筆平均成本占單筆平均盈利的比例。如果這個(gè)比例超過(guò)20%這個(gè)策略的執(zhí)行難度就很大了因?yàn)槿魏我稽c(diǎn)執(zhí)行偏差都會(huì)壓垮利潤(rùn)空間。心態(tài)承受力其實(shí)和資金曲線參數(shù)一樣重要。最大回撤20%的策略回測(cè)里看起來(lái)只是一個(gè)數(shù)字但實(shí)盤連續(xù)虧損幾個(gè)月時(shí)那種懷疑自己、懷疑策略的感覺(jué)會(huì)讓你手忙腳亂最終可能在最低點(diǎn)放棄。所以我會(huì)在決定使用前著重看策略歷史上最長(zhǎng)的連虧次數(shù)再問(wèn)問(wèn)自己如果現(xiàn)在就是那段連虧時(shí)期我還能不能繼續(xù)按信號(hào)執(zhí)行這個(gè)問(wèn)題的答案比任何參數(shù)優(yōu)化都重要。我在實(shí)際編碼過(guò)程中還有一個(gè)體會(huì)指標(biāo)公式寫得越復(fù)雜維護(hù)成本越高出問(wèn)題的概率也越大。技術(shù)指標(biāo)的核心價(jià)值在于“可執(zhí)行”而不是“華麗”。與其追求復(fù)雜的疊加重構(gòu)不如把一個(gè)邏輯簡(jiǎn)單的公式做到信號(hào)穩(wěn)定、條件明確、成本可控。文華財(cái)經(jīng)指標(biāo)公式說(shuō)到底是一段工具代碼它能幫你把紀(jì)律變成流程但真正的決策和風(fēng)控永遠(yuǎn)在你自己手里。