說起金融,大家並不陌生,畢竟和我們的錢包關係緊密。這個“多金”的產業能持續的高速發展,源自科技的賦能。從ATM到信用卡,從網上銀行到移動支付……金融科技正在改變著我們的生活。國內的金融科技發展尤為迅速,在全球金融科技市場中,中國正佔據越來越重要的位置。即便如此,金融科技的風口卻從未停息……最近,在第四屆智慧金融國際論壇上,再次提到了區塊鏈、人工智慧、5G等科技鉅變的力量,強調了科技在資訊與資料領域的重要意義。
什麼是金融科技?簡單介紹一下,金融科技(Fintech)是指通過利用各類科技手段創新傳統金融行業所提供的產品和服務,提升效率並有效降低運營成本。
根據金融穩定理事會(FSB)的定義,金融科技主要是指由大資料、區塊鏈、雲端計算、人工智慧等新興前沿技術帶動,對金融市場以及金融服務業務供給產生重大影響的新興業務模式、新技術應用、新產品服務等。
隨著大資料時代的到來,人工智慧等前沿的科技在演算法深刻改變了金融業態,併成為未來金融發展的制高點。金融科技正在傳統金融行業的各個領域積極佈局,已然成為新的風口。
隨著人工智慧發展而大火的Python,有著簡單易學、速度快、可移植性、解釋性、可拓展性、可嵌入性以及豐富的庫等特點,使其在數學、大資料分析以及處理金融行業和財務(資料)分析中都有著得天獨厚的優勢。
Python在金融中的應用Python的語法很容易實現那些金融演算法和數學計算,每個數學語句都能轉變成一行Python程式碼,每行允許超過十萬的計算量。
在金融環境中邁出使用Python第一步的大部分人都可能要攻克某個演算法問題。這和想要解出微分方程、求取積分或者視覺化某些資料的科學工作者類似。
一般來說,在這一階段,對正規開發過程、測試、文件或者部署沒有太多的要求。然而,這一階段似乎是人們特別容易愛上 Python 的時候,主要原因是 Python 的語法總體上和用於描述科學問題或者金融演算法的數學語法相當近。
我們可以通過一個簡單的金融演算法——通過蒙特卡洛模擬方法估計歐式看漲期權的價值來說明這一現象。我們將考慮Black-Scholes-Merton(BSM)模型,在這種模型中期權的潛在風險遵循幾何布朗運動。假定我們使用以下數值化引數進行估值:
● 初始股票指數水平 S0=100;
● 歐式看漲期權的行權價格 K=105;
● 到期時間 T=1 年;
● 固定無風險短期利率 r=5%;
● 固定波動率 σ=20%。
在 BSM 模型中,到期指數水平是一個隨機變數,由公式 1-1 給出,其中 z 是一個標準正態分佈隨機變數。公式Black-Scholes-Merton(1973)到期指數水平
下面是蒙特卡洛估值過程的演算法描述。
(1)從標準正態分佈中取得 I 個(偽)隨機數 z(i),i∈{1,2,…,I}。
(2)為給定的 z(i)和公式 1-1 計算所有到期指數水平 ST(i)。
(3)計算到期時期權的所有內在價值 hT(i)=max(ST(i) K,0)。
(4)通過公式 1-2 中給出的蒙特卡羅估算函式估計期權現值。公式 1-2 歐式期權的蒙特卡洛估算函式。
現在,我們需要將這個問題和演算法翻譯為Python程式碼。下面的程式碼將實現一些必要的步驟。
NumPy在這裡作為主程式包使用。
定義模型並模擬引數值。
隨機數生成器種子值固定。
提取標準正態分佈隨機數。
模擬期末價值。
計算期權到期收益。
計算蒙特卡洛估算函式。
列印輸出估算結果。
以下 3 個方面值得注意。
語法:Python 語法與數學語法相當接近,例如引數賦值的方面。
翻譯:每條數學或者演算法語句一般都可以翻譯為單行 Python 程式碼。
向量化:NumPy的強項之一是緊湊的向量化語法,例如,允許在單一程式碼行中進行 10 萬次計算。這段程式碼可以用於 IPython 或 Jupyter Notebook 等互動式環境。但是,需要頻繁重用的程式碼一般組織為所 謂的模組(或者指令碼),也就是帶有.py 字尾的 Python(文字)檔案。本例的模組如下圖所示,可以將其儲存為名為 bsm_msc_euro.py 的檔案。
簡單演算法示例說明,Python 的基本語法很適合為經典的科學語言二重奏——英語和數學來 提供補充。在科學語言組合中新增 Python 能使其更加全面。
Python用於分析學Python效率較為明顯的領域之一是互動式的資料分析,對於大資料來說它無疑是一個最合適的選擇。這些領域從 IPython、Jupyter Notebook 等有力工具和pandas之類的程式中庫獲益良多。假設你是一位正在撰寫碩士論文的金融專業學生,對標普500指數感興趣,想要分析1年的歷史指數水平,以了解指數在這段時間內的波動性,你希望找到證據證明這種變動性與某些典型的模型假設相反,
它是隨時間變動而非固定。而且,應該對結果進行視覺化,你要進行的主要的工作如下:
● 從網路上下載指數水平資料;
● 計算年化對數收益率的滾動標準差(波動率);
● 繪製指數水平資料和波動性結果圖表。
這些任務很複雜,在不久之前還被認為是專業金融分析師才能完成的。而在今天,即使是金融專業的學
生也可以輕鬆地對付這類問題。我們來看看具體的做法:
匯入 NumPy 和 pandas。匯入 matplotlib 並配置 Jupyter 繪圖樣式和方法。pd.read_csv()可以讀取遠端或者本地儲存的逗號分隔值(CSV)形式資料集。選取一個數據子集,刪除NaN(非數值)值。顯示關於資料集的一些元資訊。以向量化的方式(在 Python 級別上“無迴圈”)計算對數收益率。得出滾動年化波動率。最後繪製兩個時間序列。下圖展示了這一簡短互動會話所得到的圖形化結果。
用幾行程式碼就足以完成金融分析中的典型複雜任務:資料收集、複雜和重複的數學計算以及結果的視覺化,令人覺得不可思議。從這個例子中可以看到,pandas使整個時間系列的處理變得就像浮點數上的數學運算那樣容易。
將這個例子轉換到專業的金融環境中,可以看出金融分析師在應用提供高層次抽象的合適Python工具和庫的時候,能夠將焦點放在自身的領域上,而不用關心複雜的技術細節。分析師可以快速反應,幾乎實時地提供寶貴的調見,確保自己比競爭對手先行一步。這種效率的提高很容易轉換為可度量的財務效果。
除了Python在資料分析中那些很明顯的優點(易學,大量的線上社群等等)之外,在資料科學中的廣泛使用,以及我們今天看到的大多數基於網路的分析,是Python在資料分析領域得以廣泛傳播的主要原因另外,Python在數學和人工智慧領域中也發揮著獨特的優勢,《Python金融大資料分析(第2版)》一書中還詳細為我們講述了Python以及Python在金融學中的應用。
本書適合對使用 Python 進行大資料分析和處理感興趣的金融行業開發人員閱讀。
- 推薦閱讀 -
今日福利
《Python金融大資料分析(第2版)》適合對使用Python進行大資料分析、處理感興趣的金融行業開發人員閱讀。
如何獲得:參與話題留言+轉發本文至朋友圈,12月15日,非同步君將抽取2名讀者贈送《Python金融大資料分析(第2版)》
今日互動話題:
“說一說金融科技對生活的改變”
-END-