BacktestExecutionModel#

tradeexecutor.backtest.backtest_execution.BacktestExecutionModel class.

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

simulate_trade(ts, state, 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_trade(ts, state, 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
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.

TODO: API Unfinished

Return type

dict