def _get_combined_forecast(system, instrument_code, this_stage): this_stage.log.msg("Calculating combined forecast for %s" % (instrument_code), instrument_code=instrument_code) forecast_weights = this_stage.get_forecast_weights(instrument_code) rule_variation_list = list(forecast_weights.columns) forecasts = this_stage.get_all_forecasts(instrument_code, rule_variation_list) forecast_div_multiplier = this_stage.get_forecast_diversification_multiplier( instrument_code) forecast_cap = this_stage.get_forecast_cap() # multiply weights by forecasts combined_forecast = multiply_df(forecast_weights, forecasts) # sum combined_forecast = combined_forecast.sum( axis=1).to_frame("comb_forecast") # apply fdm # (note in this simple version we aren't adjusting FDM if forecast_weights change) forecast_div_multiplier = forecast_div_multiplier.reindex( forecasts.index, method="ffill") raw_combined_forecast = multiply_df(combined_forecast, forecast_div_multiplier) combined_forecast = apply_cap(raw_combined_forecast, forecast_cap) combined_forecast[combined_forecast > 0.0] = 10.0 combined_forecast[combined_forecast < 0.0] = 10.0 return combined_forecast
def _get_combined_forecast(system, instrument_code, this_stage): this_stage.log.msg( "Calculating combined forecast for %s" % (instrument_code), instrument_code=instrument_code) forecast_weights = this_stage.get_forecast_weights(instrument_code) rule_variation_list = list(forecast_weights.columns) forecasts = this_stage.get_all_forecasts(instrument_code, rule_variation_list) forecast_div_multiplier = this_stage.get_forecast_diversification_multiplier( instrument_code) forecast_cap = this_stage.get_forecast_cap() # multiply weights by forecasts combined_forecast = multiply_df(forecast_weights, forecasts) # sum combined_forecast = combined_forecast.sum( axis=1).to_frame("comb_forecast") # apply fdm # (note in this simple version we aren't adjusting FDM if forecast_weights change) forecast_div_multiplier = forecast_div_multiplier.reindex( forecasts.index, method="ffill") raw_combined_forecast = multiply_df(combined_forecast, forecast_div_multiplier) combined_forecast = apply_cap(raw_combined_forecast, forecast_cap) combined_forecast[combined_forecast > 0.0] = 10.0 combined_forecast[combined_forecast < 0.0] = 10.0 return combined_forecast
def _get_combined_forecast(system, instrument_code, this_stage): this_stage.log.msg("Calculating combined forecast for %s" % (instrument_code), instrument_code=instrument_code) forecast_weights = this_stage.get_forecast_weights(instrument_code) rule_variation_list = list(forecast_weights.columns) forecasts = this_stage.get_all_forecasts(instrument_code, rule_variation_list) forecast_div_multiplier = this_stage.get_forecast_diversification_multiplier( instrument_code) forecast_cap = this_stage.get_forecast_cap() # multiply weights by forecasts combined_forecast = multiply_df(forecast_weights, forecasts) # sum combined_forecast = combined_forecast.sum( axis=1).to_frame("comb_forecast") # apply fdm # (note in this simple version we aren't adjusting FDM if forecast_weights change) forecast_div_multiplier = forecast_div_multiplier.reindex( forecasts.index, method="ffill") raw_combined_forecast = multiply_df(combined_forecast, forecast_div_multiplier) def map_forecast_value(x): x = float(x) if x < -20.0: return -30.0 if x >= -20.0 and x < -10.0: return -(abs(x) - 10.0) * 3 if x >= -10.0 and x <= 10.0: return 0.0 if x > 10.0 and x <= 20.0: return (abs(x) - 10.0) * 3 return 30.0 combined_forecast = pd.DataFrame( [map_forecast_value(x) for x in combined_forecast.values], combined_forecast.index) return combined_forecast
def _get_combined_forecast(system, instrument_code, this_stage): this_stage.log.msg( "Calculating combined forecast for %s" % (instrument_code), instrument_code=instrument_code) forecast_weights = this_stage.get_forecast_weights(instrument_code) rule_variation_list = list(forecast_weights.columns) forecasts = this_stage.get_all_forecasts(instrument_code, rule_variation_list) forecast_div_multiplier = this_stage.get_forecast_diversification_multiplier( instrument_code) forecast_cap = this_stage.get_forecast_cap() # multiply weights by forecasts combined_forecast = multiply_df(forecast_weights, forecasts) # sum combined_forecast = combined_forecast.sum( axis=1).to_frame("comb_forecast") # apply fdm # (note in this simple version we aren't adjusting FDM if forecast_weights change) forecast_div_multiplier = forecast_div_multiplier.reindex( forecasts.index, method="ffill") raw_combined_forecast = multiply_df(combined_forecast, forecast_div_multiplier) def map_forecast_value(x): x = float(x) if x < -20.0: return -30.0 if x >= -20.0 and x < -10.0: return -(abs(x) - 10.0) * 3 if x >= -10.0 and x <= 10.0: return 0.0 if x > 10.0 and x <= 20.0: return (abs(x) - 10.0) * 3 return 30.0 combined_forecast = pd.DataFrame( [map_forecast_value(x) for x in combined_forecast.values], combined_forecast.index) return combined_forecast