EthereumExecutionModel#
API documentation for tradeexecutor.ethereum.execution.EthereumExecutionModel Python class in Trading Strategy framework.
- class EthereumExecutionModel[source]#
- Bases: - ExecutionModel- Run order execution on a single Uniswap v2 style exchanges. - abstract __init__(tx_builder, min_balance_threshold=Decimal('0.5'), confirmation_block_count=6, confirmation_timeout=datetime.timedelta(seconds=300), max_slippage=0.01, stop_on_execution_failure=True, swap_gas_fee_limit=2000000, mainnet_fork=False)[source]#
- Parameters:
- tx_builder (TransactionBuilder) – Hot wallet instance used for this execution 
- min_balance_threshold – Abort execution if our hot wallet gas fee balance drops below this 
- confirmation_block_count – How many blocks to wait for the receipt confirmations to mitigate unstable chain tip issues 
- confirmation_timeout – How long we wait transactions to clear 
- stop_on_execution_failure – Raise an exception if any of the trades fail top execute 
- max_slippage (float) – - TODO: No longer used. Set in TradeExecution object. - Max slippage tolerance per trade. 0.01 is 1%. 
- mainnet_fork – Is this Anvil in automining mainnet fork mode 
 
 
 - Methods - __init__(tx_builder[, ...])- param tx_builder:
 - analyse_trade_by_receipt(web3, uniswap, tx, ...)- Links to either uniswap v2 or v3 implementation in eth_defi - broadcast_and_resolve(state, trades[, ...])- Do the live trade execution. - execute_trades(ts, state, trades, ...[, ...])- Execute the trades determined by the algo on a designed Uniswap v2 instance. - Get needed details to establish a routing state. - Set up the wallet - is_live_trading()- Do we support stop-loss/take profit functionality with this execution model? - is_v3()- Returns true if instance is related to Uniswap V3, else false. - Links to either uniswap v2 or v3 implementation in eth_defi - pre_execute_assertions(ts, routing_model, ...)- Check that we can connect to the web3 node - repair_unconfirmed_trades(state)- Repair unconfirmed trades. - resolve_trades(ts, state, tx_map, receipts)- Resolve trade outcome. - update_confirmation_status(ts, tx_map, receipts)- First update the state of all transactions, as we now have receipt for them. - Attributes - Which chain the live execution is connected to. - web3- abstract __init__(tx_builder, min_balance_threshold=Decimal('0.5'), confirmation_block_count=6, confirmation_timeout=datetime.timedelta(seconds=300), max_slippage=0.01, stop_on_execution_failure=True, swap_gas_fee_limit=2000000, mainnet_fork=False)[source]#
- Parameters:
- tx_builder (TransactionBuilder) – Hot wallet instance used for this execution 
- min_balance_threshold – Abort execution if our hot wallet gas fee balance drops below this 
- confirmation_block_count – How many blocks to wait for the receipt confirmations to mitigate unstable chain tip issues 
- confirmation_timeout – How long we wait transactions to clear 
- stop_on_execution_failure – Raise an exception if any of the trades fail top execute 
- max_slippage (float) – - TODO: No longer used. Set in TradeExecution object. - Max slippage tolerance per trade. 0.01 is 1%. 
- mainnet_fork – Is this Anvil in automining mainnet fork mode 
 
 
 - abstract analyse_trade_by_receipt(web3, uniswap, tx, tx_hash, tx_receipt, input_args, pair_fee)[source]#
- Links to either uniswap v2 or v3 implementation in eth_defi - Parameters:
- Return type:
 
 - abstract mock_partial_deployment_for_analysis()[source]#
- Links to either uniswap v2 or v3 implementation in eth_defi 
 - abstract is_v3()[source]#
- Returns true if instance is related to Uniswap V3, else false. Kind of a hack to be able to share resolve trades function amongst v2 and v3. 
 - repair_unconfirmed_trades(state)[source]#
- Repair unconfirmed trades. - Repair trades that failed to properly broadcast or confirm due to blockchain node issues. - Parameters:
- state (State) – 
- Return type:
 
 - 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 
 - Return type:
 
 - broadcast_and_resolve(state, trades, confirmation_timeout=datetime.timedelta(seconds=60), confirmation_block_count=0, stop_on_execution_failure=False)[source]#
- Do the live trade execution. - Push trades to a live blockchain 
- Wait transactions to be mined 
- Based on the transaction result, update the state of the trade if it was success or not 
 - Parameters:
- confirmation_block_count (int) – How many blocks to wait until marking transaction as confirmed 
- stop_on_execution_failure – If any of the transactions fail, then raise an exception. Set for unit test. 
- state (State) – 
- trades (List[TradeExecution]) – 
- confirmation_timeout (timedelta) – 
 
- Confirmation_timeout:
- Max time to wait for a confirmation. - We can use zero or negative values to simulate unconfirmed trades. See test_broadcast_failed_and_repair_state. 
 
 - execute_trades(ts, state, trades, routing_model, routing_state, check_balances=False)[source]#
- Execute the trades determined by the algo on a designed Uniswap v2 instance. - Returns:
- Tuple List of succeeded trades, List of failed trades 
- Parameters:
- ts (datetime) – 
- state (State) – 
- trades (List[TradeExecution]) – 
- routing_model (tradeexecutor.ethereum.uniswap_v2.uniswap_v2_routing.UniswapV2SimpleRoutingModel | tradeexecutor.ethereum.uniswap_v3.uniswap_v3_routing.UniswapV3SimpleRoutingModel) – 
- routing_state (tradeexecutor.ethereum.uniswap_v2.uniswap_v2_routing.UniswapV2RoutingState | tradeexecutor.ethereum.uniswap_v3.uniswap_v3_routing.UniswapV3RoutingState) – 
 
 
 - update_confirmation_status(ts, tx_map, receipts)[source]#
- First update the state of all transactions, as we now have receipt for them. Update the transaction confirmation status - Parameters:
- ts (datetime) – 
- tx_map (Dict[HexBytes, Tuple[TradeExecution, BlockchainTransaction]]) – 
 
- Return type:
 
 - resolve_trades(ts, state, tx_map, receipts, stop_on_execution_failure=True)[source]#
- Resolve trade outcome. - Read on-chain Uniswap swap data from the transaction receipt and record how it went. - Mutates the trade objects in-place. - Parameters:
- tx_map (Dict[HexBytes, Tuple[TradeExecution, BlockchainTransaction]]) – tx hash -> (trade, transaction) mapping 
- receipts (Dict[HexBytes, dict]) – tx hash -> receipt object mapping 
- stop_on_execution_failure – Raise an exception if any of the trades failed 
- ts (datetime) – 
- state (State) –