Thursday, May 19, 2016

外匯 算法交易 的實用 故事 的 工程師






+

外匯算法交易:實用故事的工程師 正如你可能知道,外匯(外匯)市場上用於貨幣對的交易。 但你可能不知道,它是最具流動性的市場在世界上。 幾年前,我的好奇心驅使,我把我的第一個步驟進入外匯交易算法的世界創建一個模擬賬戶和打出來的模擬(用假錢)的MetaTrader 4的交易平台。 一個星期的交易“後,我幾乎翻了一番我的錢。 通過我自己的成功的激勵下,我進一步挖掘,並最終簽署了一些論壇中。 不久,我花時間閱讀有關的算法交易系統(即確定是否應該購買或賣出規則集),自定義指標。 市場情緒,以及更多。 我的第一個客戶 大約在這個時候,巧合的是,我聽到有人在試圖找到一個軟件開發自動化的簡單的交易系統。 這是早在我的大學時代,當我正在學習如何用Java並發編程(線程,信號量,和所有的垃圾)。 我想這自動化系統,這可能不會比我高級的數據的科學課程的工作要複雜得多,所以我詢問了工作來到船上。 客戶希望建成MQL4系統。 所使用的MetaTrader 4的平台進行股票相關的操作函數式編程語言。 MQL5已被釋放。 如你所料,它解決了一些MQL4的問題,並帶有更多的內置功能,使生活更輕鬆。 該交易平台(MetaTrader 4的,在這種情況下)的作用是提供一個外匯經紀商的連接。 該券商則提供了實時信息的平台對市場及執行您的買/賣單。 對於讀者不熟悉外匯交易,這裡是一個由數據饋送提供的信息: 通過MetaTrader 4的,您可以訪問所有這些數據與內部功能,方便在不同的時間框架:每分鐘(M1),每五分鐘(M5),M15,M30,每隔一小時(H1),H4,D1,W1,MN 。 目前的價格的運動被稱為蜱。 換句話說,一個刻度是在投標的變化或詢問價格的貨幣對。 在活躍的市場,有可能是每秒眾多蜱。 在緩慢的市場,可以有幾分鐘沒有打勾。 蜱是一個外匯機器人的心跳。 當您通過這樣一個平台下訂單,你買入或賣出某種貨幣的一定體積。 您還可以設置止損和止盈限制。 止損限額是點子(價格波動),您可以買得起一個貿易放棄之前失去的最高金額。 該止盈限制是個點,你會積聚在你有利兌現之前的量。 如果您想了解更多關於交易的基本知識(例如點數,訂單類型,傳播,滑脫,市場訂單,更多),在這裡看到。 客戶端的算法交易規範很簡單:他們想基於兩個指標,一個機器人。 對於背景下,指標是非常有益的嘗試定義一個市場狀態,並做出交易的決定時,他們正在根據以往的數據(在最近n天例如最高價值)。 許多前來內置到元交易4。但是,我的客戶有興趣的指標來自於一個自定義的交易系統。 他們想交易,每次兩個相交這些自定義指標,也只有在一定的角度。 當我得到了我的手臟,我才知道,MQL4程序具有以下結構: [預處理器指令] [外部參數] [全局變量] [初始化功能] [DEINIT功能] [啟動功能] [自定義功能] 啟動功能是每一個MQL4程序的心臟,因為它是每次市場波動(ERGO,此功能將每個時鐘週期執行一次)執行。 這樣的話,無論你使用的時間框架。 例如,您可以運行在H1(一小時)的時間內,還沒有啟動功能將每次的時間內執行數千次。 要解決這個問題,我不得不一次每個週期單位來執行功能: 獲取的指標值: 該決策邏輯,包括對指標及其角度交集: 發送命令: 如果你有興趣,你可以找到在GitHub完整的,可運行的代碼。 回測 有一次,我建我的算法交易系統,我想知道:1),如果它是適當的行為; 2)如果這是任何好處。 回溯測試是根據過去的事件檢測的特定(自動或沒有)系統的處理。 換句話說,您可以使用過去作為本代理測試系統。 MT4自帶的回溯測試外匯交易系統(現在,有更多的專業工具,提​​供更強大的功能)可以接受的工具。 首先,你設置你的時間框架和模擬下運行您的程序; 該工具將模擬各種蜱知道每個單位應該開門迎客一定的代價,收於一定的價格,並達到規定的高點和低點。 比對歷史價格的程序操作後,你就會有一個很好的意義是否被正確的執行。 他會選擇的,隨著決策邏輯的指標,沒有盈利。 從回溯測試,我已經簽出了機器人的回報率一​​段隨機時間間隔; 不用說,我知道我的客戶是不會發財與它 - 他會選擇的,隨著決策邏輯的指標,沒有盈利。 作為樣品,在這裡是在M15窗口164的操作運行程序的結果: 請注意,我們的資產負債(藍線)完成低於其出發點。 有一點需要注意:說一個系統是“盈利”或“盈利”並非總是真實的。 通常情況下,系統是(聯合國)盈利立足於市場的“情緒”的時間段: 參數優化,其謊言 雖然回溯測試已經讓我警惕這種機器人的實用性,我很感興趣,當我開始玩弄它的外部參數,發現在整體收益率差異很大。 這種特殊的科學被稱為參數優化。 我做了一些粗略的測試,試圖推斷外部參數的意義上的收益率,並提出了這樣的事情: 或者,清理: 你可能會認為(像我一樣),你應該使用參數A. 但決定並不像看上去那麼簡單。 特別要注意的參數A的不可預知性:對於小誤差值,它的返回急劇變化。 換句話說,參數A是非常有可能,因為任何不確定性,預測未來的結果,任何轉變都將導致更差的性能。 不過說實在的,未來是不確定的! 因此參數A的收益也是不確定的。 最好的選擇,其實是依靠不可預測性。 通常情況下,以較低的最大的回報,但優良的可預測性(較少波動)的參​​數將是優選的具有高回報,但可預測性差的參數。 你可以肯定的唯一的事情是,你不知道市場的未來,並認為你知道市場會如何執行基於過去的數據是錯誤的。 反過來,你必須承認這種不可預知性。 思考你知道市場會如何執行基於過去的數據是錯誤的。 這並不意味著我們應該用參數B,因為參數A的甚至更低的回報率表現比參數B更好; 這只是告訴你,優化參數可導致在誇大未來可能出現的結果的測試,而這種想法是不是很明顯。 總體外匯算法交易注意事項 自第一次算法外匯交易的經驗,我已經建立了幾個自動交易系統的客戶端,我可以告訴你,總有空間去探索。 比如,我最近建成的基礎上尋找所謂的“大魚”的動作系統; 也就是說,在時間很小很小的單位巨大的點數變化。 這是一個主題,讓我著迷。 建立自己的模擬系統是為了更多地了解外匯市場的一個很好的選擇,而且可能性是無止境的。 例如,你可以嘗試破譯的價格變化作為波動函數的概率分佈在一個市場(歐元/美元為例),並可能使用每波動狀態的分佈進行蒙特卡羅仿真模型,採用精度不論何種程度 你想。 我將離開這個作為一個練習的渴望讀者。 外匯世界可以壓倒一切的時候,但我希望這寫起來給你如何去獲得一些積分。 延伸閱讀 如今,有一種工具來構建,測試,完善交易系統自動化控制系統一個巨大的游泳池:交易blox的測試,NinjaTrader交易,OCaml的編程,僅舉幾例。 我已經廣泛地了解神秘的世界是外匯市場。 下面是一些寫起坐,我建議程序員和熱心讀者:



No comments:

Post a Comment