BacktestExecutionModel#

API documentation for tradeexecutor.backtest.backtest_execution.BacktestExecutionModel Python class in Trading Strategy framework.

class BacktestExecutionModel[source]#

Bases: ExecutionModel

Simulate trades against historical data.

__init__(wallet, max_slippage, lp_fees=0.003, stop_loss_data_available=False)[source]#
Parameters:

Methods

__init__(wallet, max_slippage[, lp_fees, ...])

execute_trades(ts, state, trades, ...[, ...])

Execute the trades on a simulated environment.

get_routing_state_details()

Get needed details to establish a routing state.

initialize()

Set up the wallet

is_live_trading()

is_stop_loss_supported()

Do we support stop-loss/take profit functionality with this execution model?

preflight_check()

Check that we can start the trade executor

repair_unconfirmed_trades(state)

Repair unconfirmed trades.

simulate_leverage(state, trade)

simulate_spot(state, trade)

Spot market translation simulation with a simulated wallet.

simulate_trade(ts, state, idx, trade)

Set backtesting trade state from planned to executed.

__init__(wallet, max_slippage, lp_fees=0.003, stop_loss_data_available=False)[source]#
Parameters:
is_stop_loss_supported()[source]#

Do we support stop-loss/take profit functionality with this execution model?

  • For backtesting we need to have data stream for candles used to calculate stop loss

  • For production execution, we need to have special oracle data streams for checking real-time stop loss

preflight_check()[source]#

Check that we can start the trade executor

Raise:

AssertionError if something is a miss

initialize()[source]#

Set up the wallet

simulate_spot(state, trade)[source]#

Spot market translation simulation with a simulated wallet.

Check that the trade “executes” against the simulated wallet

Parameters:
Returns:

(ecuted_quantity, executed_reserve, sell_amount_epsilon_fix) tuple

Raises:

OutOfSimulatedBalance – Wallet does not have enough tokens to do the trade

Return type:

Tuple[Decimal, Decimal, bool]

simulate_trade(ts, state, idx, trade)[source]#

Set backtesting trade state from planned to executed.

Currently, always executes trades “perfectly” i.e. no different slipppage that was planned, etc.

Parameters:
  • ts (datetime) – Strategy cycle timestamp

  • state (State) – Current backtesting state

  • idx (int) – Index of the trade to be executed on this cycle

  • trade (TradeExecution) – The actual trade

Returns:

Executed quantity and executed reserve amounts

Return type:

Tuple[Decimal, Decimal]

execute_trades(ts, state, trades, routing_model, routing_state, check_balances=False)[source]#

Execute the trades on a simulated environment.

Calculates price impact based on historical data and fills the expected historical trade output.

Parameters:
get_routing_state_details()[source]#

Get needed details to establish a routing state.

Return type:

dict

repair_unconfirmed_trades(state)[source]#

Repair unconfirmed trades.

Repair trades that failed to properly broadcast or confirm due to blockchain node issues.

Returns:

List of fixed trades

Parameters:

state (State) –

Return type:

List[TradeExecution]