導航:首頁 > 主力排名 > 股票的投資組合有效前沿曲線

股票的投資組合有效前沿曲線

發布時間:2023-09-04 04:23:13

1. 如何用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]:

2. 用Python中的蒙特卡洛模擬兩支股票組成的投資組合的價格趨勢分析

蒙特卡洛模擬是一種模擬把真實系統中的概率過程用計算機程序來模擬的方法。對於投資組合的價格趨勢分析,可以使用Python中的蒙特卡洛模擬。首先,回顧投資組合的價格趨勢。投資組合中的股票價格的趨勢是受多種因素影響的,可分為經濟、政治和技術因素,其中經濟因素最重要。因此,蒙特卡洛模擬可以模擬這些因素對投資組合價格趨勢的影響,並通過計算機繪制投資組合價格趨勢的曲線。
Python中的蒙特卡洛模擬首先需要計算投資組合中各股票價格的每一期的收益率,其次,計算出投資組合的收益率;隨後,計算預測投資組合的期權價格,並將所有的期權價格疊加起來,從而繪制投資組合的價格曲線。最後,在投資組合的價格曲線的基礎上,可以分析投資組合在不同時期的價格走勢,並進行投資組合結構的調整,從而獲得最優投資組合。

3. 在股票模擬交易中採取了哪些投資組合和交易

理性的交易策略應該包括以下幾種基本類型:(一)價值型策略:即著眼於股票的內在價值。
最典型的一個是巴菲特,完全從公司基本面上尋找投資機會。
(二)趨勢型策略:通俗說,就是追漲殺跌。
從眾心理是趨勢的主要基礎。
趨勢也是股市運行的最明顯特徵。
(三)能量型策略:前面的趨勢型主要關注價格,而能量型主要關注的是成交量。
(四)周期型策略:螺旋式上升是世界最常見的發展方式,股市也不例外。
一個螺旋就是一個周期。
我們常說的波段,它的學名應該也叫周期。
(五)突變型策略:突變就是價格發生突然變化的意思。
突變往往是容易把握的好機會。
(六)跟庄型策略:分析莊家坐莊思路與操作,採取相應行動。
炒股的方法很多,最重要的是找到自己的盈利方式,新手前期不防先用個模擬盤去練習一段時日,從模擬中找出一套自己盈利的方式,目前的牛股寶模擬炒股還不錯,功能全面,行情跟實盤同步,使用起來有一定的幫助。
股票投資策略主要有哪幾種
股票交易系統是自己選股、買賣、持倉的行為指南。
是否有一套適合自己、適應市場的交易系統,是能否持續穩定盈利的關鍵。
1、自選股應該建立自己的自選股股票池,動態管理、持續跟蹤自選股,時機到來時可買入。
自選股票的選股邏輯: 熱點題材股、成長股、困境逆轉股、低估股、資產突變重組股、套利股等。
2、組合原則:適當分散當出現買點時,應利用組合的方式進行買入,注意適當分散投資。
可以避免滿倉或者重倉單一股票的黑天鵝事件和長時間不漲或者被套的心態急躁問題。
股票組合應該是不同行業、不同題材的股票。
3、順勢而為順勢加倉持倉、逆勢減倉或空倉,絕對不用逆勢而為。
嚴格遵守生命線操作紀律,當大盤和個股的價格運行在生命線上時做多,反之看空。
生命線主要指均線,一般短線操作是10日均線、中長線操作20日或者30日均線。
4、倉位管理分批買入和賣出,當出現入場時機時,應分批買入多隻股票,同理當賣出時機出現時,也應該分批賣出,注意自己的倉位控制。
當大盤強勢放量上漲,個股普漲時,應重倉操作;
反之則需要減倉或者空倉。
5、持續完善操作系統依據上面的幾點,即可建立自己的操作系統。
平時操作時,需嚴格按操作系統進行操作。
操作系統建立後不是一成不變的,應該結合自己的實際操作,不斷改進完善自己的操作系統,確保自己持續穩定的盈利。
回答於 1 小時前
搶首贊
尼N K相機D850—北京國貿旗艦店折扣活動中
值得一看的尼康相機相關信息推薦
尼K相機北京朝陽旗艦店,位於朝陽區東大橋8號【國貿CBD商區世貿天街】北150米.SOHO尚都北塔B座4層2425.
北京朝尚佳徠科技有..廣告
尼康相機d850-京東數碼,爆款限量搶購!

尼康(Nikon) D810 進階版 全畫幅數碼 單反相機 D850 套機 d850 70-200mm f/2.8E VR
¥34999 元

尼康(Nikon) D810 進階版 全畫幅數碼 單反相機 D850 套機 d850 24-70mmf/2.8E VR
¥34999 元

尼康(Nikon) D810 進階版 全畫幅數碼 單反相機 D850 套機 d850 24-70mm f/2.8G
¥31000 元
京東廣告
住人集裝箱多少錢一個-量身定製_認准法利萊_【可租可售】
住人集裝箱多少錢一個,「法利萊」22年集裝箱房集生產,設計,安裝,售後一體,無需改水電,拎包入住!住人集裝箱多少錢一個,造型美觀,規格齊全,工地現場考察設計,20年施工經驗,放心之選!

4. 投資組合理論的內容

該理論包含兩個重要內容:均值-方差分析方法和投資組合有效邊界模型。
在發達的證券市場中,馬科維茨投資組合理論早已在實踐中被證明是行之有效的,並且被廣泛應用於組合選擇和資產配置。但是,我國的證券理論界和實務界對於該理論是否適合於我國股票市場一直存有較大爭議。
從狹義的角度來說,投資組合是規定了投資比例的一攬子有價證券,當然,單只證券也可以當作特殊的投資組合。本文討論的投資組合限於由股票和無風險資產構成的投資組合。
人們進行投資,本質上是在不確定性的收益和風險中進行選擇。投資組合理論用均值—方差來刻畫這兩個關鍵因素。所謂均值,是指投資組合的期望收益率,它是單只證券的期望收益率的加權平均,權重為相應的投資比例。當然,股票的收益包括分紅派息和資本增值兩部分。所謂方差,是指投資組合的收益率的方差。我們把收益率的標准差稱為波動率,它刻畫了投資組合的風險。
人們在證券投資決策中應該怎樣選擇收益和風險的組合呢?這正是投資組合理論研究的中心問題。投資組合理論研究「理性投資者」如何選擇優化投資組合。所謂理性投資者,是指這樣的投資者:他們在給定期望風險水平下對期望收益進行最大化,或者在給定期望收益水平下對期望風險進行最小化。
因此把上述優化投資組合在以波動率為橫坐標,收益率為縱坐標的二維平面中描繪出來,形成一條曲線。這條曲線上有一個點,其波動率最低,稱之為最小方差點(英文縮寫是MVP)。這條曲線在最小方差點以上的部分就是著名的(馬考維茨)投資組合有效邊界,對應的投資組合稱為有效投資組合。投資組合有效邊界一條單調遞增的凹曲線。
如果投資范圍中不包含無風險資產(無風險資產的波動率為零),曲線AMB是一條典型的有效邊界。A點對應於投資范圍中收益率最高的證券。
如果在投資范圍中加入無風險資產,那麼投資組合有效邊界是曲線AMC。C點表示無風險資產,線段CM是曲線AMB的切線,M是切點。M點對應的投資組合被稱為「市場組合」。
如果市場允許賣空,那麼AMB是二次曲線;如果限制賣空,那麼AMB是分段二次曲線。在實際應用中,限制賣空的投資組合有效邊界要比允許賣空的情形復雜得多,計算量也要大得多。
在波動率-收益率二維平面上,任意一個投資組合要麼落在有效邊界上,要麼處於有效邊界之下。因此,有效邊界包含了全部(帕雷托)最優投資組合,理性投資者只需在有效邊界上選擇投資組合。

閱讀全文

與股票的投資組合有效前沿曲線相關的資料

熱點內容
股票投資理念國家政策 瀏覽:974
如何尋找一隻股票的多空分界線 瀏覽:543
報告個人事項股票持有時間 瀏覽:139
證券公司質押股票處置 瀏覽:701
股票軟體多顯示屏設置 瀏覽:902
新三板市場股票賬戶 瀏覽:320
博泰科技股票 瀏覽:901
macd指標股票使用方法 瀏覽:342
st風險警示股票交易 瀏覽:674
買的股票退市了現在怎麼辦 瀏覽:814
非營業時間可以買入股票嗎 瀏覽:906
股票賬戶密碼可以用字母嗎 瀏覽:753
有資金介入的股票就一定會漲嗎 瀏覽:27
2020有漲停股票 瀏覽:698
股票平時休息時間 瀏覽:194
股票退市整理期買賣 瀏覽:93
中國股票歷史最低點是哪一年 瀏覽:435
電視可以看股票的軟體 瀏覽:445
看股票下載什麼app 瀏覽:401
一隻股票瘋狂上漲 瀏覽:419