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
"""