導航:首頁 > 編程語言 > python構造投資者風險指數

python構造投資者風險指數

發布時間:2022-11-26 06:14:51

A. python實現資產配置(1)----Markowitz 投資組合模型

現假設有A, B, C, D, E五隻股票的收益率數據((第二日收盤價-第一日收盤價)/第一日收盤價)), 如果投資人的目標是達到20%的年收益率,那麼該如何進行資產配置,才能使得投資的風險最低?

更一般的問題,假設現有x 1 ,x 2 ,...,x n , n支風險資產,且收益率已知,如果投資人的預期收益為goalRet,那麼該如何進行資產配置,才能使得投資的風險最低?

1952年,芝加哥大學的Markowitz提出現代資產組合理論(Modern Portfolio Theory,簡稱MPT),為現代西方證券投資理論奠定了基礎。其基本思想是,證券投資的風險在於證券投資收益的不確定性。如果將收益率視為一個數學上的隨機變數的話,證券的期望收益是該隨機變數的數學期望(均值),而風險可以用該隨機變數的方差來表示。

對於投資組合而言,如何分配各種證券上的投資比例,從而使風險最小而收益最大?

答案是將投資比例設定為變數,通過數學規劃,對每一固定收益率求最小方差,對每一個固定的方差求最大收益率,這個多元方程的解可以決定一條曲線,這條曲線上的每一個點都對應著最優投資組合,即在給定風險水平下,收益率最大,這條曲線稱作「有效前沿」 (Efficient Frontier)。

對投資者而言,不存在比有效前沿更優的投資組合,只需要根據自己的風險偏好在有效前沿上尋找最優策略。
簡化後的公式為:

其中 p 為投資人的投資目標,即投資人期待的投資組合的期望值. 目標函數說明投資人資產分配的原則是在達成投資目標 p 的前提下,要將資產組合的風險最小化,這個公式就是Markowitz在1952年發表的'Portfolio Selection'一文的精髓,該文奠定了現代投資組合理論的基礎,也為Markowitz贏得了1990年的諾貝爾經濟學獎. 公式(1)中的決策變數為w i , i = 1,...,N, 整個數學形式是二次規劃(Quadratic Programming)問題,在允許賣空的情況下(即w i 可以為負,只有等式約束)時,可以用拉格朗日(Lagrange)方法求解。

有效前緣曲線如下圖:

我們考慮如下的二次規劃問題

運用拉格朗日方法求解,可以得到

再看公式(1),則將目標函數由 min W T W 調整為 min 1/2(W T W), 兩問題等價,寫出的求解矩陣為:

工具包: CVXOPT python凸優化包
函數原型: CVXOPT.solvers.qp(P,q,G,h,A,b)

求解時,將對應的P,q,G,h,A,b寫出,帶入求解函數即可.值得注意的是輸入的矩陣必須使用CVXOPT 中的matrix函數轉化,輸出的結果要使用 print(CVXOPT.solvers.qp(P,q,G,h,A,b)['x']) 函數才能輸出。

這里選取五支股票2014-01-01到2015-01-01的收益率數據進行分析.
選取的五支股票分別為: 白雲機場, 華夏銀行, 浙能電力, 福建高速, 生益科技

先大體了解一下五支股票的收益率情況:

看來,20%的預期收益是達不到了。

接下來,我們來看五支股票的相關系數矩陣:

可以看出,白雲機場和福建高速的相關性較高,因為二者同屬於交通版塊。在資產配置時,不利於降低非系統性風險。

接下來編寫一個MeanVariance類,對於傳入的收益率數據,可以進行給定預期收益的最佳持倉配比求解以及有效前緣曲線的繪制。

繪制的有效前緣曲線為:

將數據分為訓練集和測試集,並將隨機模擬的資產配比求得的累計收益與測試集的數據進行對比,得到:

可以看出,在前半段大部分時間用Markowitz模型計算出的收益率要高於隨機模擬的組合,然而在後半段卻不如隨機模擬的數據,可能是訓練的數據不夠或者沒有動態調倉造成的,在後面寫策略的時候,我會加入動態調倉的部分。

股票分析部分:

Markowitz 投資組合模型求解

蔡立專:量化投資——以python為工具. 電子工業出版社

B. python的量化代碼怎麼用到股市中

2010 ~ 2017 滬深A股各行業量化分析

在開始各行業的量化分析之前,我們需要先弄清楚兩個問題:

「2010-2017」投資於優質行業龍頭的收益表現

選好行業之後,下面進入選公司環節。我們知道,即便是一個好的行業也仍然存在表現不好的公司,那麼什麼是好的公司呢,本文試圖從營業收入規模和利潤規模和來考察以上五個基業長青的行業,從它們中去篩選公司作為投資標的。

3.1按營業收入規模構建的行業龍頭投資組合

首先,我們按照營業收入規模,篩選出以上5個行業【醫葯生物,建築裝飾,電氣設備,銀行和汽車】從2010年至今的行業龍頭如下表所示:

結論

通過以上行業分析和投資組合的歷史回測可以看到:

出自:JoinQuant 聚寬數據 JQData

C. 投資風險系數怎麼計算

計算公式:1 - 自籌基金/總投資基金來源。
1、投資風險系數。
2、「投資風險系數」使用總投資基金的非自籌資本比例,以反映開發商的發展基金的風險以及融資結構的健康和合理性。風險系數的值范圍是(0,1)。價值越大,投資風險越高。
3、投資價值的風險是投資者通過投資風險而獲得的額外利潤。風險是不良事件的可能性。幾乎所有企業的決定都有大型或小風險。特別是,投資決策涉及很長一段時間,復雜的內容,許多不確定因素和更突出的風險。
4、投資者風險投資的投資者所需的最低返回率的部分大於無風險投資的額征被稱為投資風險率,或風險補償率。一般來說,當投資風險價值或風險回報率時,投資者才願意投資風險投資。
拓展資料;
1、投資的風險價值有兩種形式:風險回報量和風險回報率
風險獎勵,風險標題的獎勵金額是投資風險價值的絕對形式,這是指通過對超過正常獎勵的投資風險獲得的額外獎勵。
風險回報率,風險回報率是投資風險價值的相對形式,這是指原始投資中額外回報的比例。
2、在實踐中,兩者之間沒有嚴格的區別,通常通過階段對數來衡量 - 風險回波率。
3、計算風險投資價值
除了被認為是無風險的國家債券或國債或國債的投資外,其他投資的投資回報率通常是金錢(利率)和風險投資價值的總和(風險回報率)。投資回報=利率+ var
4、投資風險的價值難以衡量。通過使用概率理論的數學方法,可以根據未來一年中預期回報的平均偏差程度估計。
5、人們總是希望採取更少的風險並獲得更多的利益。至少如果福利等於風險,這是投資的基本要求。因此,必須在投資決策中考慮各種風險因素,必須預測投資收入風險的影響,以判斷投資項目的可行性。
6、風險回報不易測量。為了計算某些風險條件下的投資回報,我們必須使用概率理論的方法根據預期回報的平均偏差程度來估計。
希望能夠給到你幫助。

D. 請問,市場上的量化工具有哪些

市面上大家可以接觸到的量化交易軟體,我們大致的分為三類:互聯網投資公司研發的,量化平台公司研發的和券商研發的。
第一:互聯網投資公司研發的,這類型的公司本質就是IT+金融
提供豐富的數據、tick級回測、模擬模擬、實盤交易、風控、績效等專業量化服務。最重要的是,無需使用者具備高超的選股素質,也不需要具備編程的能力,易操作易上手,可以說是目前市面上最符合個人投資者的量化交易軟體。掘金策能夠篩選相對安全性更高的投資標的,降低分析和選股的難度,幫助投資者有效判斷市場風險度高低,及時調整持倉比例和交易策略。算是市場上很好的量化交易工具
第二:量化平台研發的,
支持股票,期貨,兩融等量化實盤,實盤開通需要客戶提交申請和平台人工審核,具有實盤交易許可權後也可以手動交易。投研+交易的一站式量化投研系統,提供豐富的數據、多語言策略開發、tick級回測、模擬模擬、實盤交易、風控、績效等專業量化服務。
第三:券商研發的
有2005年以來的股票行情數據、市值數據、財務數據、上市公司基本信息、融資副券信息,商品期貨行情數據,基金行情及凈值數據,金融期貨數據,股指數據,行業概念數據,宏觀數據。可以提供股票、期貨、基金等品種的日、分鍾級回測。能夠進行日、分鍾級別、Tick級別的模擬交易。推送後用戶手動操作跟單但需要投資者具有好的選股思路同時具備編程的能力,機構使用者偏多,對於個人用戶不是特別的友好。

E. 如何用Python和機器學習炒股賺錢

相信很多人都想過讓人工智慧來幫你賺錢,但到底該如何做呢?瑞士日內瓦的一位金融數據顧問 Gaëtan Rickter 近日發表文章介紹了他利用 Python 和機器學習來幫助炒股的經驗,其最終成果的收益率跑贏了長期處於牛市的標准普爾 500 指數。雖然這篇文章並沒有將他的方法完全徹底公開,但已公開的內容或許能給我們帶來如何用人工智慧炒股的啟迪。

我終於跑贏了標准普爾 500 指數 10 個百分點!聽起來可能不是很多,但是當我們處理的是大量流動性很高的資本時,對沖基金的利潤就相當可觀。更激進的做法還能得到更高的回報。

這一切都始於我閱讀了 Gur Huberman 的一篇題為《Contagious Speculation and a Cure for Cancer: A Non-Event that Made Stock Prices Soar》的論文。該研究描述了一件發生在 1998 年的涉及到一家上市公司 EntreMed(當時股票代碼是 ENMD)的事件:

「星期天《紐約時報》上發表的一篇關於癌症治療新葯開發潛力的文章導致 EntreMed 的股價從周五收盤時的 12.063 飆升至 85,在周一收盤時接近 52。在接下來的三周,它的收盤價都在 30 以上。這股投資熱情也讓其它生物科技股得到了溢價。但是,這個癌症研究方面的可能突破在至少五個月前就已經被 Nature 期刊和各種流行的報紙報道過了,其中甚至包括《泰晤士報》!因此,僅僅是熱情的公眾關注就能引發股價的持續上漲,即便實際上並沒有出現真正的新信息。」

在研究者給出的許多有見地的觀察中,其中有一個總結很突出:

「(股價)運動可能會集中於有一些共同之處的股票上,但這些共同之處不一定要是經濟基礎。」

我就想,能不能基於通常所用的指標之外的其它指標來劃分股票。我開始在資料庫裡面挖掘,幾周之後我發現了一個,其包含了一個分數,描述了股票和元素周期表中的元素之間的「已知和隱藏關系」的強度。

我有計算基因組學的背景,這讓我想起了基因和它們的細胞信號網路之間的關系是如何地不為人所知。但是,當我們分析數據時,我們又會開始看到我們之前可能無法預測的新關系和相關性。

如果你使用機器學習,就可能在具有已知和隱藏關系的上市公司的寄生、共生和共情關系之上搶佔先機,這是很有趣而且可以盈利的。最後,一個人的盈利能力似乎完全關乎他在生成這些類別的數據時想出特徵標簽(即概念(concept))的強大組合的能力。

我在這類模型上的下一次迭代應該會包含一個用於自動生成特徵組合或獨特列表的單獨演算法。也許會基於近乎實時的事件,這可能會影響那些具有隻有配備了無監督學習演算法的人類才能預測的隱藏關系的股票組。

F. 如何用python實現Markowitz投資組合優化

0.導入需要的包import pandas as pd
import numpy as np
import statsmodels.api as sm #統計運算
import scipy.stats as scs #科學計算
import matplotlib.pyplot as plt #繪圖

1.選取幾只感興趣的股票
000413 東旭光電,000063 中興通訊,002007 華蘭生物,000001 平安銀行,000002 萬科A
並比較一下數據(2015-01-01至2015-12-31)
In[1]:
stock_set = ['000413.XSHE','000063.XSHE','002007.XSHE','000001.XSHE','000002.XSHE']
noa = len(stock_set)
df = get_price(stock_set, start_date = '2015-01-01', end_date ='2015-12-31', 'daily', ['close'])
data = df['close']
#規范化後時序數據
(data/data.ix[0]*100).plot(figsize = (8,5))
Out[1]:

2.計算不同證券的均值、協方差
每年252個交易日,用每日收益得到年化收益。計算投資資產的協方差是構建資產組合過程的核心部分。運用pandas內置方法生產協方差矩陣。
In [2]:
returns = np.log(data / data.shift(1))
returns.mean()*252
Out[2]:

000413.XSHE 0.184516
000063.XSHE 0.176790
002007.XSHE 0.309077
000001.XSHE -0.102059
000002.XSHE 0.547441

In [3]:
returns.cov()*252
Out[3]:

3.給不同資產隨機分配初始權重
由於A股不允許建立空頭頭寸,所有的權重系數均在0-1之間
In [4]:
weights = np.random.random(noa)
weights /= np.sum(weights)
weights
Out[4]:

array([ 0.37505798, 0.21652754, 0.31590981, 0.06087709, 0.03162758])

4.計算預期組合年化收益、組合方差和組合標准差
In [5]:
np.sum(returns.mean()*weights)*252
Out[5]:

0.21622558669017816

In [6]:
np.dot(weights.T, np.dot(returns.cov()*252,weights))
Out[6]:

0.23595133640121463

In [7]:
np.sqrt(np.dot(weights.T, np.dot(returns.cov()* 252,weights)))
Out[7]:

0.4857482232609962

5.用蒙特卡洛模擬產生大量隨機組合
進行到此,我們最想知道的是給定的一個股票池(證券組合)如何找到風險和收益平衡的位置。
下面通過一次蒙特卡洛模擬,產生大量隨機的權重向量,並記錄隨機組合的預期收益和方差。
In [8]:
port_returns = []
port_variance = []
for p in range(4000):
weights = np.random.random(noa)
weights /=np.sum(weights)
port_returns.append(np.sum(returns.mean()*252*weights))
port_variance.append(np.sqrt(np.dot(weights.T, np.dot(returns.cov()*252, weights))))
port_returns = np.array(port_returns)
port_variance = np.array(port_variance)
#無風險利率設定為4%
risk_free = 0.04
plt.figure(figsize = (8,4))
plt.scatter(port_variance, port_returns, c=(port_returns-risk_free)/port_variance, marker = 'o')
plt.grid(True)
plt.xlabel('excepted volatility')
plt.ylabel('expected return')
plt.colorbar(label = 'Sharpe ratio')
Out[8]:

6.投資組合優化1——sharpe最大
建立statistics函數來記錄重要的投資組合統計數據(收益,方差和夏普比)
通過對約束最優問題的求解,得到最優解。其中約束是權重總和為1。
In [9]:
def statistics(weights):
weights = np.array(weights)
port_returns = np.sum(returns.mean()*weights)*252
port_variance = np.sqrt(np.dot(weights.T, np.dot(returns.cov()*252,weights)))
return np.array([port_returns, port_variance, port_returns/port_variance])
#最優化投資組合的推導是一個約束最優化問題
import scipy.optimize as sco
#最小化夏普指數的負值
def min_sharpe(weights):
return -statistics(weights)[2]
#約束是所有參數(權重)的總和為1。這可以用minimize函數的約定表達如下
cons = ({'type':'eq', 'fun':lambda x: np.sum(x)-1})
#我們還將參數值(權重)限制在0和1之間。這些值以多個元組組成的一個元組形式提供給最小化函數
bnds = tuple((0,1) for x in range(noa))
#優化函數調用中忽略的唯一輸入是起始參數列表(對權重的初始猜測)。我們簡單的使用平均分布。
opts = sco.minimize(min_sharpe, noa*[1./noa,], method = 'SLSQP', bounds = bnds, constraints = cons)
opts
Out[9]:
status: 0
success: True
njev: 4
nfev: 28
fun: -1.1623048291871221
x: array([ -3.60840218e-16, 2.24626781e-16, 1.63619563e-01, -2.27085639e-16, 8.36380437e-01])
message: 'Optimization terminated successfully.'
jac: array([ 1.81575805e-01, 5.40387481e-01, 8.18073750e-05, 1.03137662e+00, -1.60038471e-05, 0.00000000e+00])
nit: 4

得到的最優組合權重向量為:
In [10]:
opts['x'].round(3)
Out[10]:
array([-0. , 0. , 0.164, -0. , 0.836])

sharpe最大的組合3個統計數據分別為:
In [11]:
#預期收益率、預期波動率、最優夏普指數
statistics(opts['x']).round(3)
Out[11]:

array([ 0.508, 0.437, 1.162])

7.投資組合優化2——方差最小
接下來,我們通過方差最小來選出最優投資組合。
In [12]:
#但是我們定義一個函數對 方差進行最小化
def min_variance(weights):
return statistics(weights)[1]
optv = sco.minimize(min_variance, noa*[1./noa,],method = 'SLSQP', bounds = bnds, constraints = cons)
optv
Out[12]:
status: 0
success: True
njev: 7
nfev: 50
fun: 0.38542969450547221
x: array([ 1.14787640e-01, 3.28089742e-17, 2.09584008e-01, 3.53487044e-01, 3.22141307e-01])
message: 'Optimization terminated successfully.'
jac: array([ 0.3851725 , 0.43591119, 0.3861807 , 0.3849672 , 0.38553924, 0. ])
nit: 7

方差最小的最優組合權重向量及組合的統計數據分別為:
In [13]:
optv['x'].round(3)
Out[13]:
array([ 0.115, 0. , 0.21 , 0.353, 0.322])

In [14]:
#得到的預期收益率、波動率和夏普指數
statistics(optv['x']).round(3)
Out[14]:
array([ 0.226, 0.385, 0.587])

8.組合的有效前沿
有效前沿有既定的目標收益率下方差最小的投資組合構成。
在最優化時採用兩個約束,1.給定目標收益率,2.投資組合權重和為1。
In [15]:
def min_variance(weights):
return statistics(weights)[1]
#在不同目標收益率水平(target_returns)循環時,最小化的一個約束條件會變化。
target_returns = np.linspace(0.0,0.5,50)
target_variance = []
for tar in target_returns:
cons = ({'type':'eq','fun':lambda x:statistics(x)[0]-tar},{'type':'eq','fun':lambda x:np.sum(x)-1})
res = sco.minimize(min_variance, noa*[1./noa,],method = 'SLSQP', bounds = bnds, constraints = cons)
target_variance.append(res['fun'])
target_variance = np.array(target_variance)

下面是最優化結果的展示。
叉號:構成的曲線是有效前沿(目標收益率下最優的投資組合)
紅星:sharpe最大的投資組合
黃星:方差最小的投資組合
In [16]:
plt.figure(figsize = (8,4))
#圓圈:蒙特卡洛隨機產生的組合分布
plt.scatter(port_variance, port_returns, c = port_returns/port_variance,marker = 'o')
#叉號:有效前沿
plt.scatter(target_variance,target_returns, c = target_returns/target_variance, marker = 'x')
#紅星:標記最高sharpe組合
plt.plot(statistics(opts['x'])[1], statistics(opts['x'])[0], 'r*', markersize = 15.0)
#黃星:標記最小方差組合
plt.plot(statistics(optv['x'])[1], statistics(optv['x'])[0], 'y*', markersize = 15.0)
plt.grid(True)
plt.xlabel('expected volatility')
plt.ylabel('expected return')
plt.colorbar(label = 'Sharpe ratio')

G. 第1章 為什麼將Python用於金融

python是一門高級的編程語言,廣泛應用在各種領域之中,同時也是人工智慧領域首選的語言。
為什麼將python用於金融?因為Python的語法很容易實現金融演算法和數學計算,可以將數學語句轉化成python代碼,沒有任何語言能像Python這樣適用於數學。

H. 風變Python智能交易課程是如何幫助投資者構建投資能力的

風變Python智能交易延續了風變傳統的自動化教學思路,以項目制教學法為基礎,實現了教學與實踐相結合。課程涵蓋了多個種類,從金融知識、數學建模、策略代碼開發、到策略調參、風險把控、回測和模擬交易等,均有涉獵。當投資者既有了實踐經驗又有理論知識,他的投資能力自然而然的就被建立起來了。

I. 怎樣理解風險厭惡系數的經濟意義

風險厭惡系數A是投資者主觀態度,主要受到 投資者的風險偏好 、投資者的風險承受力 和 投資者的時間期限的影響。

以下便於你理解:
A為投資者個人風險厭惡指數。

具體說,方差減少效用的程度取決於A,即投資者個人對風險的厭惡程度。投資者對風險的厭惡程度越高,A值越大,對風險投資的妨礙也就越大。
投資學里通常假定投資者是風險厭惡型的,即A>0, 風險的存在減少效用,他們當中A越大的人越厭惡風險。該式與高預期收益會提高效用,而高風險會降低效用的概念是一致的。
A=0,為中性投資者,風險沒影響,他們只關心期望收益率。
A<0,為風險喜好投資者,風險的存在增加效用,他們當中A越小的人(或者說絕對值越大)越喜歡風險。
投資者對各種競爭性資產組合進行選擇時, 將挑選效用值最大的資產組合。風險厭惡程度A顯然會對投資者在風險與報酬間的平衡產生重大影響。
風險厭惡系數A 受多種因素影響,如:
– 投資者的風險偏好
– 投資者的風險承受力
– 投資者的時間期限
風險厭惡系數A是投資者主觀態度,因人而異,通常通過問卷調查來獲得。人為規定一個風險厭惡系數A的范圍,如美國投資理財行業通常規定A在2-6之間,用來測度風險厭惡程度。

J. 設一投資者的效用函數為u(x)=xr,則其絕對風險厭惡函數A(x)=

指數效用函數的風險厭惡系數為a此時u(w)=-aexp(-ax),對數效用函數確定是常數?

閱讀全文

與python構造投資者風險指數相關的資料

熱點內容
apachelinux配置代理 瀏覽:294
程序員的命運會怎樣 瀏覽:663
看逗逗App怎麼樣 瀏覽:445
新英朗壓縮比 瀏覽:297
代購幫app的錢怎麼提現 瀏覽:338
android藍牙可見 瀏覽:360
python游戲編程入門pdf 瀏覽:701
深金融app是干什麼的 瀏覽:611
程序員公園倒立 瀏覽:384
工作應酬吃辣片緩解壓力嗎 瀏覽:427
premierepdf教程 瀏覽:433
pic單片機原理及應用 瀏覽:255
解壓小玩具吐舌頭 瀏覽:711
有道雲伺服器崩潰 瀏覽:890
相冊加密文件怎麼做 瀏覽:213
食指中節骨折演算法 瀏覽:262
工業40pdf 瀏覽:978
錄像機存儲伺服器怎麼實現連接 瀏覽:938
金獅視頻加密能破解嗎 瀏覽:795
溯源碼掃出來不對 瀏覽:924