BacktestExecution#
API documentation for tradeexecutor.backtest.backtest_execution.BacktestExecution Python class in Trading Strategy framework.
- class BacktestExecution[source]#
Bases:
ExecutionModel
Simulate trades against historical data.
- __init__(wallet, max_slippage=0.01, lp_fees=0.003, stop_loss_data_available=False)[source]#
- Parameters:
wallet (SimulatedWallet) –
max_slippage (float) –
lp_fees (float) –
Methods
__init__
(wallet[, max_slippage, lp_fees, ...])create_default_routing_model
(strategy_universe)Get the default routing model for this executor.
execute_trades
(ts, state, trades, ...[, ...])Execute the trades on a simulated environment.
Get the address where the strat holds tokens.
Get needed details to establish a routing state.
Fix the block number for all checks and actions.
Set up the wallet
is_live_trading
()Do we support stop-loss/take profit functionality with this execution model?
Check that we can start the trade executor
repair_unconfirmed_trades
(state)Repair unconfirmed trades.
simulate_leverage
(state, trade)Leverage simulation with a simulated wallet.
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=0.01, lp_fees=0.003, stop_loss_data_available=False)[source]#
- Parameters:
wallet (SimulatedWallet) –
max_slippage (float) –
lp_fees (float) –
- get_safe_latest_block()[source]#
Fix the block number for all checks and actions.
At the start of each action cycle (strategy decision, position triggers) we fix ourselves to a certain block number we know is “safe” and the data in at this block number is unlike to change
We then perform all deposit and redemptions and accounting checks using this block number as end block, to get a
- Returns:
A good safe latest block number.
Return None if the block number is irrelevant for the execution, like backtesting and such.
- get_balance_address()[source]#
Get the address where the strat holds tokens.
- Returns:
None if this executor does not use on-chain addresses.
- 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
- simulate_spot(state, trade)[source]#
Spot market translation simulation with a simulated wallet.
Check that the trade “executes” against the simulated wallet
- simulate_leverage(state, trade)[source]#
Leverage simulation with a simulated wallet.
Check that the trade “executes” against the simulated wallet
TODO: currently doesn’t support leverage long yet
- Parameters:
state (State) – Backtester state
trade (TradeExecution) – Trade to be executed
- Returns:
(ecuted_quantity, executed_reserve, sell_amount_epsilon_fix) tuple
- Raises:
OutOfSimulatedBalance – Wallet does not have enough tokens to do the trade
- 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:
- execute_trades(ts, state, trades, routing_model, routing_state, check_balances=False, triggered=False)[source]#
Execute the trades on a simulated environment.
Calculates price impact based on historical data and fills the expected historical trade output.
- Parameters:
check_balances – Raise an error if we run out of balance to perform buys in some point.
ts (datetime) –
state (State) –
trades (List[TradeExecution]) –
routing_model (BacktestRoutingModel) –
routing_state (BacktestRoutingState) –