python多支股票最優投資組合
① 《股票最優投資組合案例研究 ——基於風險結合的動態規劃法 》作者是誰
趙和平
② 如何用python計算某支股票持有90天的收益率
defget(self,get,money):
print「ATM:」
print「yourmoneyis+「,self.get,」%aday
self.today=self.money*(self.get/100)+self.money
print「nowyouhave」,self.today
self.tomorrow=self.today*(self.get/100)+self.today
print「tomorrowyouwellhave」,self.tomorrow
get(50,10000)
這個代碼會給你1天後和2天後的余額,如果要顯示九十天,還請您自己打完
③ 請問怎樣才算一個合理的投資組合組合中基金是否要佔大部分比例其中股票最好要選幾只
你這個問題問的太籠統了!投資者有激進的,有穩健的,還有保守的。而基金也可以分為債券型,股票型,貨幣型,還有分級基金。不過一般來說選債券型基金較為合適,但是不要超過30%.股票不超過20%,保本理財不少於40%。生活流動資金保持10%左右比較合理!-----------------------------------------保本理財可以是長期定期存款,股票建議買分紅前100名之內的分紅要年均5%以上,市凈值小於1.5.持股5-10隻。每隻2%--4%.至於流動資金建議放在余額寶一類貨幣基金內,這樣使用方便,且收益也有4%左右,比活期存款要好得多!
④ 如何用python實現Markowitz投資組合優化
多股票策略回測時常常遇到問題。
倉位如何分配?
你以為基金經理都是一拍腦袋就等分倉位了嗎?
或者玩點玄乎的斐波拉契數列?
OMG,誰說的黃金比例,讓我看到你的腦袋(不削才怪)!!
其實,這個問題,好多好多年前馬科維茨(Markowitz)我喜愛的小馬哥就給出答案——投資組合理論。
根據這個理論,我們可以對多資產的組合配置進行三方面的優化。
1.找到有效前沿。在既定的收益率下使組合的方差最小。
2.找到sharpe最優的組合(收益-風險均衡點)
3.找到風險最小的組合
跟著我,一步兩步,輕松實現。
該理論基於用均值和方差來表述組合的優劣的前提。將選取幾只股票,用蒙特卡洛模擬初步探究組合的有效前沿。
通過最大Sharpe和最小方差兩種優化來找到最優的資產組合配置權重參數。
最後,刻畫出可能的分布,兩種最優以及組合的有效前沿。
註:
文中的數據API來自量化平台聚寬,在此表示感謝。
原文見【組合管理】——投資組合理論(有效前沿)(包含正態檢驗部分)
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')
Out[16]:
⑤ 選兩支股票作為投資組合,能規避風險又能有穩定收益的。謝謝!
000900高速收費股票可以做中長線投資,理由:1,股價破凈資 2,底部整理階段 3,戶均持股集中趨勢 4,同行業之間盈利不錯
再有就是選酒行業的,莫高股份、金楓酒業、伊力特
投資大多還是自己要有方向感,有主意的
希望你可以看得上
⑥ 如何用python實現Markowitz投資組合優化
m投資組合模型的一個很有力的替代是Index model,或者我們說的single factor model,因為markowitz是需要計算全部股票的協方差和方差的,如果證券的數量很多,計算量會非常大(這些在investment的參考書裡面有),我下面就把原話打給你 first,the model requires a huge number of estimates to fill the covariance matrix.second ,the model does not provide any guideline to the forecasting to the security risk premiums that are essential to construct the efficient frontier of risky assets.第一個是硬傷,單單計算NYSE的股票就要4.5百萬的估計量,而同等條件下index model才需要9002個估計量,這就是為什麼markowitz模型很多人不願意用的願意,而優點也很直接,如果你的估算值是准確的,那麼m模型的結果比其他都准確
⑦ 如何用python實現Markowitz投資組合優化
多資產的組合配置進行三方面的優化。 1.找到有效前沿。在既定的收益率下使組合的方差最校 2.找到sharpe最優的組合(收益-風險均衡點) 3.找到風險最小的組合
⑧ 如何用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]:
⑨ 急~~投資組合理論選擇三隻股票進行分析
予濱江集團 "買入"評級,目標價為16.53元
廣發證券9日發布投資報告,給予濱江集團(002244.sz) "買入"評級,目標價為16.53元,具體分析如下:
杭州樓市銷售火爆、5月成交量創歷史新高
在中央政府和杭州市政府新政的刺激下,杭州樓市自今年2月份開始逐漸回暖。5月杭州樓市成交量達到87萬平米,創歷史新高。今年1月至5月的成交量達到226萬平米,超過2008年全年212萬平米的成交量,超出比例為6.8%。
杭州房地產市場龍頭企業,深耕杭州市場
公司是杭州房地產行業的龍頭企業,多年來一致致力於杭州市房地產的開發和經營。2005年至今,公司在杭州主城區房地產市場份額均在頭三甲之列。
豐富而優質的土地儲備,足夠公司4-5年開發
公司目前權益土地儲備約248 萬平方米,其中90%位於杭州市。在杭州的A股上市公司中,公司在杭州主城區的土地儲備位居第一。公司的土地儲備大多集中在杭州的市中心、次中心或風景區畔,而且土地成本相對較低,平均樓面地價僅為3982元/平方米。低成本及地段優勢使得這些土地儲備具備良好的盈利前景。
項目銷售順利、手握大量預售賬款,09年業績90%鎖定
公司08年第四季度開盤的金色藍庭和陽光海岸項目已經基本售罄,新城時代廣場項目也已銷售近50%。2008年年末,公司的預收賬款約為42.6億元,主要是萬家花城項目、陽光海岸項目和金色藍庭項目的預收賬款。這些預售賬款使得公司2009年的業績已90%鎖定。公司一季度銷售收入約10億元,隨著8月城市之星項目的開盤,實現今年30億元銷售目標的難度已不大。
估值與評級
考慮到杭州市場良好的銷售情況,公司在杭州市場的龍頭地位以及豐富而優質土地儲備,廣發證券給予公司"買入"評級,目標價為16.53元。
風險提示
公司面臨的主要風險是市場集中風險和土地增值稅清繳風險。
字太多了,簡單說幾只吧,都是資產高的,有補漲動力的,你關注吧:
鞍鋼股份000898,中國鋁業601600,金馬股份000980。