•   4 Followers
  •   Numbers of essay: 7
  • Today Visitors: 15
  • Total Visitors: 8165
  • About Me
  • 搭建高頻交易

      
      1443
      0
      0
       Learning
    前言

    在過去的日子里,我花費了很多時間構建屬於自己的入門級高頻交易系統。由於我學習機器學習應用金融領域已經很長一段時間了,並試圖弄清楚其在現實世界中是如何工作的。網上的資源並不多。所以我希望告訴你,如果你嘗試類似的事情,可能會遇到一些坑。我將努力用通俗的語言為你講述深入的問題,希望你能喜歡。

    問題開始

    1、高頻交易系統的基本原理是什麼?

    要建立搭建一個高頻交易系統,你必須假設「存在低效率市場」的假設是正確的。因為每個人都在同一時間關注市場,所以會有一群人找出這些低效率(例如使用統計數據),並試圖彌補它們。這意味著,等待的時間越長,在糾正這種低效率之前發現它的概率就越低。在不同的時間窗口上存在不同類型的低效率,你所看到的時間框架越小,效率就越低,面臨的競爭就更多。

    2、為什麼要搭建加密貨幣高頻交易系統?

    在我看來,標準資產市場相當糟糕。為什麼?如果你試圖作為一個單一獲取市場數據你會發現是很困難的(沒有人會免費給你,如果他們這樣做,我可以向你保證,你將比你更好的人競爭)。大多數加密貨幣的貨幣交換「借用」了已經為標準資產市場構建的基礎設施,它們的FIX API的結構與標準資產市場上的結構完全相同。此外,由於在加密貨幣交換中存在許多競爭,你將發現您必須為交易這些工具支付的傭金比常規市場上的競爭要激烈得多。例如,你可以找到經紀人,他們會因為你為市場帶來流動性而付給你錢。
    為什麼你需要原始訪問市場?這用機器學習的座右銘來回答這個問題:

    垃圾進,垃圾出


    此外,如果你想進行任何類型的量化分析,你必須控制系統上的一切,也就是:你希望在使用的數據聚合平台上完成所有的分析。當你建立一個機器學習模型時你假設他們的預測在一組邊界條件下是有效的,你越違反這些條件你的預測就越無效。因此,你擁有的最佳選擇是讓代理盡可能快地向你發送每筆交易(或訂單更改)。
    架構概述

    我之後會解釋為什麼高頻交易系統必須對故障具有巨大的容錯度。當發現這一點時,我們採用了微服務架構,因為對我們來說,這是確保多組件系統具有容錯性和可擴展性的最佳方法。可以向你保證,當你進行實時交易時,你的系統將出現無法預料的錯誤,其中一些錯誤與第三方相關,例如對代理的分布式拒絕服務(DDOS)攻擊等。當使用微服務架構時,當服務失敗時,調度程式會嘗試立即重新啓動服務,這是一個非常優雅的解決方案,當你嘗試單獨構建此類系統時。
    小建議:

    分布式拒絕服務(DDoS:Distributed Denial of Service)攻擊指借助於客戶/服務器技術,將多個計算機聯合起來作為攻擊平台,對一個或多個目標發動DDoS攻擊,從而成倍地提高拒絕服務攻擊的威力。通常,攻擊者使用一個偷竊帳號將DDoS主控程式安裝在一個計算機上,在一個設定的時間主控程式將與大量代理程式通訊,代理程式已經被安裝在網絡上的許多計算機上。代理程式收到指令時就發動攻擊。利用客戶/服務器技術,主控程式能在幾秒鐘內激活成百上千次代理程式的運行。
    零組簡介:

    數據庫:高密度的時間序列數據庫,需要能夠處理每天數十萬的數據寫入(提示:選擇一個物聯網數據庫marvels)。還需要具有可擴展性,以便能夠以不可變的分布式方式執行非常高速的重新採樣。

    Scrapper:將新的流數據寫入數據庫。

    量化模型:當Alpha出現時發出信號的量化模型。

    訂單執行器:接收量化模型的信號,與市場進行互動。有時市場流動性不強,或者你的策略必須滿足某些類型的滑點要求。因此,為了使您的系統不可變,最好有一個微系統試圖以最好的方式執行你的頭寸,這可以讓你節省傭金。例如:不使用市場訂單,而盡可能去執行限價訂單,這需要一些時間的消耗和根據市場流動性隨時的調整。

    量化分析:你必須開發一套工具來建立模型。由於這些數據來自你的基礎架構,因此你有更好的方法來確保系統的邊界條件。例如,你不能保證在高波動性的市場條件下你能完全進入市場,因此,通過建立基礎架構,你可以準確地衡量發生了什麼,什麼時候發生,並記錄下來。

    為什麼要採用這樣的微服務架構?有時你的Scrapper會因為代理中斷而失敗(在高度不穩定的情況下,會有惡意的代理啓動DDOS,使其他人更難進入市場)。我們推斷這是一種DDOS攻擊,但更準確地說,我們稱之為代理不可用。這是市場有效時的情況:
    由於broker不可用,市場效率非常低(注意下一幅圖中的y軸刻度更大):
    你可以在最後一幅圖中看到,在一個小的時間窗口中有巨大的開口。這是因為broker不可用。由於算法無法定期下限價單,從而給市場帶來穩定和流動性,因此給出了一些較高的市場訂單(無論市場條件如何,這些訂單都是可以接受的,但不能保證你會得到什麼價格),通過消耗現有的限價單來擴大價差。

    更詳細的架構概述
    我將嘗試對這個系統做一個更詳細的概述,並解釋一些設計選擇。我建議開發服務的應用程序是Docker。Docker提供了非常好的管理工具,如果你想使用類似於Kubernetes的集群,那麼Docker可以讓你更輕鬆地進行部署。

    REST API scrapper服務:該服務具有一個緩衝區,用於緩衝訂單簿的Websocket API通過流提供最近的市場事務、報價和訂單。它有多個worker的原因是為了減少broker基礎設施的中斷(如果broker服務器開始出現阻塞,這種情況發生在很長一段時間,那麼有多個冗余的worker會增加你獲得所有消息的機會)。例如,代理服務器可能會開始刪除一些連接以保持其工作負載的運行,如果有更多的worker,那麼在已經刪除的worker重新啓動時,至少保留一個連接的可能性更高。你還可以在多個IP中運行多個服務,這將帶來更多的冗余。


    Scrapper服務:Scrapper服務收集發佈在REST API上的信息,並將其寫入數據庫。它能夠跳過多個REST服務,如果檢測到錯誤的行為,就觸發其重啓。
    訂單執行服務:通過執行市場訂單或限價訂單,從數據庫的表中獲取執行操作的信號並啓動其執行。它還具有跳過多個REST服務的能力。

    量化算法服務:有模型實現,利用數據庫收集的數據生成交易信號。

    數據庫集群:從市場接收原始數據需要高帶寬的數據傳輸。重新採樣這些數據可能會非常密集,因為你需要相同的數據庫進行開發和生產,所以確實需要具有高吞吐量。

    開發和研究工具:通過在相同的系統上開發模型,你可以確保在滿足必要的邊界條件方面有更好的質量。畢竟,它現在是你的數據,你確切地知道花了多長時間來接收和處理它。

    為什麼REST API和scrapper服務是分開的?

    這個決定是基於提高系統的速度,確保系統全天候可靠性。例如當你決定你想打開或關閉一個位置時,你不想不斷查詢數據庫,通過查詢REST API直接將信息存儲在RAM(降低硬盤開銷)你能夠獲得更高的匯集頻率(這也很大程度上取決於你與交易所和所選擇的編程語言的距離)。如果REST服務由於某種未知的原因失敗,你可以重新啓動,不會丟失任何正在進行的數據流,同時有足夠的時間安全地重新啓動它。這與觸發交易信號並試圖執行交易是不同的。你需要盡快完成交易。
    總結

    在實現這樣的架構時,我遇到了許多瓶頸,同時還試圖,將我所做的模型預測獲得最佳的邊界條件。這是在實現全天候可靠性的同時獲得最佳數據的流程。

    Message Board

    kpg37785
    2019-02-23


    這個國家真是厲害,抱歉,我沒有專長,我只能領22K,對不起,我的專長只是,監視器破解指導,免費發送


    --------------------------------

    https://bit.ly/2GEQ7po

    點下載

    --------------------------------

    IP: 66.160.201.91