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()
示例#2
0
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')