"""Absract PairUniverse trade generator."""
import datetime
from decimal import Decimal
from tradeexecutor.state.state import State, TradeType
from tradeexecutor.state.trade import TradeExecution
from tradeexecutor.state.identifier import TradingPairIdentifier
[docs]class PairUniverseTestTrader:
"""Helper class to create trades for testing.
Trades are executed by the routing model.
"""
[docs] def __init__(self, state: State):
self.state = state
self.nonce = 1
[docs] def buy(self, pair: TradingPairIdentifier, amount_in_usd: Decimal) -> TradeExecution:
"""Buy token (trading pair) for a certain value."""
reserve_currency, exchange_rate = self.state.portfolio.get_default_reserve_asset()
position, trade, created = self.state.create_trade(
strategy_cycle_at=datetime.datetime.utcnow(),
pair=pair,
assumed_price=1.0,
quantity=None,
reserve=amount_in_usd,
trade_type=TradeType.rebalance,
reserve_currency=reserve_currency,
reserve_currency_price=1.0,
pair_fee=pair.fee,
)
return trade
[docs] def sell(self, pair: TradingPairIdentifier, quantity: Decimal) -> TradeExecution:
"""Sell token token (trading pair) for a certain quantity."""
reserve_currency, exchange_rate = self.state.portfolio.get_default_reserve_asset()
position, trade, created = self.state.create_trade(
strategy_cycle_at=datetime.datetime.utcnow(),
pair=pair,
assumed_price=1.0,
quantity=-quantity,
reserve=None,
trade_type=TradeType.rebalance,
reserve_currency=reserve_currency,
reserve_currency_price=1.0,
pair_fee=pair.fee,
)
return trade