評價函數的進階應用 – 統計與機率變化的描述

最近有一本夯書上市叫<洞悉市場的人>,雖然明知道書裡不太可能講什麼細節的東西,但基於崇拜的心理,還是得朝聖一下,至少確認一下跟我們自己現在在鑽研的方向是不是一致。花了兩三天趁著一些零碎的時間,不專心地的帶小孩或是清腸胃的時候,快速地瀏覽過去(既然不是西蒙斯本人寫的,基本上也可以預料到頂多是會提到一些關鍵名詞罷了)。果然,太陽底下怎麼可能會有新鮮事,我們現在能夠想到的東西,人家二十年前早就已經在用了,什麼馬可夫鏈、貝式定理(條件機率)、機器學習,這些不令人意外的名詞,更甚者人家是底子深厚的數學家,腦袋裡能夠使用的武器肯定比我們這些雜魚更精準,人家早已登上外太空,我們還在內子宮裡吸拇指。不過妄自菲薄之餘我們還是得跟緊腳步,即使不可能達到那樣的境界,但至少方向還是要對。既然關鍵字都已經出現了,至少確認一件事,量化的研究與操作的模式應該往機率與統計的架構(框架)去走就對了。

所謂機率統計的架構肯定不是multicharts那種簡單的 if else buy short(事件->買賣)就能辦到的,就如同你在書裡所看到的,光是大數據資料的蒐集與校正、模型的建立、訊號的探勘與驗證如果要達到一定的水準,隨便就需要多少高階人力跟資源才有辦法做到,但也不能說到不了那種水準(操幾百億資金的水準)就不做,至少架構的樣子要有,未來進化的路才走得遠。

我一直覺得”架構”(框架)是很重要的東西,因為他是你看待或思考一件事情的方式(流程),無關新手或老手,不是因為等真的需要管理的策略或商品多了才來考慮使用。有時候會聽到一些我覺得其實有點可惜的說法,像是策略很少或很好不需要管理(其實重點實在不是管理XD 而是思考一件事情的方式),或是一些先入為主但好像沒抓到重點的說法,像是管理就只是評價函數就打分數然後Ranking而已沒什麼新意,還每次都拿到高分就開始被巴。還有就是什麼管理就是把策略加更多參數,變成一條新的線而已,沒什麼幫助(這我真的有點黑人問號?)……只能說就這樣直接止步而沒有繼續從架構(框架)面去思考從哪個環節下手去改善把問題找出來,我覺得還挺可惜的。

關於架構(框架)平常在臉書粉絲頁裡聊的應該也算不少了,簡單講就是你從交易模型的建立到下單的一連串會經過的處理區塊,最終的目標就是怎麼把你的資金該如何轉換成部位的一連串流程,這過程中有一個部分我覺得非常重要,我稱他叫"機率統計的描述",因為機率的變化連帶決定你所要下注的金額,該放出去多少部位,該收回多少部位,都直接跟機率分布扯上關係

在前一篇文章我們有提過,同一個指標所產生出來的幾百個訊號,這些訊號會因為所處的不同的時間,不同的位置,不同的狀況而有不同的風險機率分布,例如當下的價差、當下的波動率、當下的季節(農產品)、當下的法人布局、當下的損益等等。甚至當你持單後的每一天都可能繼續發生不同的事件跟變化。講這些你可能還沒有太多感覺,我們用最簡單的"牌局"來看(交易越做越久,會發現交易真的是跟博奕論相關性非常高)

大家從小就看賭神賭聖看到大,你會發現除非你像賭聖一樣有特異功能可以每次都一開始就梭哈,不然正常都是邊開牌邊重新規劃注碼的大小,因為桌面上大家輪流開一張牌,然後喊下新的注碼,不同的開牌、不同的嗆聲內容、不同的表情、不同的注碼、不同的猶豫時間甚至是今天早上起床被老婆罵都可能會大大的影響後續的機率變化跟你想下注的大小

交易的過程也是一樣,如果你堅定地想往專業投機的方向(買樂透那種玩票性質就算了、投資的那種買了放一邊存的也可以跳過)去前進,"機率分布的描述"幾乎是不可能閃過一個區塊,因為那直接關係到你資金或部位的戰略部署。

講那麼多還是得拉回今天的主題,評價函數。評價函數(機器學習裡的目標函數)就是在做這件工作。我一直說這個函數基本上是根據每個人的需求去自訂,他基本上所扮演的腳色就是在做所謂的"機率分布的描述"這個工作。

直接舉個程式交易的例子,相信應該蠻多使用Multicharts做程式交易的人都玩過一個東西叫做 ADE(AllDataEverywhere),會想使用這個東西基本上大概都是做了一陣子順勢程式交易之後,潛意識開始發現所謂的"循環",你常會發現自己的程式總是在某個DD,或是某些失敗交易之後就會開始賺錢,然後賺了一筆大的之後,就好像又開始要陷入"賠錢的循環",所以你開始在想是不是有某個工具能夠幫你做到一些事情,像是"偷看原本的策略,連賠N次才真的進場",這通常就是我們接觸所謂的Equity Trading或管理的的第一次。這也是你第一次開始意識到市場上似乎每一筆交易之間似乎有什麼關聯,但又不是那麼清晰的知道該怎麼去處理或描述,所以只簡單的用一句"循環"就帶過(這背後真要講其實可以再講一大篇,波動(風險值)叢聚,厚尾的現象,不過又是另外一篇大主題XD)。

在以前的文章我們講過,其實我們的行為非常容易受到工具的制約(我們都是HTS/TradeStation/Multicharts的受害者XD),當我們直接拿到了一個工具,我們很容易就從工具裡的範例或是這些工具的推廣課程入門,這些範例或是課程裡的策略永遠都只會告訴你買或賣(buy/short next bar @XXXX),卻從來不會教你該買幾口或賣幾口,所謂的機率分布的概念基本上在此時就直接被扔掉了,但這個世界始終都不是所謂的二分法,是有程度分別的,今天的溫度是20度,你可以穿兩件衣服,今天的溫度是25度,你可以穿一件衣服,今天的溫度是15度,你可以穿兩件衣服再加一條圍巾,今天的溫度是35度,但你還是得跟25度一樣穿一件衣服上街,因為你還有道德規範甚至法律規範,所以我始終都很討厭一個詞叫做"停損",因為我覺得你該做的是部位的控制而不是不分青紅皂白到了某個溫度就直接全部脫光(如果有這條法律好像也不錯XD),有了部位控制何須停損,又扯遠了,再回來所謂的(風險)機率分布。(不知道會不會又有人開始斷章取義誤解我說的話,過去我說的一些話常被誤解,像是上面以前我說的"停損"或是"策略"(指標)不重要,是因為更重要的其實是因應機率分布的變化做部位控制,而不是那個買或賣策略指標,買或賣策略指標都大同小異,早一點晚一點進場的區別而以)。一筆完整的量化交易描述應該是方向(數學上的正負號Sign)與大小(Size,multicharts裡的範例大多省略了這個部分,技術分析書籍裡也大多省略了這個部分,這一塊卻是我認為交易裡最重要的部分)。

拉回來評價函數,前面我們講到我們在做程式交易一陣子之後,可能會想到用ADE去偷看我們原本的策略,然後去過濾掉某些訊號,這其實就是我們已經意識到了雖然訊號都來自於同一個策略(指標),但"好像賺錢的能力或機會不太一樣"。即使知道也是模模糊糊不知道該怎麼去把這個環節放到你的交易環節裡。有兩種做法,一種是我們最常用的寫成策略裡的濾鏡,另外一種則是寫成自訂式(描述機率分布)的評價函數。前面那種作法大家都很熟悉,像我們這裡透過ADE的幫助,把圖表分成兩個,一個是原始策略圖表,另一個則是真實下單圖表,然後當把原始策略圖表被巴的次數訊息共享給真實下單圖表進行下單。而第二種方式也就是我們這篇要講的主題,透過評價函數來幫你進行注碼的部暑,我認為這種方式會比較正規科學符合統計學的精神,也就是找出真實(風險)機率分布的差異。這種做法的步驟是這樣,我們一樣可以透過ADE或是某些分析軟體(看你想分析的東西或命題是什麼而決定),例如我們這裡透過ADE去分析原始策略(指標),而我們的命題是"錯N次才進場"或"多少DD%產生時才進場",接著我們設定錯1次才進場,錯2次才進場,錯3次才進場等等進行觀察,假如我們所認定的"循環"真的存在,我們就會發現隨著我們設定的標準越嚴苛,我們所觀察到的數據(勝率或ProfiFactor或OptF等統計指標)就會呈現規律(非隨機)的現象,像是越來越好,這就代表你已經大致上抓到某個現象(循環)的機率分布。這個時候我們就可以把這樣的機率分布寫進我們的評價函數,例如在原始策略的表現,勝率可能只有40%(或評價分數0.4),但經過我們的測試與觀察,當我們加上了一個條件<失敗訊號兩次後才真的進場>,回測與分析後的結果勝率可以提高到60%,<失敗訊號四次後才真的進場>回測與分析後的結果勝率可以提高到80%。我們就可以在評價函數裡進行機率分布的設計,讓評價分數在後續更多條件或事件陸續揭露時,產生相應的分數對應(機率分布對應,非線性函數,而是根據特定條件陸續揭露後分數的變化,像這裡我們的命題內提的已發生的錯誤的次數條件,當事件發生後再去動態改變評價分數的數值,進而連結資金與部位的配置透過這樣統計機率分布的量化分析與資金配置才是正規的量化模型規劃。今天並沒有說到所謂的Ranking,這裡更著重在評價函數於機率分布描述的應用。交易並不是擲骰子(獨立事件),他更著重在條件機率上的應用。為什麼突然提到Ranking,主要是多數人提到評價函數,大概印象都是跟Ranking綁在一起(其實我大部分的時候也是),總是只停留在什麼策略管理、策略上下架的應用層級,但其實更重要的是(風險)機率分布的描述與應用。那我們一般常用的寫在策略裡的濾鏡法有什麼問題?,基本上用multicharts進入程式交易最大的問題就是前面說的,很習慣用二分法(因為撰寫與推廣上的方便,工具的制約),像是某某條件發生我們就做多,反之就做空,某某條件在的時候就不做等等,濾鏡法也是如此,我們可能會習慣一筆劃分,某個條件發生時我們就才做多,或某個條件發生時我們就才做空等等(而非探討程度上的變化),夠不夠精確倒還是其次,更大的問題是容易因為你設定的threshold前後差一些反而有可能錯失重要的訊號。而第二種機率分布的作法則可以讓你每筆訊號都不錯失,並且有更為精確的統計機率描述作為下注籌碼(部位)的參考,持有部位期間所發生的事件(波動率的變化/法人持單部位的變化等等)也都能動態再重新納入量化的模型中。

今天會寫這篇主要是因為讀"洞悉市場的人"有感,有時候我們必須跳脫工具的框架,回到原點想一想這些做量化交易的天才是怎麼開始建立一個模型的(透過大數據+機率統計建模,然後用C++硬幹),如果我們今天不是從multicharts開始,沒有所謂的工具的制約(為了簡易上手,TS/multicharts的框架幾乎被簡化成,事件>>買賣>>等出場,而把最重要的機率統計描述區塊省略了),也沒有讀過市場上一些莫名其妙的技術分析書籍,只有數學(機率與統計),我們會怎麼開始對大數據進行分析,會怎麼開始建立模型跟命題。

粉絲專頁

進化特區