From 1226593f3b8fa7f5e56ba1d3103cb011cd49c160 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 28 Jul 2024 15:30:15 +0200 Subject: [PATCH] chore: Add initial version of json schema --- build_helpers/schema.json | 1601 +++++++++++++++++++++++++++++++++++++ 1 file changed, 1601 insertions(+) create mode 100644 build_helpers/schema.json diff --git a/build_helpers/schema.json b/build_helpers/schema.json new file mode 100644 index 000000000..c0933d9f8 --- /dev/null +++ b/build_helpers/schema.json @@ -0,0 +1,1601 @@ +{ + "type": "object", + "properties": { + "max_open_trades": { + "description": "Maximum number of open trades. -1 for unlimited.", + "type": [ + "integer", + "number" + ], + "minimum": -1 + }, + "new_pairs_days": { + "description": "Download data of new pairs for given number of days", + "type": "integer", + "default": 30 + }, + "timeframe": { + "description": "The timeframe to use (e.g `1m`, `5m`, `15m`, `30m`, `1h` ...). \nUsually specified in the strategy and missing in the configuration.", + "type": "string" + }, + "stake_currency": { + "description": "Currency used for staking.", + "type": "string" + }, + "stake_amount": { + "description": "Amount to stake per trade.", + "type": [ + "number", + "string" + ], + "minimum": 0.0001, + "pattern": "unlimited" + }, + "tradable_balance_ratio": { + "description": "Ratio of balance that is tradable.", + "type": "number", + "minimum": 0.0, + "maximum": 1, + "default": 0.99 + }, + "available_capital": { + "description": "Total capital available for trading.", + "type": "number", + "minimum": 0 + }, + "amend_last_stake_amount": { + "description": "Whether to amend the last stake amount.", + "type": "boolean", + "default": false + }, + "last_stake_amount_min_ratio": { + "description": "Minimum ratio for the last stake amount.", + "type": "number", + "minimum": 0.0, + "maximum": 1.0, + "default": 0.5 + }, + "fiat_display_currency": { + "description": "Fiat currency for display purposes.", + "type": "string", + "enum": [ + "AUD", + "BRL", + "CAD", + "CHF", + "CLP", + "CNY", + "CZK", + "DKK", + "EUR", + "GBP", + "HKD", + "HUF", + "IDR", + "ILS", + "INR", + "JPY", + "KRW", + "MXN", + "MYR", + "NOK", + "NZD", + "PHP", + "PKR", + "PLN", + "RUB", + "UAH", + "SEK", + "SGD", + "THB", + "TRY", + "TWD", + "ZAR", + "USD", + "BTC", + "ETH", + "XRP", + "LTC", + "BCH", + "BNB", + "" + ] + }, + "dry_run": { + "description": "Enable or disable dry run mode.", + "type": "boolean" + }, + "dry_run_wallet": { + "description": "Initial wallet balance for dry run mode.", + "type": "number", + "default": 1000 + }, + "cancel_open_orders_on_exit": { + "description": "Cancel open orders when exiting.", + "type": "boolean", + "default": false + }, + "process_only_new_candles": { + "description": "Process only new candles.", + "type": "boolean" + }, + "minimal_roi": { + "description": "Minimum return on investment. \nUsually specified in the strategy and missing in the configuration.", + "type": "object", + "patternProperties": { + "^[0-9.]+$": { + "type": "number" + } + } + }, + "amount_reserve_percent": { + "description": "Percentage of amount to reserve.", + "type": "number", + "minimum": 0.0, + "maximum": 0.5 + }, + "stoploss": { + "description": "Value (as ratio) to use as Stoploss value. \nUsually specified in the strategy and missing in the configuration.", + "type": "number", + "maximum": 0, + "exclusiveMaximum": true + }, + "trailing_stop": { + "description": "Enable or disable trailing stop. \nUsually specified in the strategy and missing in the configuration.", + "type": "boolean" + }, + "trailing_stop_positive": { + "description": "Positive offset for trailing stop. \nUsually specified in the strategy and missing in the configuration.", + "type": "number", + "minimum": 0, + "maximum": 1 + }, + "trailing_stop_positive_offset": { + "description": "Offset for trailing stop to activate. \nUsually specified in the strategy and missing in the configuration.", + "type": "number", + "minimum": 0, + "maximum": 1 + }, + "trailing_only_offset_is_reached": { + "description": "Use trailing stop only when offset is reached. \nUsually specified in the strategy and missing in the configuration.", + "type": "boolean" + }, + "use_exit_signal": { + "description": "Use exit signal for trades. \nUsually specified in the strategy and missing in the configuration.", + "type": "boolean" + }, + "exit_profit_only": { + "description": "Exit only when in profit. Exit signals are ignored as long as profit is < exit_profit_offset. \nUsually specified in the strategy and missing in the configuration.", + "type": "boolean" + }, + "exit_profit_offset": { + "description": "Offset for profit exit. \nUsually specified in the strategy and missing in the configuration.", + "type": "number" + }, + "fee": { + "description": "Trading fee percentage. Can help to simulate slippage in backtesting", + "type": "number", + "minimum": 0, + "maximum": 0.1 + }, + "ignore_roi_if_entry_signal": { + "description": "Ignore ROI if entry signal is present. \nUsually specified in the strategy and missing in the configuration.", + "type": "boolean" + }, + "ignore_buying_expired_candle_after": { + "description": "Ignore buying after candle expiration time. \nUsually specified in the strategy and missing in the configuration.", + "type": "number" + }, + "trading_mode": { + "description": "Mode of trading (e.g., spot, margin).", + "type": "string", + "enum": [ + "spot", + "margin", + "futures" + ] + }, + "margin_mode": { + "description": "Margin mode for trading.", + "type": "string", + "enum": [ + "cross", + "isolated", + "" + ] + }, + "reduce_df_footprint": { + "description": "Reduce DataFrame footprint by casting columns to float32/int32.", + "type": "boolean", + "default": false + }, + "minimum_trade_amount": { + "description": "Minimum amount for a trade - only used for lookahead-analysis", + "type": "number", + "default": 10 + }, + "targeted_trade_amount": { + "description": "Targeted trade amount for lookahead analysis.", + "type": "number", + "default": 20 + }, + "lookahead_analysis_exportfilename": { + "description": "csv Filename for lookahead analysis export.", + "type": "string" + }, + "startup_candle": { + "description": "Startup candle configuration.", + "type": "array", + "uniqueItems": true, + "default": [ + 199, + 399, + 499, + 999, + 1999 + ] + }, + "liquidation_buffer": { + "description": "Buffer ratio for liquidation.", + "type": "number", + "minimum": 0.0, + "maximum": 0.99 + }, + "backtest_breakdown": { + "description": "Breakdown configuration for backtesting.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "day", + "week", + "month" + ] + } + }, + "bot_name": { + "description": "Name of the trading bot. Passed via API to a client.", + "type": "string" + }, + "unfilledtimeout": { + "description": "Timeout configuration for unfilled orders. \nUsually specified in the strategy and missing in the configuration.", + "type": "object", + "properties": { + "entry": { + "description": "Timeout for entry orders in unit.", + "type": "number", + "minimum": 1 + }, + "exit": { + "description": "Timeout for exit orders in unit.", + "type": "number", + "minimum": 1 + }, + "exit_timeout_count": { + "description": "Number of times to retry exit orders before giving up.", + "type": "number", + "minimum": 0, + "default": 0 + }, + "unit": { + "description": "Unit of time for the timeout (e.g., seconds, minutes).", + "type": "string", + "enum": [ + "minutes", + "seconds" + ], + "default": "minutes" + } + } + }, + "entry_pricing": { + "description": "Configuration for entry pricing.", + "type": "object", + "properties": { + "price_last_balance": { + "description": "Balance ratio for the last price.", + "type": "number", + "minimum": 0, + "maximum": 1, + "exclusiveMaximum": false + }, + "price_side": { + "description": "Side of the price to use (e.g., bid, ask, same).", + "type": "string", + "enum": [ + "ask", + "bid", + "same", + "other" + ], + "default": "same" + }, + "use_order_book": { + "description": "Whether to use the order book for pricing.", + "type": "boolean" + }, + "order_book_top": { + "description": "Top N levels of the order book to consider.", + "type": "integer", + "minimum": 1, + "maximum": 50 + }, + "check_depth_of_market": { + "description": "Configuration for checking the depth of the market.", + "type": "object", + "properties": { + "enabled": { + "description": "Enable or disable depth of market check.", + "type": "boolean" + }, + "bids_to_ask_delta": { + "description": "Delta between bids and asks to consider.", + "type": "number", + "minimum": 0 + } + } + } + }, + "required": [ + "price_side" + ] + }, + "exit_pricing": { + "description": "Configuration for exit pricing.", + "type": "object", + "properties": { + "price_side": { + "description": "Side of the price to use (e.g., bid, ask, same).", + "type": "string", + "enum": [ + "ask", + "bid", + "same", + "other" + ], + "default": "same" + }, + "price_last_balance": { + "description": "Balance ratio for the last price.", + "type": "number", + "minimum": 0, + "maximum": 1, + "exclusiveMaximum": false + }, + "use_order_book": { + "description": "Whether to use the order book for pricing.", + "type": "boolean" + }, + "order_book_top": { + "description": "Top N levels of the order book to consider.", + "type": "integer", + "minimum": 1, + "maximum": 50 + } + }, + "required": [ + "price_side" + ] + }, + "custom_price_max_distance_ratio": { + "description": "Maximum distance ratio between current and custom entry or exit price.", + "type": "number", + "minimum": 0.0, + "maximum": 1, + "default": 0.02 + }, + "order_types": { + "description": "Configuration of order types. \nUsually specified in the strategy and missing in the configuration.", + "type": "object", + "properties": { + "entry": { + "description": "Order type for entry (e.g., limit, market).", + "type": "string", + "enum": [ + "limit", + "market" + ] + }, + "exit": { + "description": "Order type for exit (e.g., limit, market).", + "type": "string", + "enum": [ + "limit", + "market" + ] + }, + "force_exit": { + "description": "Order type for forced exit (e.g., limit, market).", + "type": "string", + "enum": [ + "limit", + "market" + ] + }, + "force_entry": { + "description": "Order type for forced entry (e.g., limit, market).", + "type": "string", + "enum": [ + "limit", + "market" + ] + }, + "emergency_exit": { + "description": "Order type for emergency exit (e.g., limit, market).", + "type": "string", + "enum": [ + "limit", + "market" + ], + "default": "market" + }, + "stoploss": { + "description": "Order type for stop loss (e.g., limit, market).", + "type": "string", + "enum": [ + "limit", + "market" + ] + }, + "stoploss_on_exchange": { + "description": "Whether to place stop loss on the exchange.", + "type": "boolean" + }, + "stoploss_price_type": { + "description": "Price type for stop loss (e.g., last, mark, index).", + "type": "string", + "enum": [ + "last", + "mark", + "index" + ] + }, + "stoploss_on_exchange_interval": { + "description": "Interval for stop loss on exchange in seconds.", + "type": "number" + }, + "stoploss_on_exchange_limit_ratio": { + "description": "Limit ratio for stop loss on exchange.", + "type": "number", + "minimum": 0.0, + "maximum": 1.0 + } + }, + "required": [ + "entry", + "exit", + "stoploss", + "stoploss_on_exchange" + ] + }, + "order_time_in_force": { + "description": "Time in force configuration for orders. \nUsually specified in the strategy and missing in the configuration.", + "type": "object", + "properties": { + "entry": { + "description": "Time in force for entry orders.", + "type": "string", + "enum": [ + "GTC", + "FOK", + "IOC", + "PO", + "gtc", + "fok", + "ioc", + "po" + ] + }, + "exit": { + "description": "Time in force for exit orders.", + "type": "string", + "enum": [ + "GTC", + "FOK", + "IOC", + "PO", + "gtc", + "fok", + "ioc", + "po" + ] + } + }, + "required": [ + "entry", + "exit" + ] + }, + "coingecko": { + "description": "Configuration for CoinGecko API.", + "type": "object", + "properties": { + "is_demo": { + "description": "Whether to use CoinGecko in demo mode.", + "type": "boolean", + "default": true + }, + "api_key": { + "description": "API key for accessing CoinGecko.", + "type": "string" + } + }, + "required": [ + "is_demo", + "api_key" + ] + }, + "exchange": { + "description": "Exchange configuration.", + "$ref": "#/definitions/exchange" + }, + "edge": { + "description": "Edge configuration.", + "$ref": "#/definitions/edge" + }, + "freqai": { + "description": "FreqAI configuration.", + "$ref": "#/definitions/freqai" + }, + "external_message_consumer": { + "description": "Configuration for external message consumer.", + "$ref": "#/definitions/external_message_consumer" + }, + "experimental": { + "description": "Experimental configuration.", + "type": "object", + "properties": { + "block_bad_exchanges": { + "type": "boolean" + } + } + }, + "pairlists": { + "description": "Configuration for pairlists.", + "type": "array", + "items": { + "type": "object", + "properties": { + "method": { + "description": "Method used for generating the pairlist.", + "type": "string", + "enum": [ + "StaticPairList", + "VolumePairList", + "ProducerPairList", + "RemotePairList", + "MarketCapPairList", + "AgeFilter", + "FullTradesFilter", + "OffsetFilter", + "PerformanceFilter", + "PrecisionFilter", + "PriceFilter", + "RangeStabilityFilter", + "ShuffleFilter", + "SpreadFilter", + "VolatilityFilter" + ] + } + }, + "required": [ + "method" + ] + } + }, + "protections": { + "description": "Configuration for various protections.", + "type": "array", + "items": { + "type": "object", + "properties": { + "method": { + "description": "Method used for the protection.", + "type": "string", + "enum": [ + "CooldownPeriod", + "LowProfitPairs", + "MaxDrawdown", + "StoplossGuard" + ] + }, + "stop_duration": { + "description": "Duration to lock the pair after a protection is triggered, in minutes.", + "type": "number", + "minimum": 0.0 + }, + "stop_duration_candles": { + "description": "Duration to lock the pair after a protection is triggered, in number of candles.", + "type": "number", + "minimum": 0 + }, + "trade_limit": { + "description": "Minimum number of trades required during lookback period.", + "type": "number", + "minimum": 1 + }, + "lookback_period": { + "description": "Period to look back for protection checks, in minutes.", + "type": "number", + "minimum": 1 + }, + "lookback_period_candles": { + "description": "Period to look back for protection checks, in number of candles.", + "type": "number", + "minimum": 1 + } + }, + "required": [ + "method" + ] + } + }, + "telegram": { + "description": "Telegram settings.", + "type": "object", + "properties": { + "enabled": { + "description": "Enable Telegram notifications.", + "type": "boolean" + }, + "token": { + "description": "Telegram bot token.", + "type": "string" + }, + "chat_id": { + "description": "Telegram chat ID", + "type": "string" + }, + "allow_custom_messages": { + "description": "Allow sending custom messages from the Strategy.", + "type": "boolean", + "default": true + }, + "balance_dust_level": { + "description": "Minimum balance level to consider as dust.", + "type": "number", + "minimum": 0.0 + }, + "notification_settings": { + "description": "Settings for different types of notifications.", + "type": "object", + "default": {}, + "properties": { + "status": { + "description": "Telegram setting for status updates.", + "type": "string", + "enum": [ + "on", + "off", + "silent" + ] + }, + "warning": { + "description": "Telegram setting for warnings.", + "type": "string", + "enum": [ + "on", + "off", + "silent" + ] + }, + "startup": { + "description": "Telegram setting for startup messages.", + "type": "string", + "enum": [ + "on", + "off", + "silent" + ] + }, + "entry": { + "description": "Telegram setting for entry signals.", + "type": "string", + "enum": [ + "on", + "off", + "silent" + ] + }, + "entry_fill": { + "description": "Telegram setting for entry fill signals.", + "type": "string", + "enum": [ + "on", + "off", + "silent" + ], + "default": "off" + }, + "entry_cancel": { + "description": "Telegram setting for entry cancel signals.", + "type": "string", + "enum": [ + "on", + "off", + "silent" + ] + }, + "exit": { + "description": "Telegram setting for exit signals.", + "type": [ + "string", + "object" + ], + "additionalProperties": { + "type": "string", + "enum": [ + "on", + "off", + "silent" + ] + } + }, + "exit_fill": { + "description": "Telegram setting for exit fill signals.", + "type": "string", + "enum": [ + "on", + "off", + "silent" + ], + "default": "on" + }, + "exit_cancel": { + "description": "Telegram setting for exit cancel signals.", + "type": "string", + "enum": [ + "on", + "off", + "silent" + ] + }, + "protection_trigger": { + "description": "Telegram setting for protection triggers.", + "type": "string", + "enum": [ + "on", + "off", + "silent" + ], + "default": "on" + }, + "protection_trigger_global": { + "description": "Telegram setting for global protection triggers.", + "type": "string", + "enum": [ + "on", + "off", + "silent" + ], + "default": "on" + } + } + }, + "reload": { + "description": "Add Reload button to certain messages.", + "type": "boolean" + } + }, + "required": [ + "enabled", + "token", + "chat_id" + ] + }, + "webhook": { + "description": "Webhook settings.", + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "url": { + "type": "string" + }, + "format": { + "type": "string", + "enum": [ + "form", + "json", + "raw" + ], + "default": "form" + }, + "retries": { + "type": "integer", + "minimum": 0 + }, + "retry_delay": { + "type": "number", + "minimum": 0 + }, + "status": { + "type": "object" + }, + "warning": { + "type": "object" + }, + "exception": { + "type": "object" + }, + "startup": { + "type": "object" + }, + "entry": { + "type": "object" + }, + "entry_fill": { + "type": "object" + }, + "entry_cancel": { + "type": "object" + }, + "exit": { + "type": "object" + }, + "exit_fill": { + "type": "object" + }, + "exit_cancel": { + "type": "object" + }, + "protection_trigger": { + "type": "object" + }, + "protection_trigger_global": { + "type": "object" + }, + "strategy_msg": { + "type": "object" + }, + "whitelist": { + "type": "object" + }, + "analyzed_df": { + "type": "object" + }, + "new_candle": { + "type": "object" + } + } + }, + "discord": { + "description": "Discord settings.", + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "webhook_url": { + "type": "string" + }, + "exit_fill": { + "type": "array", + "items": { + "type": "object" + }, + "default": [ + { + "Trade ID": "{trade_id}" + }, + { + "Exchange": "{exchange}" + }, + { + "Pair": "{pair}" + }, + { + "Direction": "{direction}" + }, + { + "Open rate": "{open_rate}" + }, + { + "Close rate": "{close_rate}" + }, + { + "Amount": "{amount}" + }, + { + "Open date": "{open_date:%Y-%m-%d %H:%M:%S}" + }, + { + "Close date": "{close_date:%Y-%m-%d %H:%M:%S}" + }, + { + "Profit": "{profit_amount} {stake_currency}" + }, + { + "Profitability": "{profit_ratio:.2%}" + }, + { + "Enter tag": "{enter_tag}" + }, + { + "Exit Reason": "{exit_reason}" + }, + { + "Strategy": "{strategy}" + }, + { + "Timeframe": "{timeframe}" + } + ] + }, + "entry_fill": { + "type": "array", + "items": { + "type": "object" + }, + "default": [ + { + "Trade ID": "{trade_id}" + }, + { + "Exchange": "{exchange}" + }, + { + "Pair": "{pair}" + }, + { + "Direction": "{direction}" + }, + { + "Open rate": "{open_rate}" + }, + { + "Amount": "{amount}" + }, + { + "Open date": "{open_date:%Y-%m-%d %H:%M:%S}" + }, + { + "Enter tag": "{enter_tag}" + }, + { + "Strategy": "{strategy} {timeframe}" + } + ] + } + } + }, + "api_server": { + "description": "API server settings.", + "type": "object", + "properties": { + "enabled": { + "description": "Whether the API server is enabled.", + "type": "boolean" + }, + "listen_ip_address": { + "description": "IP address the API server listens on.", + "format": "ipv4" + }, + "listen_port": { + "description": "Port the API server listens on.", + "type": "integer", + "minimum": 1024, + "maximum": 65535 + }, + "username": { + "description": "Username for API server authentication.", + "type": "string" + }, + "password": { + "description": "Password for API server authentication.", + "type": "string" + }, + "ws_token": { + "description": "WebSocket token for API server.", + "type": [ + "string", + "array" + ], + "items": { + "type": "string" + } + }, + "jwt_secret_key": { + "description": "Secret key for JWT authentication.", + "type": "string" + }, + "CORS_origins": { + "description": "List of allowed CORS origins.", + "type": "array", + "items": { + "type": "string" + } + }, + "x": { + "description": "Logging verbosity level.", + "type": "string", + "enum": [ + "error", + "info" + ] + } + }, + "required": [ + "enabled", + "listen_ip_address", + "listen_port", + "username", + "password" + ] + }, + "db_url": { + "description": "Database connection URL.", + "type": "string" + }, + "export": { + "description": "Type of data to export.", + "type": "string", + "enum": [ + "none", + "trades", + "signals" + ], + "default": "trades" + }, + "disableparamexport": { + "description": "Disable parameter export.", + "type": "boolean" + }, + "initial_state": { + "description": "Initial state of the system.", + "type": "string", + "enum": [ + "running", + "stopped" + ] + }, + "force_entry_enable": { + "description": "Force enable entry.", + "type": "boolean" + }, + "disable_dataframe_checks": { + "description": "Disable checks on dataframes.", + "type": "boolean" + }, + "internals": { + "description": "Internal settings.", + "type": "object", + "default": {}, + "properties": { + "process_throttle_secs": { + "description": "Throttle time in seconds for processing.", + "type": "integer" + }, + "interval": { + "description": "Interval time in seconds.", + "type": "integer" + }, + "sd_notify": { + "description": "Enable systemd notify.", + "type": "boolean" + } + } + }, + "dataformat_ohlcv": { + "description": "Data format for OHLCV data.", + "type": "string", + "enum": [ + "json", + "jsongz", + "hdf5", + "feather", + "parquet" + ], + "default": "feather" + }, + "dataformat_trades": { + "description": "Data format for trade data.", + "type": "string", + "enum": [ + "json", + "jsongz", + "hdf5", + "feather", + "parquet" + ], + "default": "feather" + }, + "position_adjustment_enable": { + "description": "Enable position adjustment. \nUsually specified in the strategy and missing in the configuration.", + "type": "boolean" + }, + "max_entry_position_adjustment": { + "description": "Maximum entry position adjustment allowed. \nUsually specified in the strategy and missing in the configuration.", + "type": [ + "integer", + "number" + ], + "minimum": -1 + }, + "orderflow": { + "description": "Settings related to order flow.", + "type": "object", + "properties": { + "cache_size": { + "description": "Size of the cache for order flow data.", + "type": "number", + "minimum": 1, + "default": 1500 + }, + "max_candles": { + "description": "Maximum number of candles to consider.", + "type": "number", + "minimum": 1, + "default": 1500 + }, + "scale": { + "description": "Scale factor for order flow data.", + "type": "number", + "minimum": 0.0 + }, + "stacked_imbalance_range": { + "description": "Range for stacked imbalance.", + "type": "number", + "minimum": 0 + }, + "imbalance_volume": { + "description": "Volume threshold for imbalance.", + "type": "number", + "minimum": 0 + }, + "imbalance_ratio": { + "description": "Ratio threshold for imbalance.", + "type": "number", + "minimum": 0.0 + } + }, + "required": [ + "max_candles", + "scale", + "stacked_imbalance_range", + "imbalance_volume", + "imbalance_ratio" + ] + } + }, + "definitions": { + "exchange": { + "description": "Exchange configuration settings.", + "type": "object", + "properties": { + "name": { + "description": "Name of the exchange.", + "type": "string" + }, + "enable_ws": { + "description": "Enable WebSocket connections to the exchange.", + "type": "boolean", + "default": true + }, + "key": { + "description": "API key for the exchange.", + "type": "string", + "default": "" + }, + "secret": { + "description": "API secret for the exchange.", + "type": "string", + "default": "" + }, + "password": { + "description": "Password for the exchange, if required.", + "type": "string", + "default": "" + }, + "uid": { + "description": "User ID for the exchange, if required.", + "type": "string" + }, + "pair_whitelist": { + "description": "List of whitelisted trading pairs.", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "pair_blacklist": { + "description": "List of blacklisted trading pairs.", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "unknown_fee_rate": { + "description": "Fee rate for unknown markets.", + "type": "number" + }, + "outdated_offset": { + "description": "Offset for outdated data in minutes.", + "type": "integer", + "minimum": 1 + }, + "markets_refresh_interval": { + "description": "Interval for refreshing market data in minutes.", + "type": "integer", + "default": 60 + }, + "ccxt_config": { + "description": "CCXT configuration settings.", + "type": "object" + }, + "ccxt_async_config": { + "description": "CCXT asynchronous configuration settings.", + "type": "object" + } + }, + "required": [ + "name" + ] + }, + "edge": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "process_throttle_secs": { + "type": "integer", + "minimum": 600 + }, + "calculate_since_number_of_days": { + "type": "integer" + }, + "allowed_risk": { + "type": "number" + }, + "stoploss_range_min": { + "type": "number" + }, + "stoploss_range_max": { + "type": "number" + }, + "stoploss_range_step": { + "type": "number" + }, + "minimum_winrate": { + "type": "number" + }, + "minimum_expectancy": { + "type": "number" + }, + "min_trade_number": { + "type": "number" + }, + "max_trade_duration_minute": { + "type": "integer" + }, + "remove_pumps": { + "type": "boolean" + } + }, + "required": [ + "process_throttle_secs", + "allowed_risk" + ] + }, + "external_message_consumer": { + "description": "Configuration for external message consumer.", + "type": "object", + "properties": { + "enabled": { + "description": "Whether the external message consumer is enabled.", + "type": "boolean", + "default": false + }, + "producers": { + "description": "List of producers for the external message consumer.", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "description": "Name of the producer.", + "type": "string" + }, + "host": { + "description": "Host of the producer.", + "type": "string" + }, + "port": { + "description": "Port of the producer.", + "type": "integer", + "default": 8080, + "minimum": 0, + "maximum": 65535 + }, + "secure": { + "description": "Whether to use SSL to connect to the producer.", + "type": "boolean", + "default": false + }, + "ws_token": { + "description": "WebSocket token for the producer.", + "type": "string" + } + }, + "required": [ + "name", + "host", + "ws_token" + ] + } + }, + "wait_timeout": { + "description": "Wait timeout in seconds.", + "type": "integer", + "minimum": 0 + }, + "sleep_time": { + "description": "Sleep time in seconds before retrying to connect.", + "type": "integer", + "minimum": 0 + }, + "ping_timeout": { + "description": "Ping timeout in seconds.", + "type": "integer", + "minimum": 0 + }, + "remove_entry_exit_signals": { + "description": "Remove signal columns from the dataframe (set them to 0)", + "type": "boolean", + "default": false + }, + "initial_candle_limit": { + "description": "Initial candle limit.", + "type": "integer", + "minimum": 0, + "maximum": 1500, + "default": 1500 + }, + "message_size_limit": { + "description": "Message size limit in megabytes.", + "type": "integer", + "minimum": 1, + "maximum": 20, + "default": 8 + } + }, + "required": [ + "producers" + ] + }, + "freqai": { + "type": "object", + "properties": { + "enabled": { + "description": "Whether freqAI is enabled.", + "type": "boolean", + "default": false + }, + "keras": { + "description": "Use Keras for model training.", + "type": "boolean", + "default": false + }, + "write_metrics_to_disk": { + "description": "Write metrics to disk?", + "type": "boolean", + "default": false + }, + "purge_old_models": { + "description": "Number of models to keep on disk.", + "type": [ + "boolean", + "number" + ], + "default": 2 + }, + "conv_width": { + "description": "The width of a neural network input tensor.", + "type": "integer", + "default": 1 + }, + "train_period_days": { + "description": "Number of days to use for the training data (width of the sliding window)", + "type": "integer", + "default": 0 + }, + "backtest_period_days": { + "description": "Number of days to inference from the trained model before sliding the `train_period_days` window ", + "type": "number", + "default": 7 + }, + "identifier": { + "description": "A unique ID for the current model. Must be changed when modifying features.", + "type": "string", + "default": "example" + }, + "feature_parameters": { + "description": "The parameters used to engineer the feature set", + "type": "object", + "properties": { + "include_corr_pairlist": { + "description": "List of correlated pairs to include in the features.", + "type": "array" + }, + "include_timeframes": { + "description": "A list of timeframes that all indicators in `feature_engineering_expand_*()` will be created for.", + "type": "array" + }, + "label_period_candles": { + "description": "Number of candles into the future to use for labeling the period.This can be used in `set_freqai_targets()`.", + "type": "integer" + }, + "include_shifted_candles": { + "description": "Add features from previous candles to subsequent candles with the intent of adding historical information.", + "type": "integer", + "default": 0 + }, + "DI_threshold": { + "description": "Activates the use of the Dissimilarity Index for outlier detection when set to > 0.", + "type": "number", + "default": 0 + }, + "weight_factor": { + "description": "Weight training data points according to their recency.", + "type": "number", + "default": 0 + }, + "principal_component_analysis": { + "description": "Automatically reduce the dimensionality of the data set using Principal Component Analysis", + "type": "boolean", + "default": false + }, + "use_SVM_to_remove_outliers": { + "description": "Use SVM to remove outliers from the features.", + "type": "boolean", + "default": false + }, + "plot_feature_importances": { + "description": "Create feature importance plots for each model.", + "type": "integer", + "default": 0 + }, + "svm_params": { + "description": "All parameters available in Sklearn's `SGDOneClassSVM()`.", + "type": "object", + "properties": { + "shuffle": { + "description": "Whether to shuffle data before applying SVM.", + "type": "boolean", + "default": false + }, + "nu": { + "type": "number", + "default": 0.1 + } + } + }, + "shuffle_after_split": { + "description": "Split the data into train and test sets, and then shuffle both sets individually.", + "type": "boolean", + "default": false + }, + "buffer_train_data_candles": { + "description": "Cut `buffer_train_data_candles` off the beginning and end of the training data *after* the indicators were populated.", + "type": "integer", + "default": 0 + } + }, + "required": [ + "include_timeframes", + "include_corr_pairlist" + ] + }, + "data_split_parameters": { + "descriptions": "Additional parameters for scikit-learn's test_train_split() function.", + "type": "object", + "properties": { + "test_size": { + "type": "number" + }, + "random_state": { + "type": "integer" + }, + "shuffle": { + "type": "boolean", + "default": false + } + } + }, + "model_training_parameters": { + "description": "Flexible dictionary that includes all parameters available by the selected model library. ", + "type": "object" + }, + "rl_config": { + "type": "object", + "properties": { + "drop_ohlc_from_features": { + "description": "Do not include the normalized ohlc data in the feature set.", + "type": "boolean", + "default": false + }, + "train_cycles": { + "description": "Number of training cycles to perform.", + "type": "integer" + }, + "max_trade_duration_candles": { + "description": "Guides the agent training to keep trades below desired length.", + "type": "integer" + }, + "add_state_info": { + "description": "Include state information in the feature set for training and inference.", + "type": "boolean", + "default": false + }, + "max_training_drawdown_pct": { + "description": "Maximum allowed drawdown percentage during training.", + "type": "number", + "default": 0.02 + }, + "cpu_count": { + "description": "Number of threads/CPU's to use for training.", + "type": "integer", + "default": 1 + }, + "model_type": { + "description": "Model string from stable_baselines3 or SBcontrib.", + "type": "string", + "default": "PPO" + }, + "policy_type": { + "description": "One of the available policy types from stable_baselines3.", + "type": "string", + "default": "MlpPolicy" + }, + "net_arch": { + "description": "Architecture of the neural network.", + "type": "array", + "default": [ + 128, + 128 + ] + }, + "randomize_starting_position": { + "description": "Randomize the starting point of each episode to avoid overfitting.", + "type": "boolean", + "default": false + }, + "progress_bar": { + "description": "Display a progress bar with the current progress.", + "type": "boolean", + "default": true + }, + "model_reward_parameters": { + "description": "Parameters for configuring the reward model.", + "type": "object", + "properties": { + "rr": { + "type": "number", + "default": 1, + "description": "Reward ratio parameter." + }, + "profit_aim": { + "type": "number", + "default": 0.025, + "description": "Profit aim parameter." + } + } + } + } + } + }, + "required": [ + "enabled", + "train_period_days", + "backtest_period_days", + "identifier", + "feature_parameters", + "data_split_parameters" + ] + } + } +} \ No newline at end of file