]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
perf(qav3): active trailing stop loss at 1% profit
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Wed, 5 Feb 2025 13:42:56 +0000 (14:42 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Wed, 5 Feb 2025 13:42:56 +0000 (14:42 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
quickadapter/user_data/config-template.json
quickadapter/user_data/strategies/QuickAdapterV3.py

index 1d1e9f3163ad7ca5e573fefd0ed499ebe5f6dbb2..5a4eb8df57b3cb8b055d6672c1d209b7df2ba667 100644 (file)
 {
-    "$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
+  }
 }
index ddc1637092d02cd08f58115231b89da512c98b89..93c0220181a1b6c1ec824c5f9f2e3f4b97d4c58c 100644 (file)
@@ -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"]