def plt_moving_average(date_w_return, factor_name): ave_return_20 = functions.moving_average(date_w_return, 20) ave_return_40 = functions.moving_average(date_w_return, 40) ave_return_130 = functions.moving_average(date_w_return, 130) ave_return_200 = functions.moving_average(date_w_return, 200) plt.plot(date_w_return['date'], date_w_return['return'], color='lightblue') # plt.plot(ave_return_20['date'], ave_return_20['ave_return'], color='g', linewidth=2.0) plt.plot(ave_return_40['date'], ave_return_40['ave_return'], label='40 day average', color='r', linewidth=2.0) plt.plot(ave_return_130['date'], ave_return_130['ave_return'], label='130 day average', color='blue', linewidth=2.0) # plt.plot(ave_return_200['date'], ave_return_200['ave_return'], color='pink', linewidth=2.0) plt.title('%s factor return over time' % factor_name) plt.grid() plt.legend(bbox_to_anchor=(0.2, 1)) pylab.ylim([-1, 1]) plt.show()
def plt_moving_average(date_w_return, factor_name): ave_return_20 = functions.moving_average(date_w_return, 20) ave_return_40 = functions.moving_average(date_w_return, 40) ave_return_130 = functions.moving_average(date_w_return, 130) ave_return_200 = functions.moving_average(date_w_return, 200) plt.plot(date_w_return['date'], date_w_return['return'], color='lightblue') # plt.plot(ave_return_20['date'], ave_return_20['ave_return'], color='g', linewidth=2.0) plt.plot(ave_return_40['date'], ave_return_40['ave_return'], label='40 day average', color='r', linewidth=2.0) plt.plot(ave_return_130['date'], ave_return_130['ave_return'], label='130 day average', color='blue', linewidth=2.0) # plt.plot(ave_return_200['date'], ave_return_200['ave_return'], color='pink', linewidth=2.0) plt.title('%s factor return over time' % factor_name) plt.grid() plt.legend(bbox_to_anchor=(0.2, 1)) pylab.ylim([-1, 1]) plt.show()
plt.plot(SP500Sample['date'], CAPITAL * SP500Sample['adj_close'] / ini_sp500, label='S&P500', color='b', linewidth=2.0) plt.legend(bbox_to_anchor=(0.2, 1)) plt.grid() plt.show() # factor_cov = np.cov(FactorSample.drop('date', axis=1).as_matrix().transpose()) factor_corr = FactorSample.drop('date', axis=1).corr() # now test if there's any mean reverting phenomenon of SML/HML/UMD factor smb_return = FactorSample[['date', 'SMB']].rename( columns={'SMB': 'return'}) hml_return = FactorSample[['date', 'HML']].rename( columns={'HML': 'return'}) umd_return = FactorSample[['date', 'UMD']].rename( columns={'UMD': 'return'}) mkt_return = FactorSample[['date', 'Mkt-RF']].rename( columns={'Mkt-RF': 'return'}) smb_ave_40 = functions.moving_average(smb_return, 40).rename(columns={'ave_return': 'ave_return_40'}) smb_ave_130 = functions.moving_average(smb_return, 130).rename(columns={'ave_return': 'ave_return_130'}) diff_mean = smb_ave_40.merge(smb_ave_130, on='date').reset_index(drop=True) diff_mean['diff'] = diff_mean['ave_return_40'] - diff_mean['ave_return_130'] threshold = 0.05 plt.plot(diff_mean['date'], diff_mean['diff'], 'r-') plt.axhline(threshold) plt.axhline(-threshold) plt.title('difference between 40 day average and 130 day average') plt.grid() plt.show() # functions.plt_moving_average(smb_return, 'SMB') # ts.adfuller(smb_return['return'], 1) # functions.plt_moving_average(hml_return, 'HML') # ts.adfuller(hml_return['return'], 1) # functions.plt_moving_average(umd_return, 'UMD')