def get_slippage_data(data) -> pd.DataFrame: reporting_api = reportingApi(data, calendar_days_back=CALENDAR_DAYS_IN_YEAR) print("Getting data might take a while...") slippage_comparison_pd = reporting_api.combined_df_costs() return slippage_comparison_pd
def costs_report( data: dataBlob = arg_not_supplied, calendar_days_back: int = 250, end_date: datetime.datetime = arg_not_supplied, start_date: datetime.datetime = arg_not_supplied, ): if data is arg_not_supplied: data = dataBlob() reporting_api = reportingApi( data, start_date=start_date, end_date=end_date, calendar_days_back=calendar_days_back, ) formatted_output = [] formatted_output.append(reporting_api.std_header("Costs report")) formatted_output.append(reporting_api.table_of_slippage_comparison()) formatted_output.append(body_text("* indicates currently held position")) formatted_output.append(reporting_api.table_of_sr_costs()) formatted_output.append(body_text("* indicates currently held position")) formatted_output.append(reporting_api.footer()) return formatted_output
def system_status(data: dataBlob = arg_not_supplied): """ Report on system status :param: data blob :return: list of formatted output items """ if data is arg_not_supplied: data = dataBlob() reporting_api = reportingApi(data) formatted_output = [] formatted_output.append(reporting_api.terse_header("Status report")) list_of_func_names = [ "table_of_control_config_list_for_all_processes", "table_of_control_status_list_for_all_processes", "table_of_process_status_list_for_all_processes", "table_of_control_data_list_for_all_methods", "table_of_last_price_updates", "table_of_last_optimal_position_updates", "table_of_trade_limits", "table_of_position_limits", "table_of_overrides", "body_text_of_position_locks", ] for func_name in list_of_func_names: func = getattr(reporting_api, func_name) formatted_output.append(func()) formatted_output.append(reporting_api.footer()) return formatted_output
def instrument_risk_report( data: dataBlob = arg_not_supplied, ): if data is arg_not_supplied: data = dataBlob() reporting_api = reportingApi( data ) formatted_output = [] formatted_output.append( reporting_api.terse_header("Instrument risk report")) formatted_output.append(HEADER_TEXT) formatted_output.append(reporting_api.table_of_risk_all_instruments(sort_by='annual_perc_stdev', table_header="Risk of all instruments with data - sorted by annualised % standard deviation")) formatted_output.append(reporting_api.table_of_risk_all_instruments(sort_by='annual_risk_per_contract', table_header ="Risk of all instruments with data - sorted by annualised currency risk per contract")) formatted_output.append(reporting_api.table_of_risk_all_instruments(sort_by='contract_exposure', table_header ="Risk of all instruments with data - sorted by notional exposure per contract")) formatted_output.append(reporting_api.footer()) return formatted_output
def risk_report(data: dataBlob = arg_not_supplied): """ Get risk report info """ if data is arg_not_supplied: data = dataBlob() reporting_api = reportingApi(data) formatted_output = [] formatted_output.append(reporting_api.terse_header("Risk report")) list_of_func_names = [ "body_text_portfolio_risk_total", "body_text_margin_usage", "table_of_strategy_risk", "table_of_instrument_risk", "body_text_abs_total_all_risk_perc_capital", "body_text_abs_total_all_risk_annualised", "body_text_net_total_all_risk_annualised", "table_of_correlations", ] for func_name in list_of_func_names: func = getattr(reporting_api, func_name) formatted_output.append(func()) formatted_output.append(reporting_api.footer()) return formatted_output
def duplicate_market_report( data: dataBlob = arg_not_supplied, ): if data is arg_not_supplied: data = dataBlob() reporting_api = reportingApi( data ) formatted_output = [] formatted_output.append(reporting_api.terse_header("Duplicate markets report")) formatted_output.append(HEADER_TEXT) list_of_duplicate_market_tables = reporting_api.list_of_duplicate_market_tables() formatted_output.append(reporting_api.body_text_suggest_changes_to_duplicate_markets()) formatted_output = formatted_output + list_of_duplicate_market_tables formatted_output.append(reporting_api.footer()) return formatted_output
def remove_markets_report(data: dataBlob = arg_not_supplied, ): if data is arg_not_supplied: data = dataBlob() reporting_api = reportingApi(data) formatted_output = [] formatted_output.append( reporting_api.terse_header("Removed markets report")) formatted_output.append(HEADER_TEXT) list_of_func_names = [ "body_text_existing_markets_remove", "body_text_removed_markets_addback", "body_text_expensive_markets", "body_text_markets_without_enough_volume_risk", "body_text_markets_without_enough_volume_contracts", "body_text_too_safe_markets", "body_text_explain_safety" ] for func_name in list_of_func_names: func = getattr(reporting_api, func_name) formatted_output.append(func()) formatted_output.append(body_text("\n\n")) formatted_output.append(reporting_api.footer()) return formatted_output
def reconcile_info(data=arg_not_supplied): """ Report on system status :param: data blob :return: list of formatted output items """ if data is arg_not_supplied: data = dataBlob() reporting_api = reportingApi(data) formatted_output = [] formatted_output.append(reporting_api.terse_header("Reconcile report")) list_of_func_names = [ "body_text_position_breaks", "table_of_my_positions", "table_of_ib_positions", "table_of_my_recent_trades_from_db", "table_of_recent_ib_trades", "table_of_optimal_positions" ] for func_name in list_of_func_names: func = getattr(reporting_api, func_name) formatted_output.append(func()) formatted_output.append(reporting_api.footer()) return formatted_output
def get_data_for_markets(data): api = reportingApi(data) SR_costs = api.SR_costs() SR_costs = SR_costs.dropna() liquidity_data = api.liquidity_data() risk_data = api.instrument_risk_data_all_instruments() return SR_costs, liquidity_data, risk_data
def liquidity_report(data: dataBlob = arg_not_supplied): if data is arg_not_supplied: data = dataBlob() if data is arg_not_supplied: data = dataBlob() reporting_api = reportingApi(data) formatted_output = [] formatted_output.append(reporting_api.terse_header("Liquidity report")) formatted_output.append(reporting_api.table_of_liquidity_contract_sort()) formatted_output.append(reporting_api.table_of_liquidity_risk_sort()) formatted_output.append(reporting_api.footer()) return formatted_output
def minimum_capital_report(data: dataBlob = arg_not_supplied, ): if data is arg_not_supplied: data = dataBlob() reporting_api = reportingApi(data) formatted_output = [] formatted_output.append(reporting_api.std_header("Minimum capital report")) formatted_output.append(HEADER_TEXT) formatted_output.append(reporting_api.table_of_minimum_capital()) formatted_output.append(reporting_api.footer()) return formatted_output
def costs_report(data: dataBlob = arg_not_supplied, ): if data is arg_not_supplied: data = dataBlob() reporting_api = reportingApi(data) formatted_output = [] formatted_output.append(reporting_api.std_header("Costs report")) formatted_output.append(COSTS_REPORT_TEXT) formatted_output.append(reporting_api.table_of_sr_costs()) formatted_output.append(body_text("* indicates currently held position")) formatted_output.append(reporting_api.footer()) return formatted_output
def account_curve_report(data: dataBlob = arg_not_supplied, start_date = arg_not_supplied, end_date = arg_not_supplied): if data is arg_not_supplied: data = dataBlob() reporting_api = reportingApi(data, start_date=start_date, end_date=end_date) if (start_date is arg_not_supplied) and (end_date is arg_not_supplied): formatted_output = _account_curve_report_full(reporting_api) else: formatted_output = _account_curve_report_with_dates(reporting_api) return formatted_output
def pandl_info( data: dataBlob = arg_not_supplied, calendar_days_back=7, start_date=arg_not_supplied, end_date=arg_not_supplied, ): """ To begin with we calculate:: - change in total p&l from total capital - p&l for each instrument, by summing over p&l per contract :param: data blob :return: list of formatted output items """ if data is arg_not_supplied: data = dataBlob() reporting_api = reportingApi( data, start_date=start_date, end_date=end_date, calendar_days_back=calendar_days_back, ) formatted_output = [] formatted_output.append(reporting_api.std_header("Profit and loss report")) list_of_func_names = [ "body_text_total_capital_pandl", "table_pandl_for_instruments_across_strategies", "body_text_total_pandl_for_futures", "body_text_residual_pandl", "table_strategy_pandl_and_residual", "table_sector_pandl", ] for func_name in list_of_func_names: func = getattr(reporting_api, func_name) formatted_output.append(func()) formatted_output.append(reporting_api.footer()) return formatted_output
def trades_info( data=arg_not_supplied, calendar_days_back=1, end_date=arg_not_supplied, start_date=arg_not_supplied, ): """ Report on system status :param: data blob :return: list of formatted output items """ if data is arg_not_supplied: data = dataBlob() reporting_api = reportingApi( data, start_date=start_date, end_date=end_date, calendar_days_back=calendar_days_back, ) formatted_output = [] formatted_output.append(reporting_api.std_header("Trades report")) list_of_table_names = [ "table_of_orders_overview", "table_of_order_delays", "table_of_raw_slippage", "table_of_vol_slippage", "table_of_cash_slippage", ] for table_name in list_of_table_names: func = getattr(reporting_api, table_name) formatted_output.append(func()) ## special case list_of_summary = reporting_api.list_of_cash_summary_text() formatted_output = formatted_output + list_of_summary formatted_output.append(reporting_api.footer()) return formatted_output
def market_monitor_report(data: dataBlob = arg_not_supplied, start_date=arg_not_supplied, end_date=arg_not_supplied): if data is arg_not_supplied: data = dataBlob() reporting_api = reportingApi(data, start_date=start_date, end_date=end_date) if (start_date is arg_not_supplied) and (end_date is arg_not_supplied): formatted_output = _market_monitor_report_full(reporting_api) else: formatted_output = _market_monitor_with_dates(reporting_api) formatted_output.append(reporting_api.footer()) return formatted_output
def roll_info(data, instrument_code=ALL_ROLL_INSTRUMENTS): """ Get some roll info. For all markets which are: - currently rolling - need to have roll status changed now or in the near future We calculate: - Volume data - Curve data - Length to expiry data (contract and/or carry) - Current roll status - Suggested roll status :param: data blob :return: list of pd.DataFrame """ reporting_api = reportingApi(data) formatted_output = [] formatted_output.append(reporting_api.terse_header("Roll report")) formatted_output.append(reporting_api.table_of_roll_data(instrument_code)) formatted_output.append( body_text( "Roll_exp is days until preferred roll set by roll parameters. Prc_exp is days until price contract expires, " "Crry_exp is days until carry contract expires")) formatted_output.append( body_text("Contract suffix: p=price, f=forward, c=carry")) formatted_output.append( body_text( "Contract volumes over recent days, normalised so largest volume is 1.0" )) formatted_output.append(reporting_api.footer()) return formatted_output
def get_reporting_api(): return reportingApi(data, calendar_days_back=1)