這是基於量化金融領域不同主題的 Jupyter 筆記本集合。
幾乎! :)
這只是我認為有趣的主題和演算法的集合。
它包含了一些現在不那麼流行的主題,但它們可能非常強大。通常,PDE 方法、Lévy 過程、傅立葉方法或卡爾曼濾波器等主題在從業者中不太受歡迎,他們更喜歡使用更標準的工具。
這些筆記本的目的是透過互動式 Python 實現展示這些有趣的主題,展示它們的實際應用。
不適合絕對的初學者。
這些主題需要隨機微積分、金融數學和統計學的基礎知識。 Python 程式設計的基本知識也是必要的。
在這些筆記本中,我不會解釋什麼是買權,或什麼是隨機過程,或是偏微分方程。
然而,每次我介紹一個概念時,我也會加入一個指向對應維基頁面或參考手冊的連結。這樣,讀者就能立刻明白我在說什麼。
這些筆記適用於至少學過一門金融數學和統計學本科課程的科學、經濟或金融專業的學生。
自學成才的學生或從業者應該至少閱讀一本金融數學的入門書籍。
首先,這不是一本書!
每本筆記本(幾乎)都是獨立於其他筆記本的。因此您可以只選擇您有興趣的筆記本!
- Every notebook contains python code ready to use!
在網路上找到 python 實現的金融模型的範例並不容易,這些模型可以立即使用並且有詳細的文件記錄。
我認為量化金融的初學者會發現這些筆記本非常有用!
此外,Jupyter 筆記本是互動式的,即您可以在筆記本內執行程式碼。這或許是最好的學習方式!
如果您使用 Github 或 NBviewer 開啟筆記本,有時數學公式無法正確顯示。因此,我建議您克隆/下載存儲庫。
不!
我會不時上傳更多筆記本。
目前,我對隨機過程、卡爾曼濾波器、統計等領域感興趣。未來我將添加有關這些主題的更多有趣的筆記本。
如果您有任何疑問,或發現錯誤,或有改進建議,請隨時與我聯繫。
1.1) Black-Scholes數值方法(對數常態分佈、測量變化、蒙特卡羅、二項式方法) 。
1.2) SDE模擬與統計(路徑產生、信賴區間、假設檢定、幾何布朗運動、Cox-Ingersoll-Ross過程、Euler Maruyama方法、參數估計)
1.3)傅立葉反演法(反演公式、數值反演、選擇權定價、FFT、Lewis公式)
1.4) SDE、Heston模型(相關布朗運動、Heston路徑、Heston分佈、特徵函數、選擇權定價)
1.5) SDE、Lévy 過程(Merton、變異數 Gamma、NIG、路徑產生、參數估計)
2.1) Black-Scholes PDE (PDE離散化、隱式方法、稀疏矩陣教學)
2.2)奇異期權(二元期權、障礙期權、亞洲期權)
2.3)美式選擇權(PDE、早期行使、二項式方法、Longstaff-Schwartz、永續看跌選擇權)
3.1) Merton Jump-Diffusion PIDE (隱式-顯式離散化、離散卷積、模型限制、蒙特卡羅、傅立葉反演、半閉式公式)
3.2)方差伽瑪PIDE (近似跳躍擴散PIDE,蒙特卡羅,傅立葉反演,與Black-Scholes比較)
3.3)常態逆高斯 PIDE (近似跳躍擴散 PIDE、蒙特卡羅、傅立葉反演、Lévy 測度的屬性)
4.1)交易成本定價(Davis-Panas-Zariphopoulou模型、奇異控制問題、HJB變分不等式、無差異定價、二項樹、性能)
4.2)波動率微笑與模型校準(波動率微笑、尋根方法、校準方法)
5.1)線性迴歸與卡爾曼濾波器(市場資料清理、線性迴歸方法、卡爾曼濾波器設計、參數選擇)
5.2)卡爾曼自相關追蹤 - AR(1) 過程(自回歸過程、估計方法、卡爾曼濾波器、卡爾曼平滑器、變數自相關追蹤)
5.3)波動率追蹤(Heston模擬、假設檢定、分佈擬合、估計方法、GARCH(1,1)、卡爾曼濾波器、卡爾曼平滑器)
6.1) Ornstein-Uhlenbeck 過程與應用(參數估計、命中時間、Vasicek PDE、卡爾曼濾波器、交易策略)
7.1)經典MVO (平均值變異數最佳化,二次規劃,只有多頭和多空,封閉式)
A.1)附錄:線性方程式(LU、Jacobi、Gauss-Seidel、SOR、Thomas)
A.2)附錄:程式碼最佳化(cython、C 程式碼)
A.3)附錄:Lévy 過程理論回顧(基本與重要定義、定價 PIDE 的推導)
虛擬環境:
這裡我解釋瞭如何使用 Anaconda 和 python 模組 venv 建立虛擬環境。
您可以使用以下命令重新建立我測試過的 conda 虛擬環境:
conda env create -f environment.yml
pip install -e .
第一行重新建立虛擬環境並安裝所有軟體包。
在第二行中,我們只安裝本機套件FMNM
。
如果你想使用最新的Python版本來建立一個新環境,你可以這麼做:
conda create -n FMNM python
conda activate FMNM
PACKAGES= $( tr ' n ' ' ' < list_of_packages.txt | sed " s/arch/arch-py/g " )
conda install ${PACKAGES[@]}
pip install -e .
在第三行中,我們將套件名稱arch
替換為arch-py
,這是 conda 使用的名稱。
如果您喜歡建立使用 python 3.11.4 的venv
,可以如下操作:
python3.11.4 -m venv --prompt FMNM python-venv
source python-venv/bin/activate
python3 -m pip install --upgrade pip
pip install --requirement requirements.txt
pip install -e .
如果您喜歡使用系統中已安裝的 python 版本,則只需運行
pip install --requirement list_of_packages.txt
pip install -e .
然後在 shell 中輸入jupyter-notebook
或jupyter-lab
:
但是,如果您使用舊版本,可能會出現相容性問題。
碼頭工人:
這裡我們使用 jupyterlab 來運行筆記本:
您可以使用 docker-compose 建置容器:
docker-compose up --build -d
然後停止容器
docker-compose down
然後開啟瀏覽器造訪http://localhost:8888/lab
或者,您可以
docker build -t fmnm .
docker run --rm -d -p 8888:8888 --name Numeric_Finance fmnm