From b94e9c64314ab5497e3d32c26008adf16a1b8422 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Wed, 5 Feb 2025 14:42:56 +0100 Subject: [PATCH] perf(qav3): active trailing stop loss at 1% profit MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- quickadapter/user_data/config-template.json | 340 +++++++++--------- .../user_data/strategies/QuickAdapterV3.py | 23 +- 2 files changed, 178 insertions(+), 185 deletions(-) diff --git a/quickadapter/user_data/config-template.json b/quickadapter/user_data/config-template.json index 1d1e9f3..5a4eb8d 100644 --- a/quickadapter/user_data/config-template.json +++ b/quickadapter/user_data/config-template.json @@ -1,179 +1,179 @@ { - "$schema": "https://schema.freqtrade.io/schema.json", - "max_open_trades": 10, - "stake_currency": "USDT", - "stake_amount": "unlimited", - "tradable_balance_ratio": 0.99, - "fiat_display_currency": "USD", - "dry_run": true, - "dry_run_wallet": 1000, - "cancel_open_orders_on_exit": false, - // "trading_mode": "futures", - // "margin_mode": "isolated", - "trading_mode": "spot", - "unfilledtimeout": { - "entry": 10, - "exit": 10, - "exit_timeout_count": 0, - "unit": "minutes" - }, - "entry_pricing": { - "price_side": "other", - "use_order_book": true, - "order_book_top": 1, - "price_last_balance": 0.0, - "check_depth_of_market": { - "enabled": false, - "bids_to_ask_delta": 1 - } - }, - "exit_pricing": { - "price_side": "other", - "use_order_book": true, - "order_book_top": 1, - "price_last_balance": 0.0 + "$schema": "https://schema.freqtrade.io/schema.json", + "max_open_trades": 10, + "stake_currency": "USDT", + "stake_amount": "unlimited", + "tradable_balance_ratio": 0.99, + "fiat_display_currency": "USD", + "dry_run": true, + "dry_run_wallet": 1000, + "cancel_open_orders_on_exit": false, + // "trading_mode": "futures", + // "margin_mode": "isolated", + "trading_mode": "spot", + "unfilledtimeout": { + "entry": 10, + "exit": 10, + "exit_timeout_count": 0, + "unit": "minutes" + }, + "entry_pricing": { + "price_side": "other", + "use_order_book": true, + "order_book_top": 1, + "price_last_balance": 0.0, + "check_depth_of_market": { + "enabled": false, + "bids_to_ask_delta": 1 + } + }, + "exit_pricing": { + "price_side": "other", + "use_order_book": true, + "order_book_top": 1, + "price_last_balance": 0.0 + }, + "exchange": { + "name": "binance", + "key": "", + "secret": "", + "walletAddress": "", + "privateKey": "", + "ccxt_config": { + "enableRateLimit": true, + "rateLimit": 60 }, - "exchange": { - "name": "binance", - "key": "", - "secret": "", - "walletAddress": "", - "privateKey": "", - "ccxt_config": { - "enableRateLimit": true, - "rateLimit": 60 - }, - "ccxt_async_config": { - "enableRateLimit": true, - "rateLimit": 60 - }, - // Spot top 5 - "pair_whitelist": [ - "BTC/USDT", - "ETH/USDT", - "SOL/USDT", - "BNB/USDT", - "XRP/USDT" - ], - // // Spot IA - // "pair_whitelist": [ - // "NEAR/USDT", - // "ICP/USDT", - // "RENDER/USDT", - // "TAO/USDT", - // "FET/USDT" - // ], - // // Spot restaking - // "pair_whitelist": [ - // "PENDLE/USDT", - // "EIGEN/USDT", - // "ETHFI/USDT" - // ], - // // Spot meme - // "pair_whitelist": [ - // "DOGE/USDT", - // "PENGU/USDT", - // "SHIB/USDT", - // "PEPE/USDT", - // "BONK/USDT" - // ], + "ccxt_async_config": { + "enableRateLimit": true, + "rateLimit": 60 }, - "pairlists": [ - { - "method": "StaticPairList" - } + // Spot top 5 + "pair_whitelist": [ + "BTC/USDT", + "ETH/USDT", + "SOL/USDT", + "BNB/USDT", + "XRP/USDT" ], - "telegram": { - "enabled": false, - "token": "", - "chat_id": "" + // // Spot IA + // "pair_whitelist": [ + // "NEAR/USDT", + // "ICP/USDT", + // "RENDER/USDT", + // "TAO/USDT", + // "FET/USDT" + // ], + // // Spot restaking + // "pair_whitelist": [ + // "PENDLE/USDT", + // "EIGEN/USDT", + // "ETHFI/USDT" + // ], + // // Spot meme + // "pair_whitelist": [ + // "DOGE/USDT", + // "PENGU/USDT", + // "SHIB/USDT", + // "PEPE/USDT", + // "BONK/USDT" + // ], + }, + "pairlists": [ + { + "method": "StaticPairList" + } + ], + "telegram": { + "enabled": false, + "token": "", + "chat_id": "" + }, + "api_server": { + "enabled": false, + "listen_ip_address": "0.0.0.0", + "listen_port": 8080, + "verbosity": "error", + "enable_openapi": false, + "jwt_secret_key": "", + "ws_token": "", + "CORS_origins": [], + "username": "freqtrader", + "password": "freqtrader" + }, + "freqai": { + "enabled": true, + "conv_width": 1, + "purge_old_models": 2, + "expiration_hours": 12, + "train_period_days": 30, + "live_retrain_hours": 0.5, + "backtest_period_days": 2, + "write_metrics_to_disk": false, + "identifier": "quickadapter-xgboost", + // "identifier": "quickadapter-lgbm", + "fit_live_predictions_candles": 300, + "track_performance": false, + "data_kitchen_thread_count": 6, // set to number of CPU threads / 4 + "outlier_threshold": 0.999, + "optuna_hyperopt": true, + "optuna_hyperopt_trials": 36, + "optuna_hyperopt_timeout": 3600, + "optuna_hyperopt_jobs": 6, + "optuna_hyperopt_candles_step": 100, + "extra_returns_per_train": { + "DI_value_param1": 0, + "DI_value_param2": 0, + "DI_value_param3": 0, + "DI_cutoff": 2, + "&s-minima_sort_threshold": -2, + "&s-maxima_sort_threshold": 2 }, - "api_server": { - "enabled": false, - "listen_ip_address": "0.0.0.0", - "listen_port": 8080, - "verbosity": "error", - "enable_openapi": false, - "jwt_secret_key": "", - "ws_token": "", - "CORS_origins": [], - "username": "freqtrader", - "password": "freqtrader" + "feature_parameters": { + "include_corr_pairlist": [ + "BTC/USDT", + "ETH/USDT" + ], + "include_timeframes": [ + "5m", + "15m", + "1h", + "4h" + ], + "label_period_candles": 100, + "include_shifted_candles": 6, + "DI_threshold": 10, + "weight_factor": 0.9, + "principal_component_analysis": false, + "use_SVM_to_remove_outliers": false, + "use_DBSCAN_to_remove_outliers": false, + "indicator_periods_candles": [ + 8, + 16, + 32 + ], + "inlier_metric_window": 0, + "noise_standard_deviation": 0.02, + "reverse_test_train_order": false, + "plot_feature_importances": 0, + "buffer_train_data_candles": 100 }, - "freqai": { - "enabled": true, - "conv_width": 1, - "purge_old_models": 2, - "expiration_hours": 12, - "train_period_days": 30, - "live_retrain_hours": 0.5, - "backtest_period_days": 2, - "write_metrics_to_disk": false, - "identifier": "quickadapter-xgboost", - // "identifier": "quickadapter-lgbm", - "fit_live_predictions_candles": 300, - "track_performance": false, - "data_kitchen_thread_count": 6, // set to number of CPU threads / 4 - "outlier_threshold": 0.999, - "optuna_hyperopt": true, - "optuna_hyperopt_trials": 36, - "optuna_hyperopt_timeout": 3600, - "optuna_hyperopt_jobs": 6, - "optuna_hyperopt_candles_step": 100, - "extra_returns_per_train": { - "DI_value_param1": 0, - "DI_value_param2": 0, - "DI_value_param3": 0, - "DI_cutoff": 2, - "&s-minima_sort_threshold": -2, - "&s-maxima_sort_threshold": 2 - }, - "feature_parameters": { - "include_corr_pairlist": [ - "BTC/USDT", - "ETH/USDT" - ], - "include_timeframes": [ - "5m", - "15m", - "1h", - "4h" - ], - "label_period_candles": 100, - "include_shifted_candles": 6, - "DI_threshold": 10, - "weight_factor": 0.9, - "principal_component_analysis": false, - "use_SVM_to_remove_outliers": false, - "use_DBSCAN_to_remove_outliers": false, - "indicator_periods_candles": [ - 8, - 16, - 32 - ], - "inlier_metric_window": 0, - "noise_standard_deviation": 0.02, - "reverse_test_train_order": false, - "plot_feature_importances": 0, - "buffer_train_data_candles": 100 - }, - "data_split_parameters": { - "test_size": 0.333, - "random_state": 1, - "shuffle": false - }, - "model_training_parameters": { - // "device": "gpu", - // "use_rmm:": true, - "n_jobs": 6, // set to number of CPU threads / 4 - "verbosity": 1 - } + "data_split_parameters": { + "test_size": 0.333, + "random_state": 1, + "shuffle": false }, - "bot_name": "freqtrade-quickadapter", - "initial_state": "running", - "timeframe": "5m", - "force_entry_enable": false, - "internals": { - "process_throttle_secs": 5 + "model_training_parameters": { + // "device": "gpu", + // "use_rmm:": true, + "n_jobs": 6, // set to number of CPU threads / 4 + "verbosity": 1 } + }, + "bot_name": "freqtrade-quickadapter", + "initial_state": "running", + "timeframe": "5m", + "force_entry_enable": false, + "internals": { + "process_throttle_secs": 5 + } } diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index ddc1637..93c0220 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -36,8 +36,12 @@ class QuickAdapterV3(IStrategy): position_adjustment_enable = False - # Attempts to handle large drops with DCA. High stoploss is required. - stoploss = -0.04 + stoploss = -0.02 + # Trailing stop: + trailing_stop = True + trailing_stop_positive = 0.01 + trailing_stop_positive_offset = 0.01 + trailing_only_offset_is_reached = True order_types = { "entry": "limit", @@ -55,7 +59,7 @@ class QuickAdapterV3(IStrategy): # This number is explained a bit further down max_dca_multiplier = 2 - minimal_roi = {"0": 0.03, "5000": -1} + minimal_roi = {"0": 0.03, "1000": -1} process_only_new_candles = True @@ -100,12 +104,6 @@ class QuickAdapterV3(IStrategy): use_exit_signal = True startup_candle_count: int = 80 - # # Trailing stop: - # trailing_stop = True - # trailing_stop_positive = 0.01 - # trailing_stop_positive_offset = 0.025 - # trailing_only_offset_is_reached = True - def feature_engineering_expand_all(self, dataframe, period, **kwargs): dataframe["%-rsi-period"] = ta.RSI(dataframe, timeperiod=period) dataframe["%-mfi-period"] = ta.MFI(dataframe, timeperiod=period) @@ -320,13 +318,8 @@ class QuickAdapterV3(IStrategy): entry_tag = trade.enter_tag - trade_duration = (current_time - trade.open_date_utc).seconds / 60 - - if trade_duration > 1000: - return "trade expired" - if last_candle["DI_catch"] == 0: - return "Outlier detected" + return "outlier_detected" if ( last_candle["&s-extrema"] < last_candle["minima_sort_threshold"] -- 2.43.0