stable/freqtrade/rpc/rpc_types.py

129 lines
3.0 KiB
Python
Raw Normal View History

from datetime import datetime
2023-03-24 19:54:28 +00:00
from typing import Any, List, Literal, Optional, TypedDict, Union
2023-03-24 19:54:28 +00:00
from freqtrade.constants import PairWithTimeframe
from freqtrade.enums import RPCMessageType
class RPCSendMsgBase(TypedDict):
2023-03-06 18:44:23 +00:00
pass
# ty1pe: Literal[RPCMessageType]
class RPCStatusMsg(RPCSendMsgBase):
"""Used for Status, Startup and Warning messages"""
2023-03-24 19:36:29 +00:00
type: Literal[RPCMessageType.STATUS, RPCMessageType.STARTUP, RPCMessageType.WARNING]
status: str
2023-03-24 19:47:17 +00:00
class RPCStrategyMsg(RPCSendMsgBase):
"""Used for Status, Startup and Warning messages"""
type: Literal[RPCMessageType.STRATEGY_MSG]
msg: str
class RPCProtectionMsg(RPCSendMsgBase):
2023-03-06 18:44:23 +00:00
type: Literal[RPCMessageType.PROTECTION_TRIGGER, RPCMessageType.PROTECTION_TRIGGER_GLOBAL]
id: int
pair: str
base_currency: Optional[str]
lock_time: str
lock_timestamp: int
lock_end_time: str
lock_end_timestamp: int
reason: str
side: str
active: bool
2023-03-06 18:44:23 +00:00
class RPCWhitelistMsg(RPCSendMsgBase):
type: Literal[RPCMessageType.WHITELIST]
data: List[str]
2023-03-24 19:35:01 +00:00
class __RPCBuyMsgBase(RPCSendMsgBase):
2023-03-06 18:23:05 +00:00
trade_id: int
buy_tag: Optional[str]
enter_tag: Optional[str]
exchange: str
pair: str
2023-03-24 19:47:17 +00:00
base_currency: str
2023-03-06 18:23:05 +00:00
leverage: Optional[float]
direction: str
limit: float
open_rate: float
2023-04-01 18:10:52 +00:00
order_type: str
stake_amount: float
stake_currency: str
fiat_currency: Optional[str]
amount: float
open_date: datetime
2023-03-06 18:23:05 +00:00
current_rate: Optional[float]
sub_trade: bool
2023-03-24 19:35:01 +00:00
class RPCBuyMsg(__RPCBuyMsgBase):
type: Literal[RPCMessageType.ENTRY, RPCMessageType.ENTRY_FILL]
class RPCCancelMsg(__RPCBuyMsgBase):
2023-03-06 18:44:23 +00:00
type: Literal[RPCMessageType.ENTRY_CANCEL]
reason: str
2023-03-24 19:35:01 +00:00
class RPCSellMsg(__RPCBuyMsgBase):
2023-03-06 18:44:23 +00:00
type: Literal[RPCMessageType.EXIT, RPCMessageType.EXIT_FILL]
cumulative_profit: float
gain: str # Literal["profit", "loss"]
close_rate: float
profit_amount: float
profit_ratio: float
2023-03-06 18:23:05 +00:00
sell_reason: Optional[str]
exit_reason: Optional[str]
close_date: datetime
2023-03-06 18:23:05 +00:00
# current_rate: Optional[float]
order_rate: Optional[float]
2023-03-24 19:35:01 +00:00
class RPCSellCancelMsg(__RPCBuyMsgBase):
2023-03-06 18:44:23 +00:00
type: Literal[RPCMessageType.EXIT_CANCEL]
reason: str
gain: str # Literal["profit", "loss"]
profit_amount: float
profit_ratio: float
2023-03-06 18:23:05 +00:00
sell_reason: Optional[str]
exit_reason: Optional[str]
close_date: datetime
class _AnalyzedDFData(TypedDict):
2023-03-24 19:54:28 +00:00
key: PairWithTimeframe
df: Any
la: datetime
class RPCAnalyzedDFMsg(RPCSendMsgBase):
"""New Analyzed dataframe message"""
type: Literal[RPCMessageType.ANALYZED_DF]
data: _AnalyzedDFData
2023-03-24 19:54:28 +00:00
class RPCNewCandleMsg(RPCSendMsgBase):
"""New candle ping message, issued once per new candle/pair"""
type: Literal[RPCMessageType.NEW_CANDLE]
data: PairWithTimeframe
RPCSendMsg = Union[
RPCStatusMsg,
2023-03-24 19:47:17 +00:00
RPCStrategyMsg,
RPCProtectionMsg,
2023-03-06 18:44:23 +00:00
RPCWhitelistMsg,
RPCBuyMsg,
RPCCancelMsg,
RPCSellMsg,
2023-03-24 19:54:28 +00:00
RPCSellCancelMsg,
RPCAnalyzedDFMsg,
RPCNewCandleMsg
]