2020年1月13日 星期一

【進場之前 2】 創造性失誤 & 回音法:因錯得福的故事

※ 本文提供播客,文章有補充更多內容




 今天要大家分享的是,我突然想到我自己過去犯過的一個錯誤。

因為這個錯誤想到一個交易管理方式:也就是限制一組交易策略只能做多,或是做空,雖然交易策略會給我們做多空的訊號,但是就限制只在做多訊號出來做多,而做空訊號出來不進場,也就是「只做多」或「只做空」的限制。

其實聽起來也沒什麼了不起,相信你也能想到,但是我是因為一個工作上的錯誤,才想到這個方式,這個聯想這純粹是巧合嗎?還是因錯得福的背後,其實有一個模式?今天會談論「創造性錯誤」這個主題,還有我在公司建立的文化與價值觀。

在我剛開始工作的第一年還是第二年,技術團隊只有我和另外一個人,總共兩個人,那時候專注於基礎建設的搭建,和基本的程式碼撰寫,原本可能是一個發想的玩具碼(Toy Code)而需要開始改良成安全性更高的程式碼。



因為我也並非專業資訊背景,那時候程式能力也尚可而已,各種開發的 SOP 都還沒建立,程式碼有很多 Bug 也很正常。

有一次有一個 Bug 發生,造成我所有交易策略的單只要一放,後續所有單能開的方向都被第一個單所影響,因為各種功能都已經模組化了,所以就會影響所有交易策略。當天晚上我在台灣,和瑞典老闆打個電話通報,這邊和瑞典差了 7 個小時,老闆也沒說什麼,就說 OK 把 Bug 修了吧!


然後弄一弄,沒弄完我就先離開辦公室,走到電梯那等電梯。

接著我想到策略只做多,我就噗哧一笑。




我腦海想到的事情是,這不就像很多遇到的資料不對稱的問題(Imbalanced Set),如果我的資料都只有多頭走勢,那我的交易只會優化成做多頭的,遇到空頭不就陣亡了嗎,我忘記我那時候想到什麼,就突然閃過一個週一到周五的外匯走勢圖。

大家可以看我有一部影片是談外匯的日內波動的週期效應,然後看我模擬交易週記都有用到的週一到周五的圖,你們應該對這些圖要有感覺。

我就突然想如果只做多,那會發生什麼事情?



我腦海就迅速閃過好幾個,BBand、MA、CCI、RSI 各種交易策略,還有當紅的 ML/RL 幾種基本策略。我快速想像 MAE/MFE 分布的情況,然後在腦內模擬回測的情況,我就站在電梯前一直想,這過程大概 5 到 10 秒吧。

然後我就覺得搞不好可行?然後想到 IT 的一個笑話:Bug is feature(譯:這不是產品瑕疵,這是我們的產品特色!)

 然後後續我就新增了這個功能,做了一些基本的回測,結果大致上和我想得差不多,但是參數空間很狹隘(也就是真正會有用的參數非常少)還需要搭配一些比較強的損益兩平停損。雖然和想像有一些落差,但是可以得到更精確的曝險大小,因為如果我只做多、只做空,我的曝險就很容易算,尤其是策略疊加的時候。



我很常想起這個故事,我每次都會想,到底那天的契機是什麼?

其實就是我噗哧的一聲。

這邊要先和大家說明,什麼是 創造性失誤,創造性失誤是一種在創作過程會使用的技巧,一般完成品你可能不會察覺,例如灰姑娘的故事作者佩囉,他出版了一本童話故事集,然後他蒐集各種童話的時候,錯把灰姑娘的鞋子,松鼠毛皮的英文(vair)聽成了法文的玻璃(Verre)結果,把原本的童話故事中的灰姑娘松鼠皮鞋,改成了更有畫龍點睛、 更能眼睛一亮的「玻璃鞋」,這就是所謂的創造性失誤。

所以那天我做的 Bug 就是很典型的創造性失誤,所以有時候你寫交易程式遇到一些問題,可能也沒有不好,可能只是說你要想到說這個東西,實際的缺陷發生了,他是什麼樣子?能否想像那個畫面,這東西是 Bug 還是 Feature?是單純拼錯的松鼠毛皮,還是玻璃鞋?

剛剛前面提到,我一瞬間想到那些畫面,那個技巧你需要鍛鍊,我們可以透過所謂的回音法來鍛鍊,例如說我在學一個語言,例如我們在唸一個句子,唸出來一下之後你就在心裡默唸,所以你在交易回測之前,你可以試著先去猜猜看結果。

你去想像可能的結果是什麼, 如果你想像的結果和真正的結果有很大的落差,你就會知道你的想像中還欠缺什麼東西,越來越清楚你就會對妳各種方面,例如交易分析你就可以先有一個想像,避免你陷入一開始就認為是錯的。

就像我剛剛一開始,我想我只做多,就像虛擬貨幣一樣,這就是很邏輯很知識性的推導,但我後來就想到 Bitcoin 的走勢,然後快速閃到週一到週五貨幣的可能走勢,就把我帶回來,如果我有一個交易策略是這樣,會是什麼樣子?把我認為是錯的可能,拉回來。



在我們公司有一個小要求,通常有域到一些功能實現上的錯誤,就要把這個 Bug 畫出來,例如你原本想取交易大小,你可能原本是 0.02, 0.05 結果變成整數 0 或 1 ,那這樣對回測會有什麼結果?你就要試著畫出來,去猜測這樣的影響是什麼。

這這樣別人看到你的問題,也會能有一個印象,這樣在多年之後,如果突然要開發一個功能,就會想到當初有犯的一個錯誤,可能你這個功能就可以透過當初那樣的錯誤來實現出來,這樣就可以很大量省下去開發一些很特殊的功能。

另外一個回音法的練習引導,就是你帶會議,可以在一些重點圖表講解一下的時候,把畫面切掉讓大家重新去想像那個畫面,然後再貼回來,讓大家看想像是否接近,還有就是要讓團隊經常去猜各種結果,你預期的結果是如何,你的想像是什麼。



透過這樣練習,久了之後,很多東西你不用跑回測就能想像,如果想得和你不一樣,那個衝擊力道也會很大,例如你想像收斂速度很快,但結果實際上收斂速度非常慢,就會讓你去想這個參數會不會比較敏感,透過這樣的方式,你才會比較有創造力,不浪費掉每一次的失誤。

所以以上就是一個因錯得福的故事,和一些公司中比較儀式性的東西。

沒有留言:

張貼留言