2020-12-27 08:02:35 +00:00
|
|
|
from datetime import date, datetime
|
2021-02-28 09:56:51 +00:00
|
|
|
from typing import Any, Dict, List, Optional, Union
|
2020-12-27 08:02:35 +00:00
|
|
|
|
2023-07-31 16:04:25 +00:00
|
|
|
from pydantic import BaseModel, ConfigDict, RootModel, SerializeAsAny
|
2020-12-25 12:08:25 +00:00
|
|
|
|
2023-01-15 10:44:10 +00:00
|
|
|
from freqtrade.constants import DATETIME_PRINT_FORMAT, IntOrInf
|
2023-06-04 11:25:39 +00:00
|
|
|
from freqtrade.enums import MarginMode, OrderTypeValues, SignalDirection, TradingMode
|
2023-06-03 07:20:01 +00:00
|
|
|
from freqtrade.types import ValidExchangesType
|
2020-12-27 08:02:35 +00:00
|
|
|
|
2020-12-25 12:08:25 +00:00
|
|
|
|
2023-06-03 04:57:25 +00:00
|
|
|
class ExchangeModePayloadMixin(BaseModel):
|
2023-07-18 04:44:33 +00:00
|
|
|
trading_mode: Optional[TradingMode] = None
|
|
|
|
margin_mode: Optional[MarginMode] = None
|
|
|
|
exchange: Optional[str] = None
|
2023-06-03 04:57:25 +00:00
|
|
|
|
|
|
|
|
2020-12-25 12:08:25 +00:00
|
|
|
class Ping(BaseModel):
|
|
|
|
status: str
|
|
|
|
|
2020-12-25 12:11:01 +00:00
|
|
|
|
2020-12-25 14:50:19 +00:00
|
|
|
class AccessToken(BaseModel):
|
|
|
|
access_token: str
|
|
|
|
|
|
|
|
|
|
|
|
class AccessAndRefreshToken(AccessToken):
|
|
|
|
refresh_token: str
|
|
|
|
|
|
|
|
|
2020-12-25 12:11:01 +00:00
|
|
|
class Version(BaseModel):
|
|
|
|
version: str
|
2020-12-25 12:08:25 +00:00
|
|
|
|
|
|
|
|
2020-12-25 19:07:12 +00:00
|
|
|
class StatusMsg(BaseModel):
|
|
|
|
status: str
|
|
|
|
|
|
|
|
|
2023-05-31 05:00:20 +00:00
|
|
|
class BgJobStarted(StatusMsg):
|
|
|
|
job_id: str
|
|
|
|
|
|
|
|
|
|
|
|
class BackgroundTaskStatus(BaseModel):
|
2023-05-31 05:08:27 +00:00
|
|
|
job_id: str
|
|
|
|
job_category: str
|
2023-05-31 05:00:20 +00:00
|
|
|
status: str
|
|
|
|
running: bool
|
2023-07-18 04:44:33 +00:00
|
|
|
progress: Optional[float] = None
|
2023-05-31 05:00:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
class BackgroundTaskResult(BaseModel):
|
2023-07-18 04:44:33 +00:00
|
|
|
error: Optional[str] = None
|
2023-05-31 05:00:20 +00:00
|
|
|
status: str
|
|
|
|
|
|
|
|
|
2020-12-26 16:33:27 +00:00
|
|
|
class ResultMsg(BaseModel):
|
|
|
|
result: str
|
|
|
|
|
|
|
|
|
2020-12-25 12:08:25 +00:00
|
|
|
class Balance(BaseModel):
|
|
|
|
currency: str
|
|
|
|
free: float
|
|
|
|
balance: float
|
|
|
|
used: float
|
2023-07-18 04:44:33 +00:00
|
|
|
bot_owned: Optional[float] = None
|
2020-12-25 12:08:25 +00:00
|
|
|
est_stake: float
|
2023-07-18 04:44:33 +00:00
|
|
|
est_stake_bot: Optional[float] = None
|
2020-12-25 12:08:25 +00:00
|
|
|
stake: str
|
2022-02-19 15:28:51 +00:00
|
|
|
# Starting with 2.x
|
|
|
|
side: str
|
|
|
|
leverage: float
|
|
|
|
is_position: bool
|
|
|
|
position: float
|
2023-04-22 12:57:13 +00:00
|
|
|
is_bot_managed: bool
|
2020-12-25 12:08:25 +00:00
|
|
|
|
|
|
|
|
|
|
|
class Balances(BaseModel):
|
|
|
|
currencies: List[Balance]
|
|
|
|
total: float
|
2023-04-22 14:13:27 +00:00
|
|
|
total_bot: float
|
2020-12-25 12:08:25 +00:00
|
|
|
symbol: str
|
|
|
|
value: float
|
2023-04-22 14:13:27 +00:00
|
|
|
value_bot: float
|
2020-12-25 12:08:25 +00:00
|
|
|
stake: str
|
|
|
|
note: str
|
2021-09-19 11:16:30 +00:00
|
|
|
starting_capital: float
|
|
|
|
starting_capital_ratio: float
|
|
|
|
starting_capital_pct: float
|
|
|
|
starting_capital_fiat: float
|
|
|
|
starting_capital_fiat_ratio: float
|
|
|
|
starting_capital_fiat_pct: float
|
|
|
|
|
2020-12-26 14:54:22 +00:00
|
|
|
|
|
|
|
class Count(BaseModel):
|
|
|
|
current: int
|
|
|
|
max: int
|
|
|
|
total_stake: float
|
2020-12-26 15:43:15 +00:00
|
|
|
|
|
|
|
|
|
|
|
class PerformanceEntry(BaseModel):
|
|
|
|
pair: str
|
|
|
|
profit: float
|
2021-10-31 09:42:42 +00:00
|
|
|
profit_ratio: float
|
|
|
|
profit_pct: float
|
2021-05-15 17:39:46 +00:00
|
|
|
profit_abs: float
|
2020-12-26 15:43:15 +00:00
|
|
|
count: int
|
|
|
|
|
|
|
|
|
|
|
|
class Profit(BaseModel):
|
|
|
|
profit_closed_coin: float
|
|
|
|
profit_closed_percent_mean: float
|
|
|
|
profit_closed_ratio_mean: float
|
|
|
|
profit_closed_percent_sum: float
|
|
|
|
profit_closed_ratio_sum: float
|
2021-07-14 18:55:11 +00:00
|
|
|
profit_closed_percent: float
|
|
|
|
profit_closed_ratio: float
|
2020-12-26 15:43:15 +00:00
|
|
|
profit_closed_fiat: float
|
|
|
|
profit_all_coin: float
|
|
|
|
profit_all_percent_mean: float
|
|
|
|
profit_all_ratio_mean: float
|
|
|
|
profit_all_percent_sum: float
|
|
|
|
profit_all_ratio_sum: float
|
2021-07-14 18:55:11 +00:00
|
|
|
profit_all_percent: float
|
|
|
|
profit_all_ratio: float
|
2020-12-26 15:43:15 +00:00
|
|
|
profit_all_fiat: float
|
|
|
|
trade_count: int
|
|
|
|
closed_trade_count: int
|
|
|
|
first_trade_date: str
|
2023-05-15 16:06:17 +00:00
|
|
|
first_trade_humanized: str
|
2020-12-26 15:43:15 +00:00
|
|
|
first_trade_timestamp: int
|
|
|
|
latest_trade_date: str
|
2023-05-15 16:06:17 +00:00
|
|
|
latest_trade_humanized: str
|
2020-12-26 15:43:15 +00:00
|
|
|
latest_trade_timestamp: int
|
|
|
|
avg_duration: str
|
|
|
|
best_pair: str
|
|
|
|
best_rate: float
|
2021-11-11 11:58:38 +00:00
|
|
|
best_pair_profit_ratio: float
|
2020-12-26 15:43:15 +00:00
|
|
|
winning_trades: int
|
|
|
|
losing_trades: int
|
2022-06-18 09:14:28 +00:00
|
|
|
profit_factor: float
|
2023-07-15 15:27:58 +00:00
|
|
|
winrate: float
|
|
|
|
expectancy: float
|
2023-07-17 13:16:22 +00:00
|
|
|
expectancy_ratio: float
|
2022-06-18 09:14:28 +00:00
|
|
|
max_drawdown: float
|
|
|
|
max_drawdown_abs: float
|
2023-07-18 04:44:33 +00:00
|
|
|
trading_volume: Optional[float] = None
|
2023-04-08 14:40:22 +00:00
|
|
|
bot_start_timestamp: int
|
|
|
|
bot_start_date: str
|
2020-12-26 15:43:15 +00:00
|
|
|
|
|
|
|
|
|
|
|
class SellReason(BaseModel):
|
|
|
|
wins: int
|
|
|
|
losses: int
|
|
|
|
draws: int
|
|
|
|
|
|
|
|
|
|
|
|
class Stats(BaseModel):
|
2022-03-24 19:33:47 +00:00
|
|
|
exit_reasons: Dict[str, SellReason]
|
2022-02-10 06:03:19 +00:00
|
|
|
durations: Dict[str, Optional[float]]
|
2020-12-26 16:00:30 +00:00
|
|
|
|
|
|
|
|
2020-12-26 16:33:27 +00:00
|
|
|
class DailyRecord(BaseModel):
|
|
|
|
date: date
|
|
|
|
abs_profit: float
|
2022-06-11 09:28:45 +00:00
|
|
|
rel_profit: float
|
|
|
|
starting_balance: float
|
2020-12-26 16:33:27 +00:00
|
|
|
fiat_value: float
|
|
|
|
trade_count: int
|
|
|
|
|
|
|
|
|
|
|
|
class Daily(BaseModel):
|
|
|
|
data: List[DailyRecord]
|
|
|
|
fiat_display_currency: str
|
|
|
|
stake_currency: str
|
|
|
|
|
|
|
|
|
2021-11-06 15:12:25 +00:00
|
|
|
class UnfilledTimeout(BaseModel):
|
2023-07-18 04:44:33 +00:00
|
|
|
entry: Optional[int] = None
|
|
|
|
exit: Optional[int] = None
|
|
|
|
unit: Optional[str] = None
|
|
|
|
exit_timeout_count: Optional[int] = None
|
2021-11-06 15:12:25 +00:00
|
|
|
|
|
|
|
|
|
|
|
class OrderTypes(BaseModel):
|
2022-03-07 19:32:16 +00:00
|
|
|
entry: OrderTypeValues
|
|
|
|
exit: OrderTypeValues
|
2023-07-18 04:44:33 +00:00
|
|
|
emergency_exit: Optional[OrderTypeValues] = None
|
|
|
|
force_exit: Optional[OrderTypeValues] = None
|
|
|
|
force_entry: Optional[OrderTypeValues] = None
|
2021-11-24 19:11:04 +00:00
|
|
|
stoploss: OrderTypeValues
|
2021-11-06 15:12:25 +00:00
|
|
|
stoploss_on_exchange: bool
|
2023-07-18 04:44:33 +00:00
|
|
|
stoploss_on_exchange_interval: Optional[int] = None
|
2021-11-06 15:12:25 +00:00
|
|
|
|
|
|
|
|
2021-01-02 14:48:33 +00:00
|
|
|
class ShowConfig(BaseModel):
|
2021-11-06 15:12:25 +00:00
|
|
|
version: str
|
2023-07-18 04:44:33 +00:00
|
|
|
strategy_version: Optional[str] = None
|
2021-11-23 06:06:53 +00:00
|
|
|
api_version: float
|
2021-02-20 18:17:10 +00:00
|
|
|
dry_run: bool
|
2021-11-20 19:09:37 +00:00
|
|
|
trading_mode: str
|
|
|
|
short_allowed: bool
|
2021-01-02 14:48:33 +00:00
|
|
|
stake_currency: str
|
2022-02-15 19:01:35 +00:00
|
|
|
stake_amount: str
|
2023-07-18 04:44:33 +00:00
|
|
|
available_capital: Optional[float] = None
|
2021-06-26 18:46:54 +00:00
|
|
|
stake_currency_decimals: int
|
2023-01-15 10:44:10 +00:00
|
|
|
max_open_trades: IntOrInf
|
2021-01-02 14:48:33 +00:00
|
|
|
minimal_roi: Dict[str, Any]
|
2023-07-18 04:44:33 +00:00
|
|
|
stoploss: Optional[float] = None
|
2023-02-08 06:06:03 +00:00
|
|
|
stoploss_on_exchange: bool
|
2023-07-18 04:44:33 +00:00
|
|
|
trailing_stop: Optional[bool] = None
|
|
|
|
trailing_stop_positive: Optional[float] = None
|
|
|
|
trailing_stop_positive_offset: Optional[float] = None
|
|
|
|
trailing_only_offset_is_reached: Optional[bool] = None
|
|
|
|
unfilledtimeout: Optional[UnfilledTimeout] = None # Empty in webserver mode
|
|
|
|
order_types: Optional[OrderTypes] = None
|
|
|
|
use_custom_stoploss: Optional[bool] = None
|
|
|
|
timeframe: Optional[str] = None
|
2021-01-02 14:48:33 +00:00
|
|
|
timeframe_ms: int
|
|
|
|
timeframe_min: int
|
|
|
|
exchange: str
|
2023-07-18 04:44:33 +00:00
|
|
|
strategy: Optional[str] = None
|
2022-04-08 11:39:41 +00:00
|
|
|
force_entry_enable: bool
|
2022-03-27 16:03:49 +00:00
|
|
|
exit_pricing: Dict[str, Any]
|
|
|
|
entry_pricing: Dict[str, Any]
|
2021-01-16 15:19:49 +00:00
|
|
|
bot_name: str
|
2021-01-02 14:48:33 +00:00
|
|
|
state: str
|
|
|
|
runmode: str
|
2022-01-21 00:35:22 +00:00
|
|
|
position_adjustment_enable: bool
|
2022-01-27 15:57:50 +00:00
|
|
|
max_entry_position_adjustment: int
|
2021-01-02 14:48:33 +00:00
|
|
|
|
|
|
|
|
2022-02-26 15:10:54 +00:00
|
|
|
class OrderSchema(BaseModel):
|
|
|
|
pair: str
|
|
|
|
order_id: str
|
|
|
|
status: str
|
2023-07-18 04:44:33 +00:00
|
|
|
remaining: Optional[float] = None
|
2022-02-26 15:10:54 +00:00
|
|
|
amount: float
|
|
|
|
safe_price: float
|
|
|
|
cost: float
|
2023-07-18 04:44:33 +00:00
|
|
|
filled: Optional[float] = None
|
2022-02-26 15:10:54 +00:00
|
|
|
ft_order_side: str
|
|
|
|
order_type: str
|
|
|
|
is_open: bool
|
2023-07-18 04:44:33 +00:00
|
|
|
order_timestamp: Optional[int] = None
|
|
|
|
order_filled_timestamp: Optional[int] = None
|
|
|
|
ft_fee_base: Optional[float] = None
|
2022-02-26 15:10:54 +00:00
|
|
|
|
|
|
|
|
2021-01-01 18:36:03 +00:00
|
|
|
class TradeSchema(BaseModel):
|
2021-01-01 18:38:28 +00:00
|
|
|
trade_id: int
|
2021-01-01 18:36:03 +00:00
|
|
|
pair: str
|
2022-04-09 14:42:18 +00:00
|
|
|
base_currency: str
|
|
|
|
quote_currency: str
|
2021-01-01 18:36:03 +00:00
|
|
|
is_open: bool
|
2021-11-14 08:51:03 +00:00
|
|
|
is_short: bool
|
2021-01-01 18:36:03 +00:00
|
|
|
exchange: str
|
|
|
|
amount: float
|
|
|
|
amount_requested: float
|
|
|
|
stake_amount: float
|
2023-07-18 04:44:33 +00:00
|
|
|
max_stake_amount: Optional[float] = None
|
2021-01-01 18:36:03 +00:00
|
|
|
strategy: str
|
2023-07-18 04:44:33 +00:00
|
|
|
enter_tag: Optional[str] = None
|
2021-01-01 18:38:28 +00:00
|
|
|
timeframe: int
|
2023-07-18 04:44:33 +00:00
|
|
|
fee_open: Optional[float] = None
|
|
|
|
fee_open_cost: Optional[float] = None
|
|
|
|
fee_open_currency: Optional[str] = None
|
|
|
|
fee_close: Optional[float] = None
|
|
|
|
fee_close_cost: Optional[float] = None
|
|
|
|
fee_close_currency: Optional[str] = None
|
2023-02-28 17:09:52 +00:00
|
|
|
|
2021-01-01 18:36:03 +00:00
|
|
|
open_date: str
|
|
|
|
open_timestamp: int
|
|
|
|
open_rate: float
|
2023-07-18 04:44:33 +00:00
|
|
|
open_rate_requested: Optional[float] = None
|
2021-01-01 18:36:03 +00:00
|
|
|
open_trade_value: float
|
2023-02-28 17:09:52 +00:00
|
|
|
|
2023-07-18 04:44:33 +00:00
|
|
|
close_date: Optional[str] = None
|
|
|
|
close_timestamp: Optional[int] = None
|
|
|
|
close_rate: Optional[float] = None
|
|
|
|
close_rate_requested: Optional[float] = None
|
2023-02-28 17:09:52 +00:00
|
|
|
|
2023-07-18 04:44:33 +00:00
|
|
|
close_profit: Optional[float] = None
|
|
|
|
close_profit_pct: Optional[float] = None
|
|
|
|
close_profit_abs: Optional[float] = None
|
2023-02-28 17:09:52 +00:00
|
|
|
|
2023-07-18 04:44:33 +00:00
|
|
|
profit_ratio: Optional[float] = None
|
|
|
|
profit_pct: Optional[float] = None
|
|
|
|
profit_abs: Optional[float] = None
|
|
|
|
profit_fiat: Optional[float] = None
|
2023-02-28 17:09:52 +00:00
|
|
|
|
2023-02-27 19:31:02 +00:00
|
|
|
realized_profit: float
|
2023-07-18 04:44:33 +00:00
|
|
|
realized_profit_ratio: Optional[float] = None
|
|
|
|
|
|
|
|
exit_reason: Optional[str] = None
|
|
|
|
exit_order_status: Optional[str] = None
|
|
|
|
|
|
|
|
stop_loss_abs: Optional[float] = None
|
|
|
|
stop_loss_ratio: Optional[float] = None
|
|
|
|
stop_loss_pct: Optional[float] = None
|
|
|
|
stoploss_order_id: Optional[str] = None
|
|
|
|
stoploss_last_update: Optional[str] = None
|
|
|
|
stoploss_last_update_timestamp: Optional[int] = None
|
|
|
|
initial_stop_loss_abs: Optional[float] = None
|
|
|
|
initial_stop_loss_ratio: Optional[float] = None
|
|
|
|
initial_stop_loss_pct: Optional[float] = None
|
|
|
|
|
|
|
|
min_rate: Optional[float] = None
|
|
|
|
max_rate: Optional[float] = None
|
2022-02-27 15:54:14 +00:00
|
|
|
orders: List[OrderSchema]
|
2021-01-01 18:36:03 +00:00
|
|
|
|
2023-07-18 04:44:33 +00:00
|
|
|
leverage: Optional[float] = None
|
|
|
|
interest_rate: Optional[float] = None
|
|
|
|
liquidation_price: Optional[float] = None
|
|
|
|
funding_fees: Optional[float] = None
|
|
|
|
trading_mode: Optional[TradingMode] = None
|
2022-02-01 06:08:43 +00:00
|
|
|
|
2023-07-18 04:44:33 +00:00
|
|
|
amount_precision: Optional[float] = None
|
|
|
|
price_precision: Optional[float] = None
|
|
|
|
precision_mode: Optional[int] = None
|
2023-03-25 10:55:47 +00:00
|
|
|
|
2021-01-01 18:36:03 +00:00
|
|
|
|
2021-01-01 18:38:28 +00:00
|
|
|
class OpenTradeSchema(TradeSchema):
|
2023-07-18 04:44:33 +00:00
|
|
|
stoploss_current_dist: Optional[float] = None
|
|
|
|
stoploss_current_dist_pct: Optional[float] = None
|
|
|
|
stoploss_current_dist_ratio: Optional[float] = None
|
|
|
|
stoploss_entry_dist: Optional[float] = None
|
|
|
|
stoploss_entry_dist_ratio: Optional[float] = None
|
2021-01-01 18:38:28 +00:00
|
|
|
current_rate: float
|
2023-02-28 19:31:02 +00:00
|
|
|
total_profit_abs: float
|
2023-07-18 04:44:33 +00:00
|
|
|
total_profit_fiat: Optional[float] = None
|
|
|
|
total_profit_ratio: Optional[float] = None
|
2023-02-28 19:31:02 +00:00
|
|
|
|
2021-01-01 18:38:28 +00:00
|
|
|
|
2021-01-01 18:36:03 +00:00
|
|
|
class TradeResponse(BaseModel):
|
|
|
|
trades: List[TradeSchema]
|
|
|
|
trades_count: int
|
2022-06-18 15:44:15 +00:00
|
|
|
offset: int
|
2021-04-18 14:05:28 +00:00
|
|
|
total_trades: int
|
2021-01-01 18:36:03 +00:00
|
|
|
|
|
|
|
|
2023-07-18 04:52:09 +00:00
|
|
|
ForceEnterResponse = RootModel[Union[TradeSchema, StatusMsg]]
|
2021-01-02 14:11:40 +00:00
|
|
|
|
|
|
|
|
2020-12-26 16:33:27 +00:00
|
|
|
class LockModel(BaseModel):
|
2021-03-01 18:50:39 +00:00
|
|
|
id: int
|
2020-12-26 16:33:27 +00:00
|
|
|
active: bool
|
|
|
|
lock_end_time: str
|
|
|
|
lock_end_timestamp: int
|
|
|
|
lock_time: str
|
|
|
|
lock_timestamp: int
|
|
|
|
pair: str
|
2022-04-24 09:51:33 +00:00
|
|
|
side: str
|
2023-07-18 04:44:33 +00:00
|
|
|
reason: Optional[str] = None
|
2020-12-26 16:33:27 +00:00
|
|
|
|
|
|
|
|
|
|
|
class Locks(BaseModel):
|
|
|
|
lock_count: int
|
|
|
|
locks: List[LockModel]
|
|
|
|
|
|
|
|
|
2021-03-01 18:50:39 +00:00
|
|
|
class DeleteLockRequest(BaseModel):
|
2023-07-18 04:44:33 +00:00
|
|
|
pair: Optional[str] = None
|
|
|
|
lockid: Optional[int] = None
|
2021-03-01 18:50:39 +00:00
|
|
|
|
|
|
|
|
2020-12-26 16:33:27 +00:00
|
|
|
class Logs(BaseModel):
|
|
|
|
log_count: int
|
|
|
|
logs: List[List]
|
|
|
|
|
|
|
|
|
2022-01-26 06:10:38 +00:00
|
|
|
class ForceEnterPayload(BaseModel):
|
2020-12-26 16:00:30 +00:00
|
|
|
pair: str
|
2022-01-26 06:10:38 +00:00
|
|
|
side: SignalDirection = SignalDirection.LONG
|
2023-07-18 04:44:33 +00:00
|
|
|
price: Optional[float] = None
|
|
|
|
ordertype: Optional[OrderTypeValues] = None
|
|
|
|
stakeamount: Optional[float] = None
|
|
|
|
entry_tag: Optional[str] = None
|
|
|
|
leverage: Optional[float] = None
|
2020-12-26 16:00:30 +00:00
|
|
|
|
|
|
|
|
2022-04-06 01:35:43 +00:00
|
|
|
class ForceExitPayload(BaseModel):
|
2020-12-26 16:00:30 +00:00
|
|
|
tradeid: str
|
2023-07-18 04:44:33 +00:00
|
|
|
ordertype: Optional[OrderTypeValues] = None
|
|
|
|
amount: Optional[float] = None
|
2020-12-26 16:33:27 +00:00
|
|
|
|
|
|
|
|
|
|
|
class BlacklistPayload(BaseModel):
|
|
|
|
blacklist: List[str]
|
|
|
|
|
|
|
|
|
|
|
|
class BlacklistResponse(BaseModel):
|
|
|
|
blacklist: List[str]
|
|
|
|
blacklist_expanded: List[str]
|
|
|
|
errors: Dict
|
|
|
|
length: int
|
|
|
|
method: List[str]
|
|
|
|
|
|
|
|
|
|
|
|
class WhitelistResponse(BaseModel):
|
|
|
|
whitelist: List[str]
|
|
|
|
length: int
|
|
|
|
method: List[str]
|
|
|
|
|
|
|
|
|
2023-05-31 05:00:20 +00:00
|
|
|
class WhitelistEvaluateResponse(BackgroundTaskResult):
|
2023-07-18 04:44:33 +00:00
|
|
|
result: Optional[WhitelistResponse] = None
|
2023-05-24 19:01:39 +00:00
|
|
|
|
|
|
|
|
2020-12-26 16:33:27 +00:00
|
|
|
class DeleteTrade(BaseModel):
|
|
|
|
cancel_order_count: int
|
|
|
|
result: str
|
|
|
|
result_msg: str
|
|
|
|
trade_id: int
|
2020-12-26 19:05:27 +00:00
|
|
|
|
|
|
|
|
2021-01-02 14:11:40 +00:00
|
|
|
class PlotConfig_(BaseModel):
|
2020-12-31 10:01:50 +00:00
|
|
|
main_plot: Dict[str, Any]
|
2021-05-14 04:36:18 +00:00
|
|
|
subplots: Dict[str, Any]
|
2020-12-26 19:05:27 +00:00
|
|
|
|
|
|
|
|
2023-07-18 04:52:09 +00:00
|
|
|
PlotConfig = RootModel[Union[PlotConfig_, Dict]]
|
2021-01-02 14:11:40 +00:00
|
|
|
|
|
|
|
|
2020-12-26 19:05:27 +00:00
|
|
|
class StrategyListResponse(BaseModel):
|
|
|
|
strategies: List[str]
|
|
|
|
|
|
|
|
|
2023-06-03 07:20:01 +00:00
|
|
|
class ExchangeListResponse(BaseModel):
|
|
|
|
exchanges: List[ValidExchangesType]
|
|
|
|
|
|
|
|
|
2023-04-19 16:35:52 +00:00
|
|
|
class PairListResponse(BaseModel):
|
2023-04-20 16:15:31 +00:00
|
|
|
name: str
|
2023-05-28 16:21:23 +00:00
|
|
|
description: str
|
2023-04-20 16:15:31 +00:00
|
|
|
is_pairlist_generator: bool
|
|
|
|
params: Dict[str, Any]
|
|
|
|
|
|
|
|
|
|
|
|
class PairListsResponse(BaseModel):
|
|
|
|
pairlists: List[PairListResponse]
|
2023-04-19 16:35:52 +00:00
|
|
|
|
|
|
|
|
2023-06-03 04:57:25 +00:00
|
|
|
class PairListsPayload(ExchangeModePayloadMixin, BaseModel):
|
2023-04-27 18:35:24 +00:00
|
|
|
pairlists: List[Dict[str, Any]]
|
|
|
|
blacklist: List[str]
|
|
|
|
stake_currency: str
|
|
|
|
|
|
|
|
|
2022-12-20 06:21:52 +00:00
|
|
|
class FreqAIModelListResponse(BaseModel):
|
|
|
|
freqaimodels: List[str]
|
|
|
|
|
|
|
|
|
2020-12-26 19:05:27 +00:00
|
|
|
class StrategyResponse(BaseModel):
|
|
|
|
strategy: str
|
|
|
|
code: str
|
|
|
|
|
|
|
|
|
|
|
|
class AvailablePairs(BaseModel):
|
|
|
|
length: int
|
|
|
|
pairs: List[str]
|
|
|
|
pair_interval: List[List[str]]
|
2020-12-27 08:02:35 +00:00
|
|
|
|
|
|
|
|
|
|
|
class PairHistory(BaseModel):
|
|
|
|
strategy: str
|
|
|
|
pair: str
|
|
|
|
timeframe: str
|
|
|
|
timeframe_ms: int
|
|
|
|
columns: List[str]
|
2023-07-31 16:04:25 +00:00
|
|
|
data: SerializeAsAny[List[Any]]
|
2020-12-27 08:02:35 +00:00
|
|
|
length: int
|
|
|
|
buy_signals: int
|
|
|
|
sell_signals: int
|
2021-11-20 19:09:37 +00:00
|
|
|
enter_long_signals: int
|
|
|
|
exit_long_signals: int
|
|
|
|
enter_short_signals: int
|
|
|
|
exit_short_signals: int
|
2020-12-27 08:02:35 +00:00
|
|
|
last_analyzed: datetime
|
|
|
|
last_analyzed_ts: int
|
|
|
|
data_start_ts: int
|
|
|
|
data_start: str
|
|
|
|
data_stop: str
|
|
|
|
data_stop_ts: int
|
2023-07-18 16:23:58 +00:00
|
|
|
# TODO[pydantic]: The following keys were removed: `json_encoders`.
|
|
|
|
# Check https://docs.pydantic.dev/dev-v2/migration/#changes-to-config for more information.
|
|
|
|
model_config = ConfigDict(json_encoders={
|
|
|
|
datetime: lambda v: v.strftime(DATETIME_PRINT_FORMAT),
|
|
|
|
})
|
2021-01-02 14:13:32 +00:00
|
|
|
|
|
|
|
|
2022-12-20 18:44:01 +00:00
|
|
|
class BacktestFreqAIInputs(BaseModel):
|
|
|
|
identifier: str
|
|
|
|
|
|
|
|
|
2021-01-02 14:13:32 +00:00
|
|
|
class BacktestRequest(BaseModel):
|
|
|
|
strategy: str
|
2023-07-18 04:44:33 +00:00
|
|
|
timeframe: Optional[str] = None
|
|
|
|
timeframe_detail: Optional[str] = None
|
|
|
|
timerange: Optional[str] = None
|
|
|
|
max_open_trades: Optional[IntOrInf] = None
|
2023-07-18 16:19:42 +00:00
|
|
|
stake_amount: Optional[Union[str, float]] = None
|
2021-01-06 14:05:54 +00:00
|
|
|
enable_protections: bool
|
2023-07-18 04:44:33 +00:00
|
|
|
dry_run_wallet: Optional[float] = None
|
|
|
|
backtest_cache: Optional[str] = None
|
|
|
|
freqaimodel: Optional[str] = None
|
|
|
|
freqai: Optional[BacktestFreqAIInputs] = None
|
2021-01-02 14:13:32 +00:00
|
|
|
|
|
|
|
|
|
|
|
class BacktestResponse(BaseModel):
|
|
|
|
status: str
|
|
|
|
running: bool
|
|
|
|
status_msg: str
|
2021-03-11 18:16:18 +00:00
|
|
|
step: str
|
|
|
|
progress: float
|
2023-07-18 04:44:33 +00:00
|
|
|
trade_count: Optional[float] = None
|
2021-01-02 14:13:32 +00:00
|
|
|
# TODO: Properly type backtestresult...
|
2023-08-07 18:11:30 +00:00
|
|
|
backtest_result: Optional[Dict[str, Any]] = None
|
2021-10-04 23:10:39 +00:00
|
|
|
|
2021-10-06 17:36:28 +00:00
|
|
|
|
2023-07-31 18:26:21 +00:00
|
|
|
# TODO: This is a copy of BacktestHistoryEntryType
|
2022-04-11 17:44:47 +00:00
|
|
|
class BacktestHistoryEntry(BaseModel):
|
|
|
|
filename: str
|
|
|
|
strategy: str
|
|
|
|
run_id: str
|
|
|
|
backtest_start_time: int
|
2023-07-31 19:15:33 +00:00
|
|
|
notes: Optional[str] = ''
|
2022-04-11 17:44:47 +00:00
|
|
|
|
|
|
|
|
2023-07-31 19:16:25 +00:00
|
|
|
class BacktestMetadataUpdate(BaseModel):
|
|
|
|
strategy: str
|
2023-08-03 04:28:28 +00:00
|
|
|
notes: str = ''
|
2022-04-11 17:44:47 +00:00
|
|
|
|
|
|
|
|
2021-10-04 23:10:39 +00:00
|
|
|
class SysInfo(BaseModel):
|
2021-10-07 11:04:42 +00:00
|
|
|
cpu_pct: List[float]
|
2021-10-04 23:10:39 +00:00
|
|
|
ram_pct: float
|
2022-01-23 19:58:46 +00:00
|
|
|
|
|
|
|
|
|
|
|
class Health(BaseModel):
|
2023-07-18 04:44:33 +00:00
|
|
|
last_process: Optional[datetime] = None
|
|
|
|
last_process_ts: Optional[int] = None
|