量化交易30天Day24 | 效率前緣

量化交易30天Day24 - 投資組合概念(四) 效率前緣. 量化交易30天系列第24 篇. Sean Liu. 1 年前‧ 1528 瀏覽. 0. 量化交易30天本系列文章是紀錄一位量化交易新手的學習 ...第12屆iThome鐵人賽DAY240AI&Data量化交易30天系列第24篇量化交易30天Day24-投資組合概念(四)效率前緣12th鐵人賽portfoliomanagementpythondatastatisticsSeanLiu團隊OutcomeFirst2020-10-0708:46:391580瀏覽量化交易30天本系列文章是紀錄一位量化交易新手的學習過程,除了基礎的Python語法不說明,其他金融相關的東西都會一步步地說明,希望讓更多想學習量化交易但是沒有學過相關金融知識的朋友們,透過這系列的文章,能夠對量化交易略知一二,也歡迎量化交易的高手們多多交流。

還記得上一篇使用SPY與TLT兩檔商品畫出的曲線嗎?如果再加上第三檔商品去湊成一個投資組合,那這張圖會變成什麼樣呢?下面就來實驗看看:加入GLD黃金指數型ETF爬資料&整理#爬蟲importosimportpandas_datareaderaspdrSPY=pdr.get_data_tiingo('SPY',api_key='yourapikey')TLT=pdr.get_data_tiingo('TLT',api_key='yourapikey')GLD=pdr.get_data_tiingo('GLD',api_key='yourapikey')SPY.reset_index(inplace=True)TLT.reset_index(inplace=True)GLD.reset_index(inplace=True)#整理importpandasaspdClose=pd.concat([SPY.adjClose,TLT.adjClose,GLD.adjClose],axis=1)Close.index=SPY.dateClose.columns=['SPY','TLT','GLD']計算統計數字#共變異數矩陣importnumpyasnpcov_matrix=Close.pct_change().apply(lambdax:np.log(1+x)).cov()cov_matrix#平均報酬率expected_return=Close.resample('Y').last()[:-1].pct_change().mean()expected_returnSPY0.150916TLT0.057185GLD0.091891dtype:float64#標準差standard_dev=Close.pct_change().apply(lambdax:np.log(1+x)).std().apply(lambdax:x*np.sqrt(250))standard_devSPY0.188367TLT0.137420GLD0.137545dtype:float64#整理成表格return_dev_matrix=pd.concat([expected_return,standard_dev],axis=1)return_dev_matrix.columns=['ExpReturns','StandardDev.']return_dev_matrix計算報酬率與標準差port_ret=[]port_dev=[]port_weights=[]assets_nums=3port_nums=2000forportinrange(2000):weights=np.random.random(assets_nums)weights=weights/np.sum(weights)port_weights.append(weights)returns=np.dot(weights,expected_return)port_ret.append(returns)var=cov_matrix.mul(weights,axis=0).mul(weights,axis=1).sum().sum()sd=np.sqrt(var)ann_sd=sd*np.sqrt(250)port_dev.append(ann_sd)data={'Returns':port_ret,'StandardDev.':port_dev}forcounter,symbolinenumerate(Close.columns.tolist()):data[symbol+'weight']=[w[counter]forwinport_weights]portfolios=pd.DataFrame(data)port


常見投資理財問答


延伸文章資訊