最佳量化交易的計算機作業系統

2022-07-31 06:33:10 字數 4408 閱讀 6146

本文在creative commons許可證下發布

我經常被問到的乙個問題是:用哪種計算機作業系統和計算軟體進行量化交易的理論研究和**實現?

我想把這個問題簡化,從挑選的計算軟體和計算庫來反推最佳使用的計算機作業系統。簡而言之,就是在本文撰寫的時候而言,如果你想進行基於任何嚴肅的數學理論和金融量化交易研究理論,這裡特指機器學習或者深度學習。並且需要在本地研究機器上使用桌面版本,在實時交易vps或者同等裝置上使用伺服器版本的話。這種情況下,為了避免這種形式的研究所需的前沿計算庫出現問題的最直接的方法是——ubuntu 18.04lts linux。然而ubuntu/linux對於我們中的許多人來說可能並不熟悉,因為windows仍然是家庭和現代辦公環境中計算機作業系統的實際選擇。

而且,考慮到個人研究的目標是花盡可能多的時間研究和開發量化交易策略,而不是閱讀成堆的程式設計書籍,那麼學習乙個對個人來說全新的作業系統和相關的命令列介面(cli)是否值得?就是乙個仁者見仁智者見智的問題了。

顯然,這將取決於自己的情況。對於自己的交易風格,首選的交易研究方法,選擇的程式語言和個人設計的交易模型的複雜性都是應該考慮的點。我想說的是,對於目前大多數人選擇的基於python的科學計算和量化研究來說,學習gnu\linux和cli將為個人的量化生涯帶來巨大的回報。

現在讓我們來看看量化交易研究中可能使用的這三種主要作業系統。

一、microsoft windows

在本文中,我假設幾乎所有的讀者(如果不是所有的話)都完全熟悉windows,所以我覺得不需要解釋這裡是什麼,不像下面討論的其他兩個作業系統!

1、有利於量化交易的優點?

windows通常很容易使用(大多數新計算機都將其作為預設作業系統提供),而且許多在售的基於圖形介面的定量交易軟體都是專門為windows編寫的。僅此一點,它就成了許多定量交易的有力競爭者。

在過去,windows以不定時的崩潰(著名的藍屏)而聞名,而新版的windows在久經考驗的windows nt核心上構建後,它已經變得非常可靠了。

此外,通過基於雲服務(如microsoft azure或 amazon web services),可以非常迅速的把基於圖形使用者介面的量化交易系統從windows桌面轉移到windows伺服器。

所有主要的關聯式資料庫都在windows受到支援,這包括mysql、postgresql、oracle和微軟自己的sql-server。這些**商都為這些資料庫提供了直觀的圖形介面。

2、它的缺點?

windows的主要缺點可以說是成也蕭何,敗也蕭何——圖形介面。圖形介面是對於所有桌面應用的最理想的環境手段。但是對於量化交易而言,尤其是高頻交易模型而言,模型嚴重依賴於自動任務管理和排程,這種情況最高效的手段恰恰是命令列工具尤其是類似於unix的cron工具。這樣使得windwos的吸引力大大降低了,因為在所需的策略自動化需要的執行頻率和程式的執行許可權的優先級別調節面前,windows自豪的圖形介面功能就成了它最大的短板。

同樣在提供對python友好方面體現出不足。雖然目前anaconda python發布包在解決這個問題上做出很大程度的努力。但是仍然有必要從零開始編譯c/c++**,這時,這些庫檔案通常會預設假設存在c++編譯器,比如gcc。這時,通常我們會安裝乙個類似於cygwin的工具。但是,一旦你的研究工作需要通過與c/c++打交道來利用python庫的時候,我覺得不如安裝乙個gnu\linux,而不是試圖在windwos中複製linux的api介面。

現在的還有乙個小問題是,windows也非常需要資源,因此如果需要絕對的執行速度,windows可能會比同等的linux系統慢一點(特別是在伺服器版本方面)。

mac os x是蘋果系列mac電腦上的作業系統。它實際上是乙個被稱為bsd的unix發行版的經過大量修改的版本。這意味著它實際上對gui和cli都有一種「兩全其美」的方法。

它提供了乙個非常直觀的基於手勢的gui,但也非常受軟體開發人員的歡迎,因為它內建了類似linux的功能。

雖然我在gnu\linux環境中做了大部分的量化交易的開發工作。但是我個人還是傾向於使用macbook air編寫python,並且已經有些年頭了。

1、有利於量化交易的優點?

它的優勢主要在於它有乙個舒適的gui和強大的cli,這一點上它類似於linux。因此,使用直接虛擬環境方法或與預編譯工具包(如anaconda)一起,很容易設定基於python的量化研究環境。

它的環境下的

cli帶來了linux系統中所有指令碼編寫和自動化的能力,由於作業系統允許與已知的生態系統(如microsoft office)輕鬆相容。因此對於某些使用者來說,這可能是乙個「值得交易」的要求。

另外,mac系統也以極其可靠和穩定而聞名。提供乙個個人軼事,我曾經持續251天沒有重啟我的macbook air。在我寫這篇文章的時候,它已經執行了81天了!

2、它的缺點?

也許mac os x的主要缺點是,由於蘋果採用面向消費者的商業模式,沒有乙個與量化交易模式相當的伺服器環境可以輕鬆部署。相反,需要將模型移植到linux伺服器發行版(比如ubuntu伺服器)。

這是乙個非常重要的問題,因為包和部署方法的差異可能導致災難性的生產環境錯誤,從而使量化戰略/投資組合失敗。我個人認為這是極有可能在乙個快速發展的生產環境中發生的。

因此,常見的解決方法是使用虛擬機器(或docker等工具)在幾乎相同的本地設定上進行開發。然而,這就引發了這樣乙個問題:為什麼首先要使用mac,而不是使用linux的本地機器!

事實上,對於乙個特定的購機金額,一台mac膝上型電腦/台式電腦通常不如另一家製造商(如聯想)的同類機器強大。因此,你要為蘋果的「品牌」付出比獲得同樣的計算能力更多的金錢代價。

對於基於深度學習的gpu計算的特定用例,mac可能很難嘗試和配置。從零開始構建一台台式電腦並為此目的在上面安裝linux通常要簡單得多。

三、gnu\linux

微軟的windows有乙個垂直整合的概念,所有元件,快速易用性,圖形介面和抽象的複雜性都是圍繞以使用者為中心。因此對於幾乎所有的日常用例來說,這是乙個完美的方法,這也是windows和微軟在歷史上取得如此巨大成功的主要原因。

linux生態系統的結構相當不同。它的原理是基於許多不同元件的分層互動,使用開放和免費可用的**、圖形介面和命令列介面的混合模式,這樣使得使用者獲得使用指令碼執行功能強大、複雜的操作的能力。此外,還有多個linux發行版,它們都以不同的方式混合和匹配軟體元件。這對於新手來說是非常混亂的,因為他們大多習慣於windows或mac os x的「一刀切」包打天下的方式。

前面提到的ubuntu最初是在另外乙個強大的linux發行版debian的基礎上構建起來的,而且經過多年的發展,ubuntu已經變得更容易安裝和試用。它已經發展成為為基本的文書處理、電子**和一般的「辦公室」任務提供幾乎「開箱即用」的解決方案。這使得從windows或mac過渡到正常桌面使用更加容易。

1、有利於量化交易的優點?

linux的主要優勢在於它的cli功能。它擁有乙個非常強大的cli和shell指令碼引擎,允許複雜的流程自動化,包括資料管理、回測引擎開發、**互動和一般研究能力。

如果你想用先進的機器學習和深度學習庫在定量金融建模的前沿進行研究,特別是對於深度學習,幾乎整個研究生態都是使用tensorflow和pytorch在python中進行的,這兩種方法都有非常重要的安裝需求。事實上,據說,這些庫很難在windows上使用gpu,因此linux是唯一現實的選擇。

使用linux,可以非常直接地為量化交易模型部署過程提供複雜的軟體開發覆蓋。在linux/cli環境中,版本控制和持續整合的所有功能都很容易獲得。

因此,絕大多數頂級量化對沖**幾乎只使用linux和定製開發環境進行研發,這就並非偶然。對於那些希望進行大量定量或基於機器學習和深度學習的交易研究的人,我強烈推薦使用ubuntulinux作為您的作業系統。

2、它的缺點?

使用ubuntu/linux最大的問題是,大部分功能都是通過大量使用命令列介面和指令碼來實現的。這些技能可以相對快速地學會,但真正的掌握可能需要數年的時間。linux有一種「權宜之計」的理念,這可能非常有趣,也可能非常煩人,這取決於您的目標。

除此之外,linux在出現錯誤時也不太友好。機器學習和深度學習在定量交易研究中依賴於一些前沿的庫,比如與gpu互動的tensorflow/pytorch。因此,安裝驅動程式、庫和其他工具可能會導致問題。

對於新手來說,這樣的問題很難處理,因為錯誤訊息相對來說是不可理解的。這對於那些習慣了windows和mac的人來說是非常令人沮喪的。

linux對使用者/管理許可權有乙個更為明確的方法,這通常會阻礙那些習慣於在windows/mac os x上管理許可權的新手。還有另乙個混亂的**是軟體安裝包依賴關係管理,其中某些包(特別是python庫)可以依賴於安裝的必要系統包並且正確配置。安裝過程中可能會出現模糊的錯誤訊息,需要有一定程度的經驗才能進行除錯。

結論:windows和mac os x非常適合大多數基於圖形使用者介面的定量交易研究。然而,它們在很大程度上不適合在技術前沿進行基於深度學習和機器學習的量化研究。

linux是實現大量定量深度學習和機器學習的研究工作的唯一可行方法,而且一旦獲得命令列的專業知識,它就非常強大。但是,它不能處理由於許可權或依賴關係問題而導致的錯誤。此外,混合元件的理念可能會讓那些習慣於包打天下的計算機作業系統的人感到困惑。

計算機作業系統

為什麼要有作業系統 計算機系統是乙個複雜的系統,如果每位程式設計師在程式設計時都必須掌握計算機系統的所有細節,就會嚴重影響程式設計師的開發效率 作業系統可以對計算機硬體加以管理和優化使用,為使用者程式提供更好的執行環境。作業系統以及其位置 作業系統組成 作業系統功能 應用程式直接與作業系統及其抽象打...

計算機作業系統

實驗一 熟悉linux作業系統 程序觀測 實驗目的 1 了解在linux作業系統中程序的特點和表現形式 2 掌握linux檢視程序的方式與方法 3 在乙個程序中建立另乙個程序的方法 4 掌握父程序和子程序的關係和fork的用法 實驗內容 1 編寫乙個簡單的程式,使用ps或top工具觀察該程序的的id...

計算機作業系統

1 單選題 作業系統的主要功能是管理計算機系統中的 選項 a 程式和資料 b 資源 c 作業 d 程序 答案 資源 2 單選題 關於多道批處理作業系統,以下說法錯誤的是 選項 a 可提高系統資源的利用率 b 可提高計算機系統的工作效率 c 可提高系統吞吐量 d 在作業執行時使用者可以直接干預作業的執...