Source code for tradeexecutor.strategy.approval
"""Trade approval models.
Trade execution can have a separate approval step
- :py:class:`UncheckedApprovalModel`: all trades are automatically executed
- :py:class:`tradeexecutor.cli.approval.CLIApprovalModel`:
  trades need to be approved in a command line text user interface (TUI)
"""
import abc
import enum
from typing import List
from tradeexecutor.state.state import State
from tradeexecutor.state.trade import TradeExecution
[docs]class ApprovalType(enum.Enum):
    """What kind of approval model the trade executor uses."""
    unchecked = "unchecked"
    cli = "cli"
[docs]class ApprovalModel(abc.ABC):
    """A model that defines a checkpoint for trades before they are executd.
    Approval can be get in various ways
    - CLI confirmation by human
    - Web interface confirmation by human
    - A third party automated risk management system
    """
[docs]    def confirm_trades(self, state: State, trades: List[TradeExecution]) -> List[TradeExecution]:
        """
        This function may wait forever and block the trade execution thread.
        It is up to the approval internals to decide when to timeout and what to od in such situation.
        :param state: Current portfolio management states
        :param trades: Trades suggested bt the strategy
        :return: Filtered list of trades that should be executed
        """