日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

1.2 金融中的科技

現(xiàn)在,我們對Python已經(jīng)有了大致的認識,接下來簡短地介紹一下科技在金融中的作用就很有意義了。這將使我們更好地評判Python在金融行業(yè)中已經(jīng)承擔的任務,更重要的是,還可以評判未來承擔的任務。

在某種意義上,科技對于金融機構(gòu)(例如與生物技術公司相比)或者財務部門(與其他企業(yè)職能部門相比,如后勤)沒有什么特別的作用。然而,近年來,在創(chuàng)新和監(jiān)管的刺激下,銀行和其他金融機構(gòu)(如對沖基金)越來越多地發(fā)展成為技術公司而不僅僅是金融中介機構(gòu)??萍汲蔀榱巳驇缀跛薪鹑跈C構(gòu)的重要資產(chǎn),具備導致競爭優(yōu)勢和劣勢的潛力。某些背景信息可以解釋這種發(fā)展的原因。

1.2.1 科技投入

銀行和金融機構(gòu)共同組成了每年在科技上投入最多的行業(yè)。因此,下面的陳述不僅說明科技對金融行業(yè)的重要性,也說明了金融行業(yè)對科技的重要性:

美國馬薩諸塞州弗雷明漢,2018年6月14日——根據(jù)國際數(shù)據(jù)公司(IDC)的一系列“金融服務IT開銷指南”稱,全球金融服務公司在信息科技(IT)上的開銷將從2018年的4400億美元增長到2021年的近5000億美元。

——IDC

特別是,銀行和其他金融機構(gòu)正在參與業(yè)務及運營模式數(shù)字化的競爭:

2017年,北美地區(qū)銀行在新科技上的開銷高達199億美元。

銀行開發(fā)當前系統(tǒng)并致力于新的技術解決方案,以增強其在全球市場上的競爭力,吸引對新的網(wǎng)絡和移動科技感興趣的客戶。對于為銀行業(yè)提供新思路和軟件解決方案的全球金融科技公司來說,這是一個巨大的機遇。

——Statista

當今的大型跨國銀行通常雇傭數(shù)千名開發(fā)人員,以維護現(xiàn)有系統(tǒng)并構(gòu)建新系統(tǒng)。具有大量科技需求的大型投資銀行每年的科技預算往往達到數(shù)十億美元。

1.2.2 作為業(yè)務引擎的科技

科技發(fā)展對金融行業(yè)的創(chuàng)新和效率增進也有貢獻。通常,這一領域的項目統(tǒng)稱為“數(shù)字化項目”:

金融服務業(yè)在過去數(shù)年中已經(jīng)歷了科技先導的徹底變革。許多高管期望IT部門改進效率,促進游戲規(guī)則的創(chuàng)新——同時降低成本,繼續(xù)支持遺留系統(tǒng)。與此同時,金融科技初創(chuàng)企業(yè)正在逐步蠶食原有市場,提出對客戶友好的解決方案,這些方案是從頭開始設計的,不受遺留系統(tǒng)的阻礙。

——普華永道第19次年度全球CEO調(diào)查報告(2016年)

效率提高的副作用之一就是,金融機構(gòu)往往必須在更為復雜的產(chǎn)品或者交易中尋求競爭優(yōu)勢。這當然會使風險增大,并使風險管理、監(jiān)控和監(jiān)管越來越困難。2007年和2008年的金融危機說明了這些發(fā)展帶來的潛在危險。同樣,“算法和計算機失控”也給金融市場帶來潛在的風險;2010年5月的所謂“閃電崩盤”事件戲劇性地展現(xiàn)了上述風險,自動化賣出導致某些股票和股票指數(shù)在當日大幅度下跌。

1.2.3 作為進入門檻的科技和人才

一方面,在其他條件不變的情況下,隨著時間的推移,科技的進步會降低成本。另一方面,金融機構(gòu)持續(xù)在科技上投入巨資,以增大市場份額、保持自身地位。在今天的金融市場上取得一席之地往往需要在科技和熟練人員上大規(guī)模投資。考慮衍生品分析領域的一個例子:

在整個軟件生命期中,采用內(nèi)部OTC(衍生品)定價策略的公司僅在一個完整的衍生品庫的構(gòu)建、維護和改進上就需要投入2500萬~3600萬美元。

——Ding 2010

構(gòu)建一個完善的衍生品分析庫不僅成本高昂和費時,而且需要有足夠的專業(yè)人士來進行這項工作。這些專業(yè)人士必須有正確的工具和技術,才能完成相應的任務。隨著Python生態(tài)系統(tǒng)的發(fā)展,與10年前相比,這些工作變得更加高效,相關的成本也有了顯著的下降。第5部分介紹衍生品分析,僅用Python及標準庫就構(gòu)建了一個規(guī)模雖小卻強大旦靈活的衍生品定價庫。

下面,我們引用另一段美國長期資本管理公司(LTCM)的陳述,以進一步支持關于科技和人才的觀點。LTCM曾是最受尊敬的計量對沖基金,但是在20世紀90年代末破產(chǎn):

Meriwether在最新型計算機系統(tǒng)上花費了2000萬美元,并雇用一個由一流金融工程師成的團隊在LTCM操縱該系統(tǒng),他們在康涅狄格州的格林尼治開始工作。這是行業(yè)級別的風險管理。

——Patterson 2010

Meriwether花費數(shù)百萬美元才能得到的計算能力,在今天只需要幾千美元就能實現(xiàn)。這種專業(yè)基礎設施每月的起始費用僅為幾美元。另一方面,大型金融機構(gòu)的交易、定價和風險管理已經(jīng)變得非常復雜,以致于現(xiàn)在必須部署具有數(shù)萬個計算核心的IT基礎架構(gòu)。

1.2.4 不斷提高的速度、頻率和數(shù)據(jù)量

金融行業(yè)有一個方面最受科技進步的影響:金融交易決策和執(zhí)行的速度及頻率。Lewis最近的著作(2014)生動而詳細地描述了所謂的“閃電交易”——也就是以可能的最高速度進行的交易。

一方面,可用數(shù)據(jù)的時間標度越來越小,使實時反應成為必需的能力。另一方面,交易的速度和頻率的提高使數(shù)據(jù)量進一步增大。這兩方面相互補充,推動了金融交易平均時間標度的系統(tǒng)性下降。這種趨勢在10年前就已經(jīng)開始:

復興資本公司的“大獎章”基金在2008年獲得了80%的驚人增長率,它以閃電般速度的計算機抓住了市場極端活躍的機會。Jim Simons是當年世界盈利最高的對沖基金管理人,收入達到25億美元。

——Patterson 2010

單只股票30年的每日股價數(shù)據(jù)大致包含7500個報價。這類數(shù)據(jù)是大部分現(xiàn)代金融理論的基礎。例如,現(xiàn)代投資組合理論(MPT)、資本定價模型(CAPM)和風險價值(VaR)等理論都以每日股價數(shù)據(jù)為基礎。

相比之下,蘋果公司(AAPL)典型交易日報價次數(shù)大約為15000——兩倍于30年日終報價的數(shù)量(參見1.4小節(jié)的例子)。這帶來了許多挑戰(zhàn)。

數(shù)據(jù)處理

只考慮和處理股票或者其他金融工具的日終報價是不夠的。在每周的7天、每天的24個小時內(nèi),某些金融工具上發(fā)生的事情“太多了”。

分析速度

決策往往必須在幾毫秒甚至更短的時間內(nèi)做出,有必要構(gòu)建獨自的分析能力工具,并實時分析大量數(shù)據(jù)。

理論基礎

雖然傳統(tǒng)金融理論和概念遠稱不上完美,但是它們經(jīng)受了時間的考驗(有些時候受到排斥);對于毫秒級計量能力很重要的今天,仍然缺乏在很長時間內(nèi)證明是穩(wěn)定的一致性概念和理論。

總體上,上述挑戰(zhàn)都只能由現(xiàn)代科技應對。令人有些驚訝的是,缺乏一致性理論的問題也常常通過技術方法處理。在這種情況下,高速算法利用的是市場微觀結(jié)構(gòu)要素(例如,訂單流、買賣價差),而不依賴于某種金融推理方法。

1.2.5 實時分析的興起

金融行業(yè)中有一個學科的重要性正在強勁增長:金融和數(shù)據(jù)分析。這種現(xiàn)象與行業(yè)中速度、頻率和數(shù)據(jù)率飛速增長有緊密的關系。實際上,實時分析可以視為行業(yè)對這種趨勢的反應。

粗略地講,“金融和數(shù)據(jù)分析”指的是將應用軟件、科技,與(可能是先進的)算法、數(shù)據(jù)收集、數(shù)據(jù)處理及分析方法相結(jié)合,以獲得深刻的洞察力、做出決策或者滿足監(jiān)管需求的學科。這類分析的例子包括銀行零售部門中某個金融產(chǎn)品定價結(jié)構(gòu)的變化對銷售情況影響的估算。另一個例子是投資銀行衍生品復雜投資組合信用價值調(diào)整(CVA)的大規(guī)模隔夜計算。

金融機構(gòu)在這種環(huán)境下主要面對兩種挑戰(zhàn)。

大數(shù)據(jù)

在“大數(shù)據(jù)”這一術語出現(xiàn)之前,銀行和其他金融機構(gòu)就必須處理海量數(shù)據(jù)。然而,單一分析任務所處理的數(shù)據(jù)量隨著時間的推移而有了很大的增長,從而要求計算能力有所提高并有更大的內(nèi)存與存儲能力。

實時經(jīng)濟

過去,決策者只能依賴結(jié)構(gòu)化的定期計劃、決策和風險管理過程,而今天決策者面對的是實時完成這些任務的需求。過去在后臺通過隔夜批量運行可以完成的任務,現(xiàn)在已經(jīng)轉(zhuǎn)向前臺實時執(zhí)行。

同樣,人們可以觀察到科技和金融/商業(yè)發(fā)展之間的相互作用。一方面,市場上出現(xiàn)了通過現(xiàn)代科技的應用不斷改進分析方法的速度和效率的需求。另一方面,科技的進步使幾年甚至幾個月之前認為不可能(或者由于預算約束而不可行)的新分析方法成為可能。

分析領域的一個重要趨勢是利用中央處理單元(CPU)的并行結(jié)構(gòu)和通用計算圖形處理單元(GPGPU)的大規(guī)模并行結(jié)構(gòu)?,F(xiàn)在的GPGPU往往有1000多個計算核心,有時候有必要徹底反思并行性對不同算法的意義。用戶通常必須學習新的范型和技術才能利用這種硬件,這仍是障礙。

1.3 用于金融的Python

1.2節(jié)介紹了科技在金融中發(fā)揮作用的一些領域:

  • 金融行業(yè)中的科技成本;
  • 作為新業(yè)務和創(chuàng)新業(yè)務引擎的科技;
  • 作為金融行業(yè)進入門檻的科技;
  • 不斷提升的速度、頻率和數(shù)據(jù)量;
  • 實時分析的興起。

本節(jié),我們分析Python如何幫助你應對這些方面的多種挑戰(zhàn)。不過首先讓我從更為基礎的方面——語言和語法介紹用于金融的Python。

1.3.1 金融和Python語法

在金融環(huán)境中邁出使用Python第一步的大部分人都可能要攻克某個算法問題。這和想要解出微分方程、求取積分或者可視化某些數(shù)據(jù)的科學工作者類似。一般來說,在這一階段,對正規(guī)開發(fā)過程、測試、文檔或者部署沒有太多的要求。然而,這一階段似乎是人們特別容易愛上Python的時候,主要原因是Python的語法總體上和用于描述科學問題或者金融算法的數(shù)學語法相當接近。

我們可以通過一個簡單的金融算法——通過蒙特卡洛模擬方法估計歐式看漲期權的價值來說明這一現(xiàn)象。我們將考慮Black-Scholes-Merton(BSM)模型,在這種模型中期權的潛在風險遵循幾何布朗運動。

假定我們使用以下數(shù)值化參數(shù)進行估值:

  • 初始股票指數(shù)水平S0=100;
  • 歐式看漲期權的行權價格K=105;
  • 到期時間T=1年;
  • 固定無風險短期利率r=5%;
  • 固定波動率σ=20%。

在BSM模型中,到期指數(shù)水平是一個隨機變量,由公式1-1給出,其中z是一個標準正態(tài)分布隨機變量。

公式1-1 Black-Scholes-Merton(1973)到期指數(shù)水平

Python與金融:為什么將Python用于金融?

 

下面是蒙特卡洛估值過程的算法描述。

(1)從標準正態(tài)分布中取得I個(偽)隨機數(shù)z(i),i∈{1,2,…,I}。

(2)為給定的z(i)和公式1-1計算所有到期指數(shù)水平ST(i)。

(3)計算到期時期權的所有內(nèi)在價值hT(i)=max(ST(i)−K,0)。

(4)通過公式1-2中給出的蒙特卡羅估算函數(shù)估計期權現(xiàn)值。

公式1-2 歐式期權的蒙特卡洛估算函數(shù)

Python與金融:為什么將Python用于金融?

 

現(xiàn)在,我們需要將這個問題和算法翻譯為Python代碼。下面的代碼將實現(xiàn)一些必要的步驟。

In [6]: import math
import numpy as np ?

In [7]: S0 = 100. ?
K = 105. ?
T = 1.0 ?
r = 0.05 ?
sigma = 0.2 ?

In [8]: I = 100000 ?

In [9]: np.random.seed(1000) ?
In [10]: z = np.random.standard_normal(I) ?

In [11]: ST = S0 * np.exp((r - sigma ** 2 / 2) * T + sigma * math.sqrt(T) * z) ?

In [12]: hT = np.maximum(ST - K, 0) ?

In [13]: C0 = math.exp(-r * T) * np.mean(hT) ?

In [14]: print('Value of the European call option: {:5.3f}.'.format(C0)) ?
Value of the European call option: 8.019.

? NumPy在這里作為主程序包使用。

? 定義模型并模擬參數(shù)值。

? 隨機數(shù)生成器種子值固定。

? 提取標準正態(tài)分布隨機數(shù)。

? 模擬期末價值。

? 計算期權到期收益。

? 計算蒙特卡洛估算函數(shù)。

? 打印輸出估算結(jié)果。

以下3個方面值得注意。

語法

Python語法與數(shù)學語法相當接近,例如參數(shù)賦值的方面。

翻譯

每條數(shù)學或者算法語句一般都可以翻譯為單行Python代碼。

向量化

NumPy的強項之一是緊湊的向量化語法,例如,允許在單一代碼行中進行10萬次計算。

這段代碼可以用于IPython或Jupyter Notebook等交互式環(huán)境。但是,需要頻繁重用的代碼一般組織為所謂的模塊(或者腳本),也就是帶有.py后綴的Python(文本)文件。本例的模塊如例1-1所示,可以將其保存為名為bsm_msc_euro.py的文件。

例1-1 歐式看漲期權的蒙特卡洛估值

#
# Monte Carlo valuation of European call option
# in Black-Scholes-Merton model
# bsm_mcs_euro.py
#
# Python for Finance, 2nd ed.
# (c) Dr. Yves J. Hilpisch
#
import math
import numpy as np

# Parameter Values
S0 = 100. # initial index level
K = 105. # strike price
T = 1.0 # time-to-maturity
r = 0.05 # riskless short rate
sigma = 0.2 # volatility

I = 100000 # number of simulations

# Valuation Algorithm
z = np.random.standard_normal(I) # pseudo-random numbers
# index values at maturity
ST = S0 * np.exp((r - 0.5 * sigma ** 2) * T + sigma * math.sqrt(T) * z)
hT = np.maximum(ST - K, 0) # payoff at maturity
C0 = math.exp(-r * T) * np.mean(hT) # Monte Carlo estimator

# Result Output
print('Value of the European call option %5.3f.' % C0)

這一小節(jié)中的簡單算法示例說明,Python的基本語法很適合為經(jīng)典的科學語言二重奏——英語和數(shù)學來提供補充。在科學語言組合中添加Python能使其更加全面。我們現(xiàn)在擁有:

  • 用于寫作和談論科學、金融等問題的英語;
  • 用于簡潔、精確地描述抽象特征、算法、復數(shù)等并為其建模的數(shù)學;
  • 從技術上建立抽象特征、算法、復數(shù)等的模型并加以實現(xiàn)的Python。

數(shù)學和Python語法 

幾乎沒有任何編程語言像Python這樣接近數(shù)學語法。因此,數(shù)值算法很容易從數(shù)學表示翻譯為Python實現(xiàn)。通過Python,我們可以在這些領域中高效地進行原型化、開發(fā)和代碼維護。

在某些領域中,使用偽代碼是常見的做法,這引入了第 4 個語言家族成員。舉個例子,偽代碼的任務是以更技術性的方式表示金融算法,不但與數(shù)學表示接近,而且還接近于技術實現(xiàn)。除了算法本身,偽代碼還考慮了計算機的工作原理。

采用這種方法一般是因為,使用大部分編程語言時,技術實現(xiàn)和正式的數(shù)學表現(xiàn)形式的距離相當“遙遠”。大部分編程語言都必須包含許多只在技術上需要的元素,但在數(shù)學和代碼中很難看到等價的元素。

時下,Python常常以偽代碼的方式被使用,因為它的語法和數(shù)學很類似,而且技術“開銷”可以控制到最低。這一點是通過該語言所體現(xiàn)的一些高層概念實現(xiàn)的,這些概念不僅有其優(yōu)勢,也帶來了風險和其他代價。不過可以肯定,我們可在需求出現(xiàn)的時候使用Python,從一開始就遵循其他語言可能需要的嚴格實現(xiàn)和編碼方法。從這個意義上說,Python可以在兩個世界:高層次的抽象和嚴格的實現(xiàn)中提供最佳的平衡。

1.3.2 Python的效率和生產(chǎn)率

從較高的層次看,使用Python的好處可以從以下3個維度衡量。

效率

Python如何更快地獲得結(jié)果、節(jié)約成本、節(jié)約時間?

生產(chǎn)率

Python如何在相同的資源(人員、資產(chǎn)等)下完成更多的工作?

質(zhì)量

Python能夠讓我們做哪些替代技術所不能做到的事情?

對這些特性的討論當然不可能很全面。然而,可以將某些特性作為出發(fā)點。

1.在更短的時間里得到成果

Python效率較為明顯的領域之一是交互式的數(shù)據(jù)分析。這些領域從IPython、Jupyter Notebook等有力工具和pandas之類的程序中庫獲益良多。

假設你是一位正在撰寫碩士論文的金融專業(yè)學生,對標普 500 指數(shù)感興趣,想要分析 1 年的歷史指數(shù)水平,以了解指數(shù)在這段時間內(nèi)的波動性,你希望找到證據(jù)證明這種變動性與某些典型的模型假設相反,它是隨時間變動而非固定。而且,應該對結(jié)果進行可視化,你要進行的主要的工作如下:

  • 從網(wǎng)絡上下載指數(shù)水平數(shù)據(jù);
  • 計算年化對數(shù)收益率的滾動標準差(波動率);
  • 繪制指數(shù)水平數(shù)據(jù)和波動性結(jié)果圖表。

這些任務很復雜,在不久之前還被認為是專業(yè)金融分析師才能完成的。而在今天,即使是金融專業(yè)的學生也可以輕松地對付這類問題。我們來看看具體的做法——此時還不用操心語法的細節(jié)。

In [16]: import numpy as np ?
import pandas as pd ?
from pylab import plt, mpl ?

In [17]: plt.style.use('seaborn') ?
mpl.rcParams['font.family'] = 'serif' ?
%matplotlib inline

In [18]: data = pd.read_csv('../../source/tr_eikon_eod_data.csv',
index_col=0, parse_dates=True) ?
data = pd.DataFrame(data['.SPX']) ?
data.dropna(inplace=True) ?
data.info() ?
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 2138 entries, 2010-01-04 to 2018-06-29
Data columns (total 1 columns):
.SPX 2138 non-null float64
dtypes: float64(1)
memory usage: 33.4 KB

In [19]: data['rets'] = np.log(data / data.shift(1)) ?
data['vola'] = data['rets'].rolling(252).std() * np.sqrt(252) ?
In [20]: data[['.SPX', 'vola']].plot(subplots=True, figsize=
(10, 6)); ?

? 導入NumPy和pandas。

? 導入matplotlib并配置Jupyter繪圖樣式和方法。

? pd.read_csv()可以讀取遠程或者本地存儲的逗號分隔值(CSV)形式數(shù)據(jù)集。

? 選取一個數(shù)據(jù)子集,刪除NaN(非數(shù)值)值。

? 顯示關于數(shù)據(jù)集的一些元信息。

? 以向量化的方式(在Python級別上“無循環(huán)”)計算對數(shù)收益率。

? 得出滾動年化波動率。

? 最后繪制兩個時間序列。

圖1-1展示了這一簡短交互會話所得到的圖形化結(jié)果。用幾行代碼就足以完成金融分析中的典型復雜任務:數(shù)據(jù)收集、復雜和重復的數(shù)學計算以及結(jié)果的可視化,令人覺得不可思議。從這個例子中可以看到,pandas使整個時間系列的處理變得就像浮點數(shù)上的數(shù)學運算那樣容易。

Python與金融:為什么將Python用于金融?

圖1-1 標普500收盤價和年化波動率

將這個例子轉(zhuǎn)換到專業(yè)的金融環(huán)境中,可以看出金融分析師在應用提供高層次抽象的合適Python工具和庫的時候,能夠?qū)⒔裹c放在自身的領域上,而不用關心復雜的技術細節(jié)。分析師可以快速反應,幾乎實時地提供寶貴的調(diào)見,確保自己比競爭對手先行一步。這種效率的提高很容易轉(zhuǎn)換為可度量的財務效果。

2.確保高性能

一般來說,Python的語法相當簡潔,編碼效率相對高是為人們所接受的說法。但是,由于Python本質(zhì)上是解釋型語言,因此存在一種偏見,認為Python對于金融學中的計算密集任務來說速度過于緩慢。確實,在某些特定的實現(xiàn)方法下,Python可能確實很慢,但是,它并不一定都那么緩慢——它可以在幾乎所有應用領域中表現(xiàn)出高性能。理論上,人們至少可以找到3種提高性能的策略。

慣例和范型

一般來說,Python可以用許多不同的方式得出相同的結(jié)果,但是這些方式的性能特性有相當大的區(qū)別;只要選擇合適的方式(如特定的實現(xiàn)方法、明智地使用數(shù)據(jù)結(jié)構(gòu)、通過向量化避免循環(huán)或者使用pandas等特定庫),就可以顯著地改善效果。

編譯

現(xiàn)在,有許多高性能庫可以提供重要函數(shù)的編譯版本,或者將Python代碼靜態(tài)或者動態(tài)地(在運行時或者調(diào)用時)編譯為機器代碼,這種代碼的速度比純Python代碼要快好幾個數(shù)量級。比較流行的高性能庫有Cython和Numba等。

并行化

許多計算任務(特別是金融學中的計算任務)可以從并行執(zhí)行中得到很大好處;這對Python來說不足為奇,可以輕松地實現(xiàn)。

使用Python實現(xiàn)高性能計算

Python本身不是一種高性能計算技術。但是,Python已經(jīng)發(fā)展成為一種訪問當前高性能技術的理想平臺。在這個意義上,Python已經(jīng)成為高性能計算的“黏合劑”語言。

本節(jié)堅持使用簡潔實用的例子介紹上述3種策略(后續(xù)的章節(jié)將詳細介紹這些策略)。金融分析中相當常見的任務之一是在大量數(shù)字上計算復雜的數(shù)學表達式。在這方面,Python本身就提供了所有必需的功能:

In [21]: import math
loops = 2500000
a = range(1, loops)
def f(x):
return 3 * math.log(x) + math.cos(x) ** 2
%timeit r = [f(x) for x in a]
1.59 s ± 41.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Python解釋程序在本例中需要1.6s的時間來完成250萬次函數(shù)f的計算。使用NumPy可以完成相同的任務,它提供了優(yōu)化(也就是預先編譯)的函數(shù)來處理這種基于數(shù)組的運算:

In [22]: import numpy as np
a = np.arange(1, loops)
%timeit r = 3 * np.log(a) + np.cos(a) ** 2
87.9 ms ± 1.73 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

NumPy可以將執(zhí)行時間大幅縮減到約88ms。甚至有一個庫是專門用于此類任務的,這個庫叫作numexpr,得名于“數(shù)值表達式”(Numerical Expressions)。它可以編譯表達式來改善NumPy通用功能的性能。例如,在執(zhí)行期間避免ndarray對象在內(nèi)存中復制:

In [23]: import numexpr as ne
ne.set_num_threads(1)
f = '3 * log(a) + cos(a) ** 2'
%timeit r = ne.evaluate(f)
50.6 ms ± 4.2 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

使用這種更特殊的方法可以進一步將執(zhí)行時間降低至約50ms。而且,numexpr還內(nèi)建了并行執(zhí)行單獨運算的功能。這使我們能夠使用一個CPU的多個線程:

In [24]: ne.set_num_threads(4)
%timeit r = ne.evaluate(f)
22.8 ms ± 1.76 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

本例利用了4個線程,執(zhí)行時間進一步下降到23ms,總體的性能提升了90倍。特別要注意的是,這類改善不需要修改基本問題/算法,也不用了解任何有關編譯和并行化問題的知識,即使是非專業(yè)人士也可以從較高的層次上去利用這種功能。當然,前提是你必須知道存在這些功能。

這個例子說明,Python提供了一些選項可以更好地利用現(xiàn)有資源,也就是提高生產(chǎn)率。利用并行化方法,可以在同樣的時間里完成3倍于串行化方法的計算,這只需要告訴Python使用多個CPU線程(而非僅使用一個線程)即可。

1.3.3 從原型化到生產(chǎn)

從執(zhí)行速度的角度看,交互式分析的效率和性能當然是Python值得考慮的兩個好處。在金融學中使用Python的另一個好處初看似乎比較不起眼,但是細看之下就會發(fā)現(xiàn)它本身是一個重要的戰(zhàn)略因素。這就是以端到端(從原型化到生產(chǎn))的方式使用Python的可能性。

當今全球金融機構(gòu)的金融開發(fā)過程往往是一個分離的兩步式過程。一方面,量化分析師(quants,也稱寬客)負責模型開發(fā)和技術原型化。他們喜歡使用MatLab和R等工具和環(huán)境實現(xiàn)快速、交互式的應用程序開發(fā)。在開發(fā)的這一階段,性能、穩(wěn)定性、異常管理、數(shù)據(jù)訪問分離和分析等問題都不重要。人們的主要目標是概念或者原型的驗證,原型用于展現(xiàn)某種算法或者整個應用程序必需的主要功能。

一旦原型完成,IT部門中的開發(fā)人員接管工作,他們負責將現(xiàn)有原型代碼翻譯為可靠、易于維護和高性能的生產(chǎn)代碼。這一階段中,通常在用于滿足生產(chǎn)性能的C++或者JAVA語言中有一個范型轉(zhuǎn)換的過程。而且,正規(guī)的開發(fā)過程還要用它專業(yè)工具、版本控制等技術。

這種兩步式方法會產(chǎn)生一些意外的結(jié)果。

效率低下

原型代碼不能重用;算法必須實現(xiàn)兩次;多余的工作消耗時間和資源;轉(zhuǎn)譯時產(chǎn)生的風險。

多種技能集

不同部門展現(xiàn)不同的技能集合,使用不同的語言實現(xiàn)“相同的工作”。

遺留代碼

代碼必須以不同的語言存在和維護,并使用不同的實現(xiàn)風格(例如,從架構(gòu)的觀點上看)。

另一方面,使用Python可以實現(xiàn)合理化的端到端過程——從最初的交互式原型化步驟到高可靠性、易于維護的生產(chǎn)代碼。不同部門之間的溝通變得更加簡單,工作人員的培訓也更為合理,只有一種主要語言覆蓋金融應用構(gòu)建的所有領域,還避免了在開發(fā)過程不同步驟中使用不同技術造成的低效和冗余性。總而言之,Python可以為金融應用開發(fā)和算法實現(xiàn)提供一致性的技術框架。

1.4 數(shù)據(jù)驅(qū)動和人工智能優(yōu)先的金融學

1.4.1 數(shù)據(jù)驅(qū)動金融學

最重要的一些金融理論(如MPT和CAPM)可以追溯到上世紀50年代和60年代。然而,它們?nèi)匀皇墙?jīng)濟、財務、金融工程和商業(yè)管理領域教育的基石。這可能令人驚訝,因為大部分此類理論的實證支持相當貧乏,而證據(jù)往往完全與理論相反。另一方面,它們的流行性也是可以理解的,因為它們接近于人們對金融市場表現(xiàn)的期望,而且,它們是建立在一些吸引人(通常過于簡單)的假設之上的簡潔數(shù)學理論。

科學方法(如物理學)始于數(shù)據(jù)(如來自試驗或者觀察的數(shù)據(jù)),然后得出假設和理論,并用數(shù)據(jù)加以測試。如果測試結(jié)果是肯定的,那可以對這些假設和理論進行提煉,并以合適的方法記錄下來,例如以研究型論文的方式發(fā)表。如果測試結(jié)果是否定的,假設和理論將被拋棄,并開始尋找復合數(shù)據(jù)的新理論。由于物理定律在一段時間里是穩(wěn)定的,所以一旦發(fā)現(xiàn)并對齊進行了完備的測試,那么在最佳狀況下,通??梢哉J為是永遠成立的。

(計量)金融學的歷史大部分與科學方法相悖。在許多情況下,理論和模型是在簡化的數(shù)學假設下“從頭”開發(fā)的,目標是發(fā)現(xiàn)金融學核心問題的簡練回答。金融學的流行假設是,金融工具的回報呈標準正態(tài)分布,各種利率之間呈線性關系。由于這些現(xiàn)象在金融市場上很難看到,這些簡單理論的實證往往很缺乏,也就不值得驚訝了。許多金融理論和模型都是首先提出公式、證明并發(fā)表,然后才進行實證測試的。在某種程度上,這當然是因為上世紀50年代或者70年代甚至更晚的時候,還不存在合適形式的金融數(shù)據(jù),而今天就連攻讀金融學士學位的學生都能得到這些數(shù)據(jù)。

20世紀90年代初期到中期,金融機構(gòu)所能得到的此類數(shù)據(jù)急劇增加。今天,甚至進行金融研究或者參與算法交易的個人都可以得到大量的歷史數(shù)據(jù),也可以通過流服務得到實時數(shù)據(jù)。這使我們可以專注于科學方法,科學方法通常從數(shù)據(jù)開始,然后得出思路、假設、模型和策略。

用一個簡單的例子就可以說明,如今在本地機器上利用Python和Eikon Data APIs訂閱大規(guī)模專業(yè)數(shù)據(jù)有多么簡單。下面的例子是讀取的蘋果公司股票常規(guī)交易日中一個小時的分筆交易數(shù)據(jù)。讀取的報價數(shù)據(jù)(包括交易量信息)大約有15000條。由于股票代碼為AAPL,所以路透金融工具代碼(RIC)為AAPL.0:

In [26]: import eikon as ek ?

In [27]: data = ek.get_timeseries('AAPL.O', fields='*',
start_date='2018-10-18 16:00:00',
end_date='2018-10-18 17:00:00',
interval='tick') ?

In [28]: data.info() ?
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 35350 entries, 2018-10-18 16:00:00.002000 to
2018-10-18
16:59:59.888000
Data columns (total 2 columns):
VALUE 35285 non-null float64
VOLUME 35350 non-null float64
dtypes: float64(2)
memory usage: 828.5 KB

In [29]: data.tail() ?
Out[29]: AAPL.O VALUE VOLUME
Date
2018-10-18 16:59:59.433 217.13 10.0
2018-10-18 16:59:59.433 217.13 12.0
2018-10-18 16:59:59.439 217.13 231.0
2018-10-18 16:59:59.754 217.14 100.0
2018-10-18 16:59:59.888 217.13 100.0

? Eikon Data API需要訂閱和API連接才能使用。

? 讀取蘋果公司(AAPL.0)股票分筆數(shù)據(jù)。

? 顯示最后5行數(shù)據(jù)。

Eikon Data API不僅提供了對結(jié)構(gòu)化金融數(shù)據(jù)(如歷史報價數(shù)據(jù))的訪問,還可以訪問新聞等非結(jié)構(gòu)化數(shù)據(jù)。下面的例子讀取一小部分新聞的元數(shù)據(jù)。

In [30]: news = ek.get_news_headlines('R:AAPL.O Language:LEN',
date_from='2018-05-01',
date_to='2018-06-29',
count=7) ?

In [31]: news ?
Out[31]:
versionCreated 
2018-06-28 23:00:00.000 2018-06-28 23:00:00.000
2018-06-28 21:23:26.526 2018-06-28 21:23:26.526
2018-06-28 19:48:32.627 2018-06-28 19:48:32.627
2018-06-28 17:33:10.306 2018-06-28 17:33:10.306
2018-06-28 17:33:07.033 2018-06-28 17:33:07.033
2018-06-28 17:31:44.960 2018-06-28 17:31:44.960
2018-06-28 17:00:00.000 2018-06-28 17:00:00.000

text 
2018-06-28 23:00:00.000 RPT-FOCUS-AI ambulances and robot doctors: Chi...
2018-06-28 21:23:26.526 Why Investors Should Love Apple's (AAPL) TV En...
2018-06-28 19:48:32.627 Reuters Insider - Trump: We're reclaiming our ...
2018-06-28 17:33:10.306 Apple v. Samsung ends not with a whimper but a...
2018-06-28 17:33:07.033 Apple's trade-war discount extended for anothe...
2018-06-28 17:31:44.960 Other Products: Apple's fast-growing island of...
2018-06-28 17:00:00.000 Pokemon Go creator plans to sell the tech behi...
storyId 
2018-06-28 23:00:00.000 urn:newsml:reuters.com:20180628:nL4N1TU4F8:6
2018-06-28 21:23:26.526 urn:newsml:reuters.com:20180628:nNRA6e2vft:1
2018-06-28 19:48:32.627 urn:newsml:reuters.com:20180628:nRTV1vNw1p:1
2018-06-28 17:33:10.306 urn:newsml:reuters.com:20180628:nNRA6e1oza:1
2018-06-28 17:33:07.033 urn:newsml:reuters.com:20180628:nNRA6e1pmv:1
2018-06-28 17:31:44.960 urn:newsml:reuters.com:20180628:nNRA6e1m3n:1
2018-06-28 17:00:00.000 urn:newsml:reuters.com:20180628:nL1N1TU0PC:3

sourceCode
2018-06-28 23:00:00.000 NS:RTRS
2018-06-28 21:23:26.526 NS:ZACKSC
2018-06-28 19:48:32.627 NS:CNBC
2018-06-28 17:33:10.306 NS:WALLST
2018-06-28 17:33:07.033 NS:WALLST
2018-06-28 17:31:44.960 NS:WALLST
2018-06-28 17:00:00.000 NS:RTRS
In [32]: story_html = ek.get_news_story(news.iloc[1, 2]) ?

In [33]: from bs4 import BeautifulSoup ?

In [34]: story = BeautifulSoup(story_html, 'html5lib').get_text() ?

In [35]: print(story[83:958]) ?
Jun 28, 2018 For years, investors and Apple AAPL have been beholden to
the iphone, which is hardly a negative since its flagship product is
largely responsible for turning Apple into one of the world's biggest
companies. But Apple has slowly pushed into new growth areas, with
streaming television its newest frontier. So let's take a look at what
Apple has planned as it readies itself to compete against the likes of
Netflix NFLX and Amazon AMZN in the battle for the new age of
entertainment.Apple's second-quarter revenues jumped by 16% to reach
$61.14 billion, with iPhone revenues up 14%. However, iPhone unit sales
climbed only 3% and iPhone revenues accounted for over 62% of total Q2
sales. Apple knows this is not a sustainable business model, because
rare is the consumer product that can remain in vogue for decades. This
is why Apple has made a big push into news,

? 讀取一小部分新聞的元數(shù)據(jù)。

? 讀取一篇文章的全部文本,形式為HTML文檔。

? 導入BeautifulSoup HTML解析庫并進行后續(xù)操作。

? …以純文本方式(str對象)提取內(nèi)容。

? 打印新聞的開頭。

盡管這兩個例子很淺顯,但它們說明,通過Python包裝器庫和數(shù)據(jù)訂閱服務,可以以標準化、高效的方式得到結(jié)構(gòu)化和非結(jié)構(gòu)化的金融歷史數(shù)據(jù)。在許多情況下,個人甚至可以使用FXCM集團、LLC等交易平臺來免費獲得類似的數(shù)據(jù)集。一旦在Python級別上得到數(shù)據(jù)(獨立于原始來源),就可以利用Python數(shù)據(jù)分析生態(tài)系統(tǒng)的全部功能了。

數(shù)據(jù)驅(qū)動金融學

近年來,數(shù)據(jù)成了金融業(yè)的推動力。即使最大、最成功的對沖基金也自稱是“數(shù)據(jù)驅(qū)動”的,而非“金融驅(qū)動”的。越來越多的服務產(chǎn)品向大小機構(gòu)及個人提供海量數(shù)據(jù)。Python通常被選為與這些API交互、處理和分析數(shù)據(jù)的編程語言。

1.4.2 人工智能優(yōu)先金融學

由于通過編程API能夠取得大量金融數(shù)據(jù),所以在金融問題(如算法交易)上應用人工智能(AI)方法、特別是機器與深度學習(ML,DL)就變得非常容易,也更有成果了。

Python可以稱得上AI界的“寵兒”。它往往被AI研究人員和從業(yè)者選為編程語言。從這個意義上說,金融領域從不同領域的發(fā)展中得益,這些領域有時甚至與金融沒有太大的聯(lián)系。舉個例子,深度學習所用的TensorFlow開源程序庫是google公司開發(fā)和維護的,用于其母公司Alphabet自動駕駛汽車的制造和銷售上。

TensorFlow當然和股票自動算法交易一點關聯(lián)都沒有,但卻可以用于預測金融市場的變動。最廣泛使用的Python ML程序庫是scikit-learn。下面的代碼以高度簡化的方式說明:ML 分類算法如何用來預測期貨價格變動方向,并以這些預測為基礎制定一個算法交易策略。首先,導入數(shù)據(jù),準備期貨數(shù)據(jù)(定向滯后對數(shù)收益率數(shù)據(jù))。

In [36]: import numpy as np
import pandas as pd

In [37]: data = pd.read_csv('../../source/tr_eikon_eod_data.csv',
index_col=0, parse_dates=True)
data = pd.DataFrame(data['AAPL.O']) ?
data['Returns'] = np.log(data / data.shift()) ?
data.dropna(inplace=True)

In [38]: lags = 6

In [39]: cols = []
for lag in range(1, lags + 1):
col = 'lag_{}'.format(lag)
data[col] = np.sign(data['Returns'].shift(lag)) ?
cols.append(col)
data.dropna(inplace=True)

? 選擇蘋果公司(AAPL.0)歷史日終數(shù)據(jù)。

? 計算整個歷史數(shù)據(jù)內(nèi)的對數(shù)收益率。

? 生成帶有定向滯后對數(shù)收益率數(shù)據(jù)(+1或者−1)的DateFrame列。

接下來,為支持向量機(SVM)算法、模型擬合和預測步驟實例化一個模型對象。圖1-2說明,根據(jù)預測買進和賣出蘋果公司股票的基于預測交易策略的表現(xiàn)勝過被動的基準股票投資方法。

Python與金融:為什么將Python用于金融?

圖1-2 基于ML的算法交易策略與被動基準投資的對比(蘋果公司股票)

In [40]: from sklearn.svm import SVC

In [41]: model = SVC(gamma='auto') ?

In [42]: model.fit(data[cols], np.sign(data['Returns'])) ?
Out[42]: SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)

In [43]: data['Prediction'] = model.predict(data[cols]) ?

In [44]: data['Strategy'] = data['Prediction'] * data['Returns'] ?

In [45]: data[['Returns', 'Strategy']].cumsum().apply(np.exp).plot(
figsize=(10, 6)); ?

? 實例化模型對象。

? 根據(jù)期貨和標簽數(shù)據(jù)(全部是定向的)擬合模型。

? 使用擬合模型創(chuàng)建預測(樣本內(nèi)),這同時是交易策略的頭寸(買入或者賣出)。

? 根據(jù)預測值和基準對數(shù)收益率計算交易策略的對數(shù)收益率。

? 繪制基于ML交易策略表現(xiàn)與被動基準投資表現(xiàn)的對比曲線。

這里采用的簡化方法沒有考慮交易成本,也沒有將數(shù)據(jù)集分為訓練和測試子集。但是,這個例子說明,至少從技術意義上,將ML算法應用到金融數(shù)據(jù)有多么簡單。在實踐中,需要考慮一些重要的因素(參見Lopez de Prado(2018))。

人工智能優(yōu)先金融學

AI將像對待其他領域一樣,重塑金融行業(yè)。通過編程API功能可以取得大量金融數(shù)據(jù),這成為了該領域的引擎。

作為數(shù)據(jù)驅(qū)動金融學的自然延伸,不管從研究還是從業(yè)者的角度,金融學中的人工智能當然也是一個令人癡迷和興奮的領域。不過,這些技術與方法對人工智能優(yōu)先金融學同樣重要。

1.5 結(jié)語

Python作為一種語言,但更多的是作為生態(tài)系統(tǒng),是金融業(yè)理想的技術框架。它的特性中有許多好處,比如簡潔的語法、高效的開發(fā)方法和原型化及生產(chǎn)的易用性等。利用Python大量的可用庫和工具,我們似乎能夠應付當今金融業(yè)中分析、數(shù)據(jù)量和頻率、依從性及監(jiān)管所引發(fā)的大部分問題。即使在較大型的金融機構(gòu)中,它也具備提供單一、強大、一致性的框架,簡化端到端開發(fā)和生產(chǎn)工作的潛力。

此外,Python已經(jīng)成為人工智能、特別是機器與深度學習工作者選擇的編程語言。因此,Python對于數(shù)據(jù)驅(qū)動金融學和人工智能優(yōu)先金融學來說也是合適的語言,這兩種當今的趨勢將從根本上重塑金融學和金融行業(yè)。

分享到:
標簽:金融
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定