def get_scatter_data_for_code_forecast(system, instrument_code, rule_name, startdate=None, enddate=None, return_period=5): norm_data = system.rawdata.norm_returns(instrument_code) forecast = system.rules.get_raw_forecast(instrument_code, rule_name) if startdate is None: startdate = forecast.index[0] if enddate is None: enddate = forecast.index[-1] (forecast, norm_data) = align_to_joint( forecast[startdate:enddate], norm_data[startdate:enddate], ffill=(True, False)) # work out return for the N days after the forecast period_returns = pd.rolling_sum(norm_data, return_period, min_periods=1) ex_post_returns = period_returns.shift(-return_period) lagged_forecast = forecast.shift(1) return (list(ex_post_returns.iloc[:, 0].values), list(lagged_forecast.iloc[:, 0].values))
def get_scatter_data_for_code_vol(system, instrument_code, rule_name, return_period=5, days=64): denom_price = system.rawdata.daily_denominator_price(instrument_code) x = system.rawdata.daily_returns(instrument_code) vol = robust_vol_calc(x, days) perc_vol = 100.0 * divide_df_single_column(vol, denom_price.shift(1)) volavg = pd.rolling_median(perc_vol, 1250, min_periods=10) vol_qq = (perc_vol - volavg) / volavg ## work out return for the N days after the forecast norm_data = system.accounts.pandl_for_instrument_forecast( instrument_code, rule_name) (vol_qq, norm_data) = align_to_joint(vol_qq, norm_data, ffill=(True, False)) period_returns = pd.rolling_sum(norm_data, return_period, min_periods=1) ex_post_returns = period_returns.shift(-return_period) lagged_vol = vol_qq.shift(1) return (list(ex_post_returns.iloc[:, 0].values), list(lagged_vol.iloc[:, 0].values))
def get_scatter_data_for_code_vol( system, instrument_code, rule_name, return_period=5, days=64): denom_price = system.rawdata.daily_denominator_price(instrument_code) x = system.rawdata.daily_returns(instrument_code) vol = robust_vol_calc(x, days) perc_vol = 100.0 * divide_df_single_column(vol, denom_price.shift(1)) volavg = pd.rolling_median(perc_vol, 1250, min_periods=10) vol_qq = (perc_vol - volavg) / volavg # work out return for the N days after the forecast norm_data = system.accounts.pandl_for_instrument_forecast( instrument_code, rule_name) (vol_qq, norm_data) = align_to_joint( vol_qq, norm_data, ffill=(True, False)) period_returns = pd.rolling_sum(norm_data, return_period, min_periods=1) ex_post_returns = period_returns.shift(-return_period) lagged_vol = vol_qq.shift(1) return (list(ex_post_returns.iloc[:, 0].values), list( lagged_vol.iloc[:, 0].values))
def get_scatter_data_for_code_forecast(system, instrument_code, rule_name, startdate=None, enddate=None, return_period=5): norm_data=system.rawdata.norm_returns(instrument_code) forecast=system.rules.get_raw_forecast(instrument_code, rule_name) if startdate is None: startdate=forecast.index[0] if enddate is None: enddate=forecast.index[-1] (forecast, norm_data) = align_to_joint(forecast[startdate:enddate], norm_data[startdate:enddate], ffill=(True, False)) ## work out return for the N days after the forecast period_returns = pd.rolling_sum(norm_data, return_period, min_periods=1) ex_post_returns = period_returns.shift(-return_period) lagged_forecast = forecast.shift(1) return (list(ex_post_returns.iloc[:,0].values),list(lagged_forecast.iloc[:,0].values))
ans = load(open("/home/rob/data.pck", "rb")) [roll_acc, idm, acc_curve, mkt_counters] = ans # plot IDM against market count, scattered mkt_count_for_scatter = [] idm_for_scatter = [] roll_acc_for_scatter = [] risk_for_scatter = [] for (roll_acc_item, idm_item, mkt_count_item) in zip( roll_acc, idm, mkt_counters): (roll_acc_item, mkt_count_item) = align_to_joint( roll_acc_item, mkt_count_item, ffill=(True, True)) (idm_item, mkt_count_item) = align_to_joint( idm_item, mkt_count_item, ffill=(True, True)) norm_risk = .2 / (roll_acc_item.resample("A", how="mean").iloc[ :, 0] / idm_item.resample("A", how="mean").iloc[:, 0]) roll_acc_item_rs = list( roll_acc_item.resample( "A", how="mean").iloc[ :, 0].values) idm_item_rs = list(idm_item.resample("A", how="mean").iloc[:, 0].values) mktcount_item_rs = list(mkt_count_item.resample("A", how="mean").values) mkt_count_for_scatter = mkt_count_for_scatter + mktcount_item_rs roll_acc_for_scatter = roll_acc_for_scatter + roll_acc_item_rs idm_for_scatter = idm_for_scatter + idm_item_rs
ans = load(open("/home/rob/data.pck", "rb")) [roll_acc, idm, acc_curve, mkt_counters] = ans ### plot IDM against market count, scattered mkt_count_for_scatter = [] idm_for_scatter = [] roll_acc_for_scatter = [] risk_for_scatter = [] for (roll_acc_item, idm_item, mkt_count_item) in zip(roll_acc, idm, mkt_counters): (roll_acc_item, mkt_count_item) = align_to_joint(roll_acc_item, mkt_count_item, ffill=(True, True)) (idm_item, mkt_count_item) = align_to_joint(idm_item, mkt_count_item, ffill=(True, True)) norm_risk = .2 / (roll_acc_item.resample("A", how="mean").iloc[:, 0] / idm_item.resample("A", how="mean").iloc[:, 0]) roll_acc_item_rs = list( roll_acc_item.resample("A", how="mean").iloc[:, 0].values) idm_item_rs = list(idm_item.resample("A", how="mean").iloc[:, 0].values) mktcount_item_rs = list(mkt_count_item.resample("A", how="mean").values) mkt_count_for_scatter = mkt_count_for_scatter + mktcount_item_rs roll_acc_for_scatter = roll_acc_for_scatter + roll_acc_item_rs idm_for_scatter = idm_for_scatter + idm_item_rs