F

交易員專訪Gianluca

「時空旅人」回測術!

完美的歷史回測曲線,到了實盤難道只能落入失效與虧損的宿命?本篇專訪我們邀請到自 2000 年起便活躍於市場、兼具體育老師背景與 IT 算力狂熱的資深交易員 Gianluca。他曾經歷市售黑心 EA 的絞殺,隨後憑藉 StrategyQuant (SQX) 進行徹底轉型。Gianluca 將與我們深入分享他如何利用 64 位元的多核心處理器 (Threadripper) 爆發算力,獨創「時空旅行回測術」來盲測策略,並以「不優化、僅測試健壯性」的嚴格工作流,打造出至今已穩定運行超過五年的高耐震量化投資組合。

演算法交易 StrategyQuant Threadripper 運算電腦 量化交易員 Gianluca

一、 體育老師的雙面人生:從 Metastock 慘痛教訓到 Threadripper 算力怪獸

Gianluca 在日常生活中是一位充滿活力的體育老師,熱愛自然與體能訓練,這使他能夠隨時保持充沛的精神,並免受交易壓力的干擾。但他同時也是一位瘋狂的硬體技術玩家與演算法交易員。

早在 2000 年,Gianluca 便開啟了他的交易探索,當時他使用 Metastock 交易期權 (Options),但很快遇到了流動性匱乏的瓶頸,導致系統失效,隨後不得不暫停交易。到了 2016 年,隨著外匯市場與 EA 的蓬勃發展,他決定重新回到市場,並從線上商城購買了大量的「明星級」EA(自動交易程式)。

「幾乎所有我買來的 EA,在實盤上線後都以極快的速度宣告失敗。我拒絕盲從,於是我開始尋找工具,去揭露這些市售 EA 的真實面貌。」

在研究過程中,他發現 StrategyQuant 將在 2017/2018 年推出全新 64 位元、支援多核心處理器的重大更新。他果斷配置了當時頂級的 Threadripper 處理器,徹底釋放 64 位元計算架構的威力,在不寫一行程式碼的前提下,開啟了全自動、大樣本的交易系統開發之旅。

二、 破解市場黑心 EAs:Gianluca 的數據平移防詐術

作為一名自學成才的技術探索者,Gianluca 很快研究出了如何辨識「市售 EA 是否存在詐欺與過度擬合」的檢測方法:

  • 破解市場黑心 EAs 的兩大技術特徵
    • 數據名稱識別測試: 透過修改、偽造或操控回測的數據名稱,檢驗 EA 是否會在程式內部「讀取特定名稱」以人為製造出虛假的完美資金曲線。
    • 時間數據平移 (Data Shift): 將歷史數據的時間軸人為向前或向後平移。若該 EA 是基於特定歷史時間點進行「後見之明」的死記硬背(曲線擬合),平移後其績效將瞬間崩潰。

三、 獨創「時空旅行回測術」:模擬真實未來,找出黃金策略

在購買 SQX 授權後,Gianluca 沒有急著把策略拿去跑模擬盤或真錢。他花費了整整一年的時間,在完全與外界隔絕的本地電腦上,實踐了他獨創的「時空旅行回測術 (Time-Travel Backtesting)」:

  • 時空旅行回測術的三大實施步驟
    • 步驟一:人為時間封鎖(回到 2018 年): 雖然當時時間已經是 2019 年,但他強迫自己的工作流僅能使用 2018 年底前的歷史數據來挖掘與生成策略。
    • 步驟二:盲測未來的 2019 數據: 策略生成完畢、跑完所有的壓力測試後,他將 2019 年完全隔離、不曾參與研發的數據,作為「絕對的樣本外 (Out of Sample)」進行盲測。
    • 步驟三:達標放行,否則就整盤刪除: 如果策略在 2019 年的盲測表現中無法盈利,他會毫不留情地將其丟進垃圾桶,重新設計想法,循環整個流程。

這項考驗了耐性與紀律的方法,被證明是黃金法則。今天,他實盤中交易的許多核心策略,依然是源自 2019/2020 年通過該測試並建構的經典組合。

# 模擬 Gianluca 的時空旅行回測邏輯 (Python 偽代碼)
def is_strategy_robust(strategy, workflow_year=2018):
    # 第一步:只使用 2018 年底前的數據進行策略研發與生成
    train_data = load_data_until(workflow_year)
    strategy.generate_on(train_data)
    
    # 第二步:在完全不曾參與生成的 2019 樣本外數據進行盲測
    test_data_2019 = load_data_for(workflow_year + 1)
    oos_performance = strategy.backtest_on(test_data_2019)
    
    # 第三步:如果 2019 的盲測收益率不達標,直接刪除,不留情面
    if oos_performance.profit_factor < 1.2 or oos_performance.drawdown > 0.15:
        return False # 淘汰策略
        
    return True # 通過測試,進入實盤

四、 參數不優化法則:蒙地卡羅與 3D 參數地圖的實戰運用

與許多不斷嘗試去尋求最漂亮、最新版參數的交易員相反,Gianluca 在實盤上線後,採取絕對不進行「曲線美化(優化)」的嚴格態度。

「我從不進行優化來獲得更好看的資金曲線,」Gianluca 表示:「在我的流程中,『優化 (Optimization)』只是健壯性測試 (Robustness Testing) 的手段之一,用來觀察策略偏離時的崩潰程度。」

  • Gianluca 嚴格執行且絕不妥協的篩選流程
    • 多重市場交叉回測 (Multi-Markets Retest): 將生成出的策略,直接丟入與原先不相關的其他市場或貨幣對中。如果策略在其他相關市場表現奇差無比,說明它只記住了特定市場的雜訊,必須直接刪除。
    • 全面蒙地卡羅與參數擾動 (MCs & SPP): 測試策略在面臨隨機點差波動、滑價變動、歷史成交順序被打亂時的存活機率。
    • 前進矩陣分析 (Walk-Forward Matrix): 檢驗策略在面臨市場週期性轉移(Regime Shift)時,是否依然能藉由週期性的參數調校維持穩定收益。

五、 經得起考驗的風控:如何用歷史最極端回撤 (Max DD) 克服抗壓恐懼

當實盤資金曲線開始向下彎曲,甚至遭遇連續虧損時,許多量化新手會陷入恐慌,進而手動干預並關閉機器人。Gianluca 依賴一項非常簡單而客觀的方法來克服此人性的弱點:

當一檔策略出現回撤時,他會立刻調出這檔策略當初在 SQX 中執行的 歷史最極端回撤 (Max Drawdown) 壓力測試圖譜。如果當前的實盤跌幅,並未超出歷史最極端壓力情境的臨界點,他就絕對不進行干預,甚至給予策略至少 1 年以上 的時間任其運作。他深知,唯有這樣,才能給予策略充足的空間去跑完一整個完整的市場週期。

六、 交易員心態指南:演算法是一場馬拉松,將 SQX 當作一輛一級方程式賽車

作為一名體育老師,Gianluca 認為交易和運動一樣,不是百米短跑,而是一場比拼耐力與紀律的馬拉松。他極力推薦交易員們將精神徹底專注於「流程」的建立上:

「StrategyQuant 就像一輛一級方程式賽車 (Formula 1 Car),它的設定和功能廣闊而無比龐大。你要去摸索每一個按鈕、每一個下拉選單和分頁,發揮出它的運算極限。你的創意與打破常規的思維,會是拉開你與其他交易者差距的關鍵!」

Gianluca 在實戰中不追求驚人的暴利,轉而追求「穩定的關聯性分散」與「極小的最大回撤」。在 Threadripper 強大算力的背後,驅使他長期存活的,是他的紀律、耐心以及對回測邏輯永不動搖的信任。

較新的 較舊