量化金融程式語言
幾週後,我開始研究量化金融。在這段時間裡,我可以發現很多東西,有了這些東西,我想到了很多問題。許多新聞或經濟期刊/雜誌都寫了關於 HFT/算法交易的文章。他們中的大多數人說公司或軟體開發人員更喜歡使用 C++。在一些文章中,作者談到了 Java、C#、C 甚至 ASM。我試圖找到 C++ 的原因,但沒有成功。這個話題沒有提供我需要的答案(為什麼 C++ 仍然是量化金融中非常流行的語言?)
以下是我的問題: 1. 為什麼選擇 C++?有些公司可能會使用 ASM(我只能想像 HFT 中的 ASM,其中毫秒起作用),這很好。但在中頻交易或算法中?是因為速度嗎?我尋找 C++ 的量化金融庫,但找不到很多。唯一的就是 QuantLib、MatLib 和 TA-Lib。但沒有圖表 API/庫或教程。好像沒有人做教程。2、為什麼有些人選擇Java?我知道,Java 是一種非常流行的語言,並且有很多 API/Lib,並且社區正在成長。但是如果速度可能會起作用,那麼 Java 不可能是最快的(因為虛擬環境)。還是我錯了?3. 為什麼沒有人使用 Python 進行中頻交易或算法交易?Python 有很多 APIs/Libs,比如 MatLib、TA-Lib、Pyqtgraph。好吧,我不得不說,Python 並不是最快的。4.為什麼 C++ 仍然是量化金融中非常流行的語言?,有人聲稱 C# 可能更適合量化金融的發展。這是真的嗎?庫、API、教程等怎麼樣?
我的最後一個問題是,選擇量化金融語言的重要屬性是什麼?我不談論 ASM,因為它是最快的語言,並且它用於必須快速進行的非常複雜的計算。但是關於 C++、C#、Python 和 Java 呢?對我來說,重要的是應該有庫和教程/範例。最開始,我是從 python 開始的,但在我讀完之後,我對 Python 不再有把握了。
我想你可能會在量化程式的未來語言中找到這個答案?有用。
人們把這個問題弄錯了,因為他們總是最終討論這些語言的理論優勢,而不是這些語言的實際用途。
從理論上講:
- Haskell很優雅,具有許多理論優勢(語言簡潔、正交性、參數多態性、ADT、高階函式、智能編譯器),已經存在 25 年,但在金融領域仍然不是主流。
- Python是一門醜陋的語言。語法因其表現力而備受推崇,但GIL、動態類型、物件導向範式等設計決策本質上是反並行的,而且幾十年後,當我們在每個處理器上擁有數百個核心時,我們的孩子將會嘲笑這種語言的晦澀和過時(以及其他諸如磁片之類的東西)。
然而今天幾乎每個人都會鼓勵你學習 Python。為什麼?
一種語言(或任何技術)的未來取決於它的社區、它的庫和開發工具的豐富性以及該語言中遺留程式碼的自我延續性,而不是它的理論優勢。我們可以寫關於我們如何討厭Java的文章;ROOT和Boost庫;XML的冗長,但這些東西仍然存在,因為它們已經獲得了大量願意圍繞它們建構生產強度工具或庫的使用者。**F#**等數十種函式式語言會來來去去,但 C++ 幾乎肯定會繼續存在,因為 C++ 中有大量遺留程式碼。此外,C++ ‘11 在理清其發展道路上的理論失誤方面是一個巨大的里程碑。
我會謹慎對待一些選擇:
- 圍繞並發和函式範式建構的語言:Scala、F#。我想說要謹慎使用它,因為它已在 Dropbox、Lime、Tower Research、Credit Suisse 等公司用於生產,但考慮到目前趨勢,這些語言需要更長的時間才能成為主流使用在處理器架構中。我很難告訴你現在在這些語言上投入時間是否會在 5 年後得到回報,但我們似乎都同意這些語言最終會。
- 特定領域的語言:Julia。不幸的是,Julia 用“C 速度數值內循環”來推銷自己。它吸引了與這些 Julia 使用者爭論這無關緊要的 Python 人群的同一子集,因為他們總是可以放棄 Cython。兩種人群都支持注定失敗的範式並吸引低質量的開發人員。(我說不幸的是,因為 Julia 有很多人們沒有意識到的東西:類型參數多方法、對稱協程、與外語的干淨介面、Lisp 影響和元程式支持等)
有了這個,我鼓勵一些選擇:
- 大哥支持的語言:Go、Swift、C#。除了Google的支持,圍棋在中國已經非常流行;微軟通過開源 C# 向前邁出了一大步;並且總是圍繞 Apple 的核心語言產生大量高質量的 UI 開發工具。
- 旨在取代 C/C++ 作為系統級程式語言的語言:D、Nimrod。D 已經得到 Facebook 的支持,Nimrod 保留了 Python 語法的表現力,同時實現了令人印象深刻的基準測試並被用於某些系統級程式項目。但請注意,兩者仍然依賴 GC 方法進行記憶體管理。
上述任何一項是否已經達到了優秀開發人員的臨界質量?我不這麼認為。真正的解決方案是程式語言真的不難學!更重要的是你學會瞭如何設計程序而不是特定的語言。花時間學習 6 種主要的語言範式:
- 命令式程式 (C) 和類抽象(C++、C#、Java)
- 功能抽象(Lisp、ML、F#)
- 聲明式規範(C++ 模板、Haskell、Prolog)
- 句法抽象(Lisp)
- 並行性(Cilk、SISAL、Clojure、Erlang)
- 協程(C#、F#、Haskell、Scheme、Icon)
量化交易經常呼叫這三個核心領域的概念:
- 算法、設計模式和資料結構:B 樹、跳過列表、記憶化、DP 等。
- 系統程式:記憶體定址、彙編、連結、堆/棧、記憶體等。
- 數據庫:規範化、兩階段送出、複製、鏡像、模式設計等。
如果您更接近頻譜的量化開發人員:
- 分佈式系統
- 作業系統
- 網路
不幸的是,這個問題沒有正確的答案,就像你周末應該開什麼車一樣。
C++ 是量化金融領域的流行語言,但它通常(但不總是!)僅用於建構應用程序主幹,例如衍生品定價。為什麼選擇 C++?C++ 是一個不錯的選擇,因為 C++ 是獨立於平台的,我們可以為 Linux、Mac、Windows 等本地建構期權定價程式碼。QuantLib 就是一個很好的例子。
C# 是金融中另一種非常流行的語言。我們可以使用 C# 創建一個交易應用程序,解析來自另一家銀行的 XML 數據,創建一個 Web 伺服器等。當然,我們也可以使用 C# 進行衍生品定價,但我們可能無法優化性能。在 C++ 中,我們可以使用 OpenMP 拆分工作負載,向量化蒙地卡羅循環等,使用 C# 更難。
在量化金融中,C# 絕對不是比 C++ 更好的語言。這真的取決於你想做什麼。例如,沒有人會使用 C# 進行 HPC 交易。
並非量化金融領域的每個人都可以進行核心程式,大多數人都不會。Python(Excel VBL 或 R)對他們來說會是更好的語言。
如果您想為第一份工作學習一些東西,請從 C++ 開始。嘗試理解 QuantLib。