很多交易者都想要在外彙市場建議自己的交易策略,但國際金融局勢動蕩不安,外彙世界有時也會讓人不知所措,EBC希望這篇文章爲正在做交易的您,提供了一些關于如何開始自己的外彙交易策略的思路。
本文的分享者是Rogelio ,一位積極進取的全棧工程師,在多種語言、框架和平台方面擁有 13 年以上的工作經驗。
一開始,你可能知道,外彙市場是貨币對之間的交易。但你可能沒有意識到它是世界上流動性最強的市場。幾年前,在我的好奇心的驅使下,我創建了一個模拟賬戶并在Meta Trader 4交易平台上進行模拟交易,這是我在外彙算法交易世界踏出的第一步。
經過一周的模拟交易,我的錢幾乎翻了一番。在我自己小有成就的交易激勵下,我進行了更深入的研究,也注冊了一些外彙論壇。我每天花好幾個小時研究算法交易系統(決定你應該買入還是賣出的規則集)、自定義指标、市場情緒等等。
我的第一個客戶
巧合的是,在我研究算法交易的時候,聽說有人想找一個軟件開發人員來自動化一個簡單的交易系統。當時我正在學習Java 中的并發編程(線程、信号量和所有垃圾收集)。我認爲這個自動化系統不會比高級數據科學課程工作複雜得多,所以我接下來了這份工作。
客戶想要使用MQL4構建的算法交易軟件,MQL4是 MetaTrader 4 平台用于執行交易相關操作的函數式編程語言。MQL5目前也已經發布了。正如你所料,它解決了 MQL4 的一些問題并帶有更多内置函數,這讓交易更簡單。
交易平台(本例中爲 MetaTrader 4)的作用是提供與外彙經紀商的連接。然後,經紀商提供一個平台,提供有關市場的實時信息并執行買/賣訂單。對于外彙交易新手,以下是是基本交易界面信息:
通過 MetaTrader 4,你可以使用内部函數訪問所有這些數據,可訪問各種時間範圍:每分鍾 (M1)、每五分鍾 (M5)、M15、M30、每小時 (H1)、H4、D1、W1、MN。
當前價格的變動稱爲tick。換句話說,一個tick變動是一個貨币對買入價或賣出價的變化。在活躍的市場中,每秒可能有許多ticks。在平穩的市場中,可能有幾分鍾沒有一個tick。
當你通過這樣的平台下訂單時,你買入或賣出一定數量的某種貨币。還可以設置止損和止盈限額。止損限額是指在結束交易之前,你能承受的最大點數(價格變化)的損失。獲利限制是指在兌現之前,你将積累獲利的點數。
客戶的算法交易規範很簡單:他們想要一個基于兩個指标的外彙機器人。這兩個指标需要在嘗試定義市場狀态和做出交易決策時非常有用,因爲它們基于過去的數據(例如,過去n天的最高價格)。MetaTrader 4 内置了許多指标,但是,我客戶感興趣的指标來自自定義交易系統。
他們希望每次這些自定義指标中的兩個相交時進行交易,并且僅在某個角度時進行交易。
着手開始做
當我着手開始做時,我了解到 MQL4 程序具有以下結構:
【預處理器指令】
【外部參數】
【全局變量】
【初始化函數】
【去初始化函數】
【啓動功能】
【自定義功能】
start 函數是每個 MQL4 程序的核心,因爲它會在每次市場變動時執行(因此,該函數将在每個價格變動時執行一次)。無論你使用的時間範圍如何,都是如此。例如,你可以在 H1(一小時)時間範圍内操作,但 start 函數将在每個時間範圍内執行數千次。
爲了解決這個問題,我強制函數在每個周期單位執行一次:
獲取指标的值:
決策邏輯,包括指标及其角度的交集:
發送訂單:
回測
一旦我建立了我的算法交易系統,我就想知道:1)它的執行是否适當2)它使用的外彙交易策略是否有用
回溯測試是在過去的事件下測試特定(自動化或非自動化)系統的過程。換句話說,你使用過去數據代替現在來測試你的系統。
MT4 自帶一個用于回測外彙交易策略的工具(如今,有更多專業工具提供更強大的功能)。首先,你設置時間表并在模拟環境下運行你的程序;該工具将模拟每個分時,知道對于每個單位,它應該以特定價格開盤,以特定價格收盤,并達到指定的高點和低點。
将程序的操作與曆史價格進行比較後,你将對它是否正确執行有一個很好的了解。
通過回溯測試,我檢查了外彙機器人在一些随機時間間隔内的回報率;毫無疑問,我知道我的客戶不會賺錢——他選擇的指标以及決策邏輯都沒有盈利。作爲示例,以下是在 M15 窗口上運行程序進行 164 次操作的結果:
請注意,我們的餘額(藍線)在其起點以下視爲結束。
提示:說一個系統“有利可圖”或“無利可圖”并不總是正确的。通常,系統會根據市場的“情緒”在一段時間内有利/無利可圖,這可以遵循許多不同的圖表模式:
參數優化
盡管回溯測試讓我對這個 FX 機器人的實用性産生了懷疑,但當我開始嘗試使用它的外部參數并注意到和整體回報率産生巨大差異時,我就産生好奇。這門特殊的科學被稱爲參數優化。
我做了一些粗略的測試,試圖推斷外部參數對回報率的重要性,并得出了這樣的結論:
或者,清理數據後:
你可能認爲(正如我所做的那樣)你應該使用參數 A。但是這個決定并不像看起來那麽簡單。具體來說,請注意參數 A的不可預測性:對于小錯誤值,其返回值會發生巨大變化。換句話說,參數 A 很可能會高估未來的結果,因爲任何不确定性、任何變化都會導緻更差的性能。
但确實,未來是不可控的,所以參數A的返回也是不确定的。事實上,最好的選擇是依靠不可預測性。通常,最大回報較低但可預測性較好(波動較小)的參數比具有高回報但可預測性較差的參數更可取。
唯一可以确定的是,你不知道市場的未來,并且根據過去的數據認爲你知道市場的表現,這種判定是錯誤的。反過來,你必須在外彙交易中承認這種不可預測性。
這并不一定意味着我們應該使用參數 B,因爲即使參數 A 具有較低回報,但也比參數 B 表現更好;這隻是爲了向你展示優化參數可能會導緻測試誇大未來可能的結果。
外彙算法交易注意事項
自從有了第一次算法外彙交易經驗以來,我已經爲客戶構建了幾個自動交易系統,我可以告訴你,總有探索的空間和進一步的優化分析要做。例如,我最近建立了一個基于尋找所謂“Big fish”運動的系統;也就是說,在微小的時間單位内,巨大的點數變化。這是一個讓我着迷的研究。
構建你自己的外彙模拟系統是了解更多外彙市場交易的最佳選擇,而且可能性是無窮盡的。例如,你可以嘗試将價格變化的概率分布解讀爲一個市場(例如歐元/美元)中波動率的函數,并且可能使用每個波動率狀态的分布創建蒙特卡羅模拟模型,使用任何你想要的精确程度。
進一步閱讀
如今,有大量工具可用于構建、測試和改進交易系統自動化:用于測試的Trading Blox、用于交易的NinjaTrader、用于編程的OCaml,僅舉幾例。
以下是我向程序員和熱心交易者推薦的一些文章:
BabyPips:如果你不了解外彙交易,這就是起點。
海龜之道,由 Curtis Faith 撰寫:在我看來,這就是外彙聖經。一旦你有一些交易經驗并了解一些外彙策略,那就可以閱讀它。
Technical Analysis for the Trading Professional — Strategies and Techniques for Today’s Turbulent Global Financial Markets作者:Constance M. Brown
智能交易編程系統– 在 MQL 中爲 MetaTrader 4 創建自動交易系統,作者:Andrew R. Young
交易系統 – 系統開發和投資組合優化的新方法,Trading Systems – A New Approach to System Development and Portfolio Optimisation
作者 Urban Jeckle 和 Emilio Tomasini:技術性很強,非常專注于外彙測試。
A Step-By-Step Implementation of a Multi-Agent Currency Trading System作者:Rui Pedro Barbosa 和 Orlando Belo:這個非常專業,描述了您可以如何創建交易系統和測試平台。
删除后无法恢复
删除后无法恢复