BacktestBroker

class src.boatwright.Brokers.BacktestBroker.BacktestBroker(broker_name=None, maker_fee=0.4, taker_fee=0.6, slippage=25, order_pf_factor=1, quote_symbol='USD', starting_aum=1000)

Broker class for backtesting, containing models for how different orders would be filled.

Parameters:
  • broker_name – if not None, loads the other parameters from config_data

  • maker_fee (float) – percent fee to post a trade

  • taker_fee (float) – percent fee to take a trade

  • slippage (float) – percent price slips, upward for buys, downward for sells relative to high and low of bar (for market orders only)

  • order_pf_factor (float) – For limit order, manipulates the gaussian distribution

  • quote_symbol (str) – reference currency of account, e.g. “USD”

  • starting_aum (float) – starting value of total ‘assets under managment’ in reference currency

calc_base_size(base_symbol, quote_symbol, frac=1)

calculates the frac * (available_account_balance) truncated to base_increment

calc_quote_size(base_symbol, quote_symbol, frac=1)

calculates the frac * (available_account_balance) truncated to quote_increment

cancel_order(order_id)

cancels an open order returns “success” or “fail”

get_account_balance(product)

returns user account info for the specified product (i.e. how much BTC does user have):

account_info = {
    "available_balance": account_response["available_balance"]["value"],
    "currency": account_response["available_balance"]["currency"]
}
get_order_info(order_id)

returns order , corresponding the to order status. i.e. filled order info will have avg_price, cost, fee, filled size etc

get_product_info(base_symbol)

returns product info as:

product_info = {
    "product_id": response["product_id"],
    "price": response["price"],
    "volume": response["volume_24h"],
    "base": response["base_display_symbol"],
    "base_size_increment": response["base_increment"],
    "min_base_size": response["base_min_size"],
    "max_base_size": response["base_max_size"],
    "quote": response["quote_display_symbol"],
    "quote_size_increment": response["quote_increment"],
    "min_quote_size": response["quote_min_size"],
    "max_quote_size": response["quote_max_size"],
}
limit_order(order)

place limit order

Parameters:

order (LimitOrder)

market_order(order)

place market order

Parameters:

order (MarketOrder)

reset()

resets product amounts to 0, base amount to starting aum, and aum to starting aum, clears orders

stop_order(order)

place stop limit order

Parameters:

order (StopOrder)

trailing_order(order)

place trailing stop order

Parameters:

order (TrailingOrder)

update_aum()

update values for cash, stock/crypto/forex etc assets, and total aum :return: None

update_open_orders()

checks orders in orders[“OPEN”] if any expire or trigger