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
Esempio n. 2
0
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
Esempio n. 5
0
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
Esempio n. 6
0
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
Esempio n. 7
0
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
Esempio n. 9
0
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
Esempio n. 10
0
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
Esempio n. 11
0
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
Esempio n. 12
0
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
Esempio n. 14
0
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
Esempio n. 15
0
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
Esempio n. 17
0
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
Esempio n. 18
0
def get_reporting_api():
    return reportingApi(data, calendar_days_back=1)