Python

改進交易機器人監控的建議?

  • June 11, 2019

我只是在尋找技巧和想法,以使我的系統更專業一點。

結構:botting 腳本託管在 VPS 上。在另一個 VPS 上託管了一個數據庫。有一個定期在本地託管的 web 應用程序。

機器人腳本執行分析和交易,並定期用新值更新數據庫(MongoDB);績效指標、職位和目前狀態/錯誤。

webapp 連接到 MongoDB,拉取最新數據並在一個簡單的數據表中沿著幾個簡單的圖表顯示(我還添加了一個簡單的功能,可以讓我暫停某些交易所和帳戶的腳本)。

這是一個非常模糊/模棱兩可的問題,因此它可能會因過於寬泛而被標記,但我正在尋找改進系統的一般建議(我已經執行它近兩年了,我只是在尋找方法改進它;不僅僅是為了提高性能,還因為我想提高我的技能和方法)。

對於初學者,有人可能會建議 SQL over MongoDB(我目前不保存交易數據;這是因為我交易的一些交易所缺乏足夠的 API 支持——但我正在考慮開始,因為它允許因為我有更多數據,所以在稍後階段進行更好的分析。)

我還在不同的伺服器上執行數據庫和實際腳本,也許有一種方法可以讓我簡單地將它們一起執行,從而稍微提高性能(現在我已經將它的結構設置為更新數據庫值以可預測的間隔發生並且不會中斷任何週期)。

我很樂意回答任何詢問。哦,我應該注意,我充其量只是一個平庸的程序員(主要是用 Python 程式)。

沒有正確的方法可以做到這一點。我可以給出的一些通用提示是:

運營與戰略監控

在第一次通過時,您需要區分這兩者,因為用於操作和策略監控的工具會有所不同。

執行監控

操作監控可能包括以下內容:

  • 確保您的 VPS 仍然存在的心跳,某種通知系統(可以是帶有 Twilio 的文本消息系統、聲音警報、帶有 IMAP 的電子郵件通知、基於 Web 的儀表板上的圖表)。
  • 在集中位置安排自動日誌記錄和系統日誌的持久性。更大的操作可能會使用 ELK(Elasticsearch、Logstash、Kibana)等工具。
  • 一個更簡單的操作可能只是使用 cron 作業來記錄、壓縮和發送系統日誌文件(例如 in /var/log)到日誌伺服器或您的工作站。這裡經常遇到的工具和守護程序包括fluentd、、、collectdNagios。
  • 您還可以建構自己的數據庫,以利用現成的持久性、複製和冗餘保證以及連接組件。Mongo 在這裡很好,但 Postgres 對非結構化數據也有很好的支持。Redis 具有對 pub-sub 語義的本機支持的優勢,而在 Mongo 中,您可能必須使用可尾游標複製該行為。InfluxDB 也傾向於與這裡的典型工具一起使用。
  • 某種用於 CPU 和記憶體使用率的視覺化和儀表板等。您的應用程序中的記憶體洩漏可能會導致您的伺服器癱瘓,並且 VPS 往往資源匱乏。

策略監控

策略監控的很大一部分是知道要記錄什麼。一個相關的問題是決定磁碟和網路上的序列化策略,其中有比數據庫管理系統更明智的選擇。

不幸的是,這有點像先有雞還是先有蛋的問題,在成熟的生產環境中看到它,或者知道你的投資組合在規模上會是什麼樣子,這將為你設計這個提供巨大的先機。如果您不知道當您每天交易數十萬筆訂單和數十億名義風險時您的策略會是什麼樣子,那麼通過第一原則來解決它會浪費您很多時間。

我可以在這裡給出的一些普遍建議是:

  • 確保您的日誌記錄格式具有一定的向後兼容性。
  • 不要過早地優化,每一年的 CS 畢業生都會嘗試手工製作自己專有的二進制序列化格式。
  • 人類可讀性(json、unicode 明文)、自描述格式(Avro)、介面描述語言(thrift)和多語言支持(protobuf)都是非常理想的屬性,決定什麼對你最重要。
  • 下載一些免費的交易平台並使用它來獲取您將記錄哪些類型的欄位的靈感,例如訂單方、時間戳、訂單數量、有效時間、符號等都是相當標準的,您可以從這些事後建構更複雜的指標在一天結束時或更晚。

引用自:https://quant.stackexchange.com/questions/46012