EthereumExecutionModel#
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__(web3, hot_wallet, 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)[source]#
- Parameters:
web3 (Web3) – Web3 connection used for this instance
hot_wallet (HotWallet) – 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) – Max slippage tolerance per trade. 0.01 is 1%.
Methods
__init__
(web3, hot_wallet[, ...])- param web3:
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.
- abstract __init__(web3, hot_wallet, 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)[source]#
- Parameters:
web3 (Web3) – Web3 connection used for this instance
hot_wallet (HotWallet) – 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) – Max slippage tolerance per trade. 0.01 is 1%.
- abstract static analyse_trade_by_receipt(web3, uniswap, tx, tx_hash, tx_receipt)[source]#
Links to either uniswap v2 or v3 implementation in eth_defi
- Parameters:
web3 (Web3) –
uniswap (UniswapV2Deployment) –
tx (dict) –
tx_hash (str) –
tx_receipt (dict) –
- Return type:
eth_defi.trade.TradeSuccess | eth_defi.trade.TradeFail
- abstract static mock_partial_deployment_for_analysis()[source]#
Links to either uniswap v2 or v3 implementation in eth_defi
- abstract static 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_routing.UniswapV2SimpleRoutingModel | tradeexecutor.ethereum.uniswap_v3_routing.UniswapV3SimpleRoutingModel) –
routing_state (tradeexecutor.ethereum.uniswap_v2_routing.UniswapV2RoutingState | tradeexecutor.ethereum.uniswap_v3_routing.UniswapV3RoutingState) –
- get_routing_state_details()[source]#
Get needed details to establish a routing state.
TODO: API Unfinished
- Return type:
- 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) –