Source code for tradeexecutor.strategy.pandas_trader.trade_decision

"""Pandas based strategy core function."""
import typing
from typing import Dict, List

import pandas as pd

from tradeexecutor.state.state import State
from tradeexecutor.state.trade import TradeExecution
from tradeexecutor.strategy.pricing_model import PricingModel
from tradingstrategy.universe import Universe


[docs]class TradeDecider(typing.Protocol): """A callable that decides on new trades for every cycle. This class provides `callable type hinting <https://stackoverflow.com/questions/68472236/type-hint-for-callable-that-takes-kwargs>`_. Called for each cycle and returns new trades to be executed. Can be given inline or is a function called `decide_trades` in a strategy module. """ # Only accept kwargs as per https://www.python.org/dev/peps/pep-3102/
[docs] def __call__( *ignore, timestamp: pd.Timestamp, universe: Universe, state: State, pricing_model: PricingModel, cycle_debug_data: Dict) -> List[TradeExecution]: """ :param ignore: See https://www.python.org/dev/peps/pep-3102/ :param timestamp: The current cycle timestamp. This is the timestamp of the last candle opening time. :param universe: The current trading universe. All pairs, exchanges, etc. :param state: The current state of the trade execution. All open positions, past trades. :param pricing_model: Pricing model can tell the buy/sell price of the particular asset at a particular moment. :param cycle_debug_data: Random debug and diagnostics information about the current execution cycle as Python dictionary. :return: New trades to be executed on this cycle. These must be added as the part of the state, usually using :py:class:`tradeexecutor.strategy.pandas_trader.PositionManager`. """ pass