This commit is contained in:
zhangkun9038@dingtalk.com 2025-05-19 10:40:30 +00:00
parent f70a1027d1
commit c6581649da
14 changed files with 0 additions and 1543 deletions

View File

@ -1,121 +0,0 @@
diff --git a/config_examples/config_freqai.okx.json b/config_examples/config_freqai.okx.json
index 259459e..c2693fc 100644
--- a/config_examples/config_freqai.okx.json
+++ b/config_examples/config_freqai.okx.json
@@ -5,11 +5,10 @@
"max_open_trades": 4,
"stake_currency": "USDT",
"stake_amount": 150,
- "startup_candle_count": 30,
"tradable_balance_ratio": 1,
"fiat_display_currency": "USD",
"dry_run": true,
- "timeframe": "5m",
+ "timeframe": "3m",
"dry_run_wallet": 1000,
"cancel_open_orders_on_exit": true,
"stoploss": -0.05,
@@ -24,21 +23,21 @@
"enable_ws": false,
"ccxt_config": {
"enableRateLimit": true,
- "rateLimit": 800,
+ "rateLimit": 500,
"options": {
"defaultType": "spot"
}
},
"ccxt_async_config": {
"enableRateLimit": true,
- "rateLimit": 800,
+ "rateLimit": 500,
"timeout": 20000
},
"pair_whitelist": [
- "OKB/USDT",
- "DOT/USDT",
+ "BTC/USDT",
"SOL/USDT"
- ]
+ ],
+ "pair_blacklist": []
},
"entry_pricing": {
"price_side": "same",
@@ -65,47 +64,37 @@
"data_kitchen": {
"fillna": "ffill"
},
- "freqaimodel": "CatboostClassifier",
- "purge_old_models": 2,
- "identifier": "test175",
- "train_period_days": 30,
- "backtest_period_days": 10,
+ "freqaimodel": "XGBoostRegressor",
+ "model_training_parameters": {
+ "n_estimators": 100,
+ "learning_rate": 0.05,
+ "max_depth": 5
+ },
+ "train_period_days": 180,
+ "backtest_period_days": 60,
"live_retrain_hours": 0,
"feature_selection": {
"method": "recursive_elimination"
},
"feature_parameters": {
- "include_timeframes": [
- "5m",
- "1h"
- ],
- "include_corr_pairlist": [
- "BTC/USDT",
- "ETH/USDT"
- ],
- "label_period_candles": 12,
- "include_shifted_candles": 3,
- "DI_threshold": 0.9,
+ "include_timeframes": ["15m"],
+ "include_corr_pairlist": ["BTC/USDT"],
+ "label_period_candles": 10,
+ "include_shifted_candles": 1,
+
"weight_factor": 0.9,
"principal_component_analysis": false,
"use_SVM_to_remove_outliers": false,
- "indicator_periods_candles": [
- 10,
- 20,
- 50
- ],
- "plot_feature_importances": 0
+ "indicator_periods_candles": [14],
},
"data_split_parameters": {
- "test_size": 0.2,
- "shuffle": false,
+ "test_size": 0.2
},
- "model_training_parameters": {
- "n_estimators": 100,
- "learning_rate": 0.1,
- "num_leaves": 15,
- "verbose": -1
- }
+ "model_training_parameters": {
+ "n_estimators": 100,
+ "learning_rate": 0.05,
+ "max_depth": 5
+ }
},
"api_server": {
"enabled": true,
@@ -123,7 +112,7 @@
"initial_state": "running",
"force_entry_enable": false,
"internals": {
- "process_throttle_secs": 10,
+ "process_throttle_secs": 5,
"heartbeat_interval": 20,
"loglevel": "DEBUG"
}

View File

@ -1,105 +0,0 @@
{
"max_open_trades": 3,
"stake_currency": "USDT",
"stake_amount": 150,
"startup_candle_count": 30,
"tradable_balance_ratio": 1,
"fiat_display_currency": "USD",
"dry_run": true,
"timeframe": "3m",
"dry_run_wallet": 1000,
"cancel_open_orders_on_exit": true,
"stoploss": -0.05,
"unfilledtimeout": {
"entry": 5,
"exit": 15
},
"timeframe": "5m",
"exchange": {
"name": "okx",
"key": "your_api_key",
"secret": "your_api_secret",
"password": "your_api_password",
"type": "spot",
"enable_ws": false,
"ccxt_config": {
"enableRateLimit": true,
"rateLimit": 500,
"options": {
"defaultType": "spot"
}
},
"ccxt_async_config": {
"enableRateLimit": true,
"rateLimit": 500,
"timeout": 20000
},
"pair_whitelist": [
"BTC/USDT",
"SOL/USDT"
],
"pair_blacklist": []
},
"entry_pricing": {
"price_side": "same",
"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
},
"pairlists": [
{
"method": "StaticPairList"
}
],
"strategy": "AIEnhancedStrategy",
"freqai": {
"enabled": true,
"live_retrain_hours": 1,
"data_kitchen_path": "freqai/data_kitchen/",
"purge_old_data_seconds": 86400,
"feature_parameters": {
"include_timeframes": ["5m", "15m", "1h"],
"include_corr_pairlist": ["BTC/USDT", "ETH/USDT"],
"include_shifted_candles": 2,
"indicator_periods_candles": [10, 20, 50],
"plot_feature_importances": 1,
"DI_threshold": 0.85,
"label_period_candles": 20,
"include_volume_data": true,
"include_bidirectional_training_data": true
},
"data_split_parameters": {
"test_size": 0.2,
"shuffle": true,
"random_state": 42
},
"model_training_parameters": {
"n_estimators": 200,
"learning_rate": 0.05,
"max_depth": 5,
"subsample": 0.8,
"colsample_bytree": 0.8,
"objective": "reg:squarederror",
"eval_metric": "rmse",
"early_stopping_rounds": 50,
"verbose": 0
}
},
"dry_run": true,
"dry_run_wallet": 1000,
"cancel_open_orders_on_exit": false,
"internals": {
"process_only_new_candles": true
}
}

View File

@ -1,64 +0,0 @@
{
"strategy": "MyStrategy",
"timeframe": "5m",
"dry_run": true,
"stake_currency": "USDT",
"stake_amount": 10.0,
"minimal_roi": {
"40": 0.0,
"30": 0.01,
"20": 0.02,
"0": 0.04
},
"stoploss": -0.10,
"trailing_stop": false,
"trailing_stop_positive": 0.0,
"trailing_stop_positive_offset": 0.0,
"trailing_only_offset_is_reached": 0.0,
"unfilledtimeout": {
"buy": 300,
"sell": 300
},
"exchange": {
"name": "binance",
"key": "",
"secret": "",
"ccxt_config": {
"enableRateLimit": true
},
"pair_whitelist": [
"BTC/USDT",
"ETH/USDT",
"SOL/USDT"
],
"pair_blacklist": []
},
"telegram": {
"enabled": false,
"token": "",
"chat_id": ""
},
"api_server": {
"enabled": false,
"listen_ip_address": "127.0.0.1",
"listen_port": 8080,
"verbosity": "error",
"enable_openapi": false
},
"hyperopt": {
"enabled": false,
"epochs": 100,
"spaces": [
"buy",
"sell",
"roi",
"stoploss",
"trailing"
],
"hyperopt_path": "",
"hyperopt_loss": "SharpeHyperOptLossDaily",
"print_all": false,
"mongodb_url": "",
"mongodb_database": ""
}
}

View File

@ -1,72 +0,0 @@
{
"$schema": "https://schema.freqtrade.io/schema.json",
"max_open_trades": 3,
"stake_currency": "USDT",
"stake_amount": 0.05,
"tradable_balance_ratio": 0.99,
"fiat_display_currency": "USD",
"timeframe": "5m",
"dry_run": true,
"cancel_open_orders_on_exit": false,
"unfilledtimeout": {
"entry": 10,
"exit": 10,
"exit_timeout_count": 0,
"unit": "minutes"
},
"entry_pricing": {
"price_side": "same",
"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": "same",
"use_order_book": true,
"order_book_top": 1
},
"exchange": {
"name": "binance",
"key": "your_exchange_key",
"secret": "your_exchange_secret",
"ccxt_config": {},
"ccxt_async_config": {
},
"pair_whitelist": [
"ETH/USDT",
"XRP/USDT",
"BTC/USDT"
],
"pair_blacklist": [
"BNB/.*"
]
},
"pairlists": [
{"method": "StaticPairList"}
],
"telegram": {
"enabled": false,
"token": "your_telegram_token",
"chat_id": "your_telegram_chat_id"
},
"api_server": {
"enabled": false,
"listen_ip_address": "127.0.0.1",
"listen_port": 8080,
"verbosity": "error",
"jwt_secret_key": "somethingrandom",
"CORS_origins": [],
"username": "freqtrader",
"password": "SuperSecurePassword"
},
"bot_name": "freqtrade",
"initial_state": "running",
"force_entry_enable": false,
"internals": {
"process_throttle_secs": 5
}
}

View File

@ -1,84 +0,0 @@
{
"$schema": "https://schema.freqtrade.io/schema.json",
"max_open_trades": 3,
"stake_currency": "USDT",
"stake_amount": 0.05,
"tradable_balance_ratio": 0.99,
"fiat_display_currency": "USD",
"timeframe": "5m",
"dry_run": true,
"cancel_open_orders_on_exit": false,
"unfilledtimeout": {
"entry": 10,
"exit": 10,
"exit_timeout_count": 0,
"unit": "minutes"
},
"entry_pricing": {
"price_side": "same",
"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": "same",
"use_order_book": true,
"order_book_top": 1
},
"exchange": {
"name": "binance",
"key": "your_exchange_key",
"secret": "your_exchange_secret",
"ccxt_config": {},
"ccxt_async_config": {
},
"pair_whitelist": [
"ALGO/USDT",
"ATOM/USDT",
"BAT/USDT",
"BCH/USDT",
"BRD/USDT",
"EOS/USDT",
"ETH/USDT",
"IOTA/USDT",
"LINK/USDT",
"LTC/USDT",
"NEO/USDT",
"NXS/USDT",
"XMR/USDT",
"XRP/USDT",
"XTZ/USDT"
],
"pair_blacklist": [
"BNB/.*"
]
},
"pairlists": [
{"method": "StaticPairList"}
],
"telegram": {
"enabled": false,
"token": "your_telegram_token",
"chat_id": "your_telegram_chat_id"
},
"api_server": {
"enabled": false,
"listen_ip_address": "127.0.0.1",
"listen_port": 8080,
"verbosity": "error",
"jwt_secret_key": "somethingrandom",
"CORS_origins": [],
"username": "freqtrader",
"password": "SuperSecurePassword"
},
"bot_name": "freqtrade",
"initial_state": "running",
"force_entry_enable": false,
"internals": {
"process_throttle_secs": 5
}
}

View File

@ -1,212 +0,0 @@
{
"$schema": "https://schema.freqtrade.io/schema.json",
"max_open_trades": 3,
"stake_currency": "BTC",
"stake_amount": 0.05,
"tradable_balance_ratio": 0.99,
"fiat_display_currency": "USD",
"amount_reserve_percent": 0.05,
"available_capital": 1000,
"amend_last_stake_amount": false,
"last_stake_amount_min_ratio": 0.5,
"dry_run": true,
"dry_run_wallet": 1000,
"cancel_open_orders_on_exit": false,
"timeframe": "5m",
"trailing_stop": false,
"trailing_stop_positive": 0.005,
"trailing_stop_positive_offset": 0.0051,
"trailing_only_offset_is_reached": false,
"use_exit_signal": true,
"exit_profit_only": false,
"exit_profit_offset": 0.0,
"ignore_roi_if_entry_signal": false,
"ignore_buying_expired_candle_after": 300,
"trading_mode": "spot",
"margin_mode": "",
"minimal_roi": {
"40": 0.0,
"30": 0.01,
"20": 0.02,
"0": 0.04
},
"stoploss": -0.10,
"unfilledtimeout": {
"entry": 10,
"exit": 10,
"exit_timeout_count": 0,
"unit": "minutes"
},
"entry_pricing": {
"price_side": "same",
"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": "same",
"use_order_book": true,
"order_book_top": 1,
"price_last_balance": 0.0
},
"order_types": {
"entry": "limit",
"exit": "limit",
"emergency_exit": "market",
"force_exit": "market",
"force_entry": "market",
"stoploss": "market",
"stoploss_on_exchange": false,
"stoploss_price_type": "last",
"stoploss_on_exchange_interval": 60,
"stoploss_on_exchange_limit_ratio": 0.99
},
"order_time_in_force": {
"entry": "GTC",
"exit": "GTC"
},
"pairlists": [
{"method": "StaticPairList"},
{"method": "FullTradesFilter"},
{
"method": "VolumePairList",
"number_assets": 20,
"sort_key": "quoteVolume",
"refresh_period": 1800
},
{"method": "AgeFilter", "min_days_listed": 10},
{"method": "PrecisionFilter"},
{"method": "PriceFilter", "low_price_ratio": 0.01, "min_price": 0.00000010},
{"method": "SpreadFilter", "max_spread_ratio": 0.005},
{
"method": "RangeStabilityFilter",
"lookback_days": 10,
"min_rate_of_change": 0.01,
"refresh_period": 1440
}
],
"exchange": {
"name": "binance",
"key": "your_exchange_key",
"secret": "your_exchange_secret",
"password": "",
"log_responses": false,
// "unknown_fee_rate": 1,
"ccxt_config": {},
"ccxt_async_config": {},
"pair_whitelist": [
"ALGO/BTC",
"ATOM/BTC",
"BAT/BTC",
"BCH/BTC",
"BRD/BTC",
"EOS/BTC",
"ETH/BTC",
"IOTA/BTC",
"LINK/BTC",
"LTC/BTC",
"NEO/BTC",
"NXS/BTC",
"XMR/BTC",
"XRP/BTC",
"XTZ/BTC"
],
"pair_blacklist": [
"DOGE/BTC"
],
"outdated_offset": 5,
"markets_refresh_interval": 60
},
"edge": {
"enabled": false,
"process_throttle_secs": 3600,
"calculate_since_number_of_days": 7,
"allowed_risk": 0.01,
"stoploss_range_min": -0.01,
"stoploss_range_max": -0.1,
"stoploss_range_step": -0.01,
"minimum_winrate": 0.60,
"minimum_expectancy": 0.20,
"min_trade_number": 10,
"max_trade_duration_minute": 1440,
"remove_pumps": false
},
"telegram": {
"enabled": false,
"token": "your_telegram_token",
"chat_id": "your_telegram_chat_id",
"notification_settings": {
"status": "on",
"warning": "on",
"startup": "on",
"entry": "on",
"entry_fill": "on",
"exit": {
"roi": "off",
"emergency_exit": "off",
"force_exit": "off",
"exit_signal": "off",
"trailing_stop_loss": "off",
"stop_loss": "off",
"stoploss_on_exchange": "off",
"custom_exit": "off"
},
"exit_fill": "on",
"entry_cancel": "on",
"exit_cancel": "on",
"protection_trigger": "off",
"protection_trigger_global": "on",
"show_candle": "off"
},
"reload": true,
"balance_dust_level": 0.01
},
"api_server": {
"enabled": false,
"listen_ip_address": "127.0.0.1",
"listen_port": 8080,
"verbosity": "error",
"enable_openapi": false,
"jwt_secret_key": "somethingrandom",
"CORS_origins": [],
"username": "freqtrader",
"password": "SuperSecurePassword",
"ws_token": "secret_ws_t0ken."
},
"external_message_consumer": {
"enabled": false,
"producers": [
{
"name": "default",
"host": "127.0.0.2",
"port": 8080,
"ws_token": "secret_ws_t0ken."
}
],
"wait_timeout": 300,
"ping_timeout": 10,
"sleep_time": 10,
"remove_entry_exit_signals": false,
"message_size_limit": 8
},
"bot_name": "freqtrade",
"db_url": "sqlite:///tradesv3.sqlite",
"initial_state": "running",
"force_entry_enable": false,
"internals": {
"process_throttle_secs": 5,
"heartbeat_interval": 60
},
"disable_dataframe_checks": false,
"strategy": "SampleStrategy",
"strategy_path": "user_data/strategies/",
"recursive_strategy_search": false,
"add_config_files": [],
"reduce_df_footprint": false,
"dataformat_ohlcv": "feather",
"dataformat_trades": "feather"
}

View File

@ -1,90 +0,0 @@
{
"$schema": "https://schema.freqtrade.io/schema.json",
"max_open_trades": 5,
"stake_currency": "EUR",
"stake_amount": 10,
"tradable_balance_ratio": 0.99,
"fiat_display_currency": "EUR",
"timeframe": "5m",
"dry_run": true,
"cancel_open_orders_on_exit": false,
"unfilledtimeout": {
"entry": 10,
"exit": 10,
"exit_timeout_count": 0,
"unit": "minutes"
},
"entry_pricing": {
"price_side": "same",
"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": "same",
"use_order_book": true,
"order_book_top": 1
},
"exchange": {
"name": "kraken",
"key": "your_exchange_key",
"secret": "your_exchange_key",
"ccxt_config": {},
"ccxt_async_config": {
},
"pair_whitelist": [
"ADA/EUR",
"ATOM/EUR",
"BAT/EUR",
"BCH/EUR",
"BTC/EUR",
"DAI/EUR",
"DASH/EUR",
"EOS/EUR",
"ETC/EUR",
"ETH/EUR",
"LINK/EUR",
"LTC/EUR",
"QTUM/EUR",
"REP/EUR",
"WAVES/EUR",
"XLM/EUR",
"XMR/EUR",
"XRP/EUR",
"XTZ/EUR",
"ZEC/EUR"
],
"pair_blacklist": [
]
},
"pairlists": [
{"method": "StaticPairList"}
],
"telegram": {
"enabled": false,
"token": "your_telegram_token",
"chat_id": "your_telegram_chat_id"
},
"api_server": {
"enabled": false,
"listen_ip_address": "127.0.0.1",
"listen_port": 8080,
"verbosity": "error",
"jwt_secret_key": "somethingrandom",
"CORS_origins": [],
"username": "freqtrader",
"password": "SuperSecurePassword"
},
"bot_name": "freqtrade",
"initial_state": "running",
"force_entry_enable": false,
"internals": {
"process_throttle_secs": 5
},
"download_trades": true
}

View File

@ -1,133 +0,0 @@
{
"$schema": "https://schema.freqtrade.io/schema.json",
"trading_mode": "spot",
"margin_mode": "isolated",
"max_open_trades": 4,
"stake_currency": "USDT",
"stake_amount": 150,
"startup_candle_count": 30,
"tradable_balance_ratio": 1,
"fiat_display_currency": "USD",
"dry_run": true,
"identifier": "demo1",
"timeframe": "5m",
"dry_run_wallet": 1000,
"cancel_open_orders_on_exit": true,
"stoploss": -0.05,
"unfilledtimeout": {
"entry": 5,
"exit": 15
},
"exchange": {
"name": "okx",
"key": "eca767d4-fda5-4a1b-bb28-49ae18093307",
"secret": "8CA3628A556ED137977DB298D37BC7F3",
"enable_ws": false,
"ccxt_config": {
"enableRateLimit": true,
"rateLimit": 500,
"options": {
"defaultType": "spot"
}
},
"ccxt_async_config": {
"enableRateLimit": true,
"rateLimit": 500,
"timeout": 20000
},
"pair_whitelist": [
"OKB/USDT",
"BTC/USDT",
"SOL/USDT",
"DOT/USDT",
"TON/USDT",
"ETH/USDT",
],
"pair_blacklist": []
},
"freqai": {
"enabled": true,
"identifier": "test175",
"freqaimodel": "XGBoostRegressor",
"model_path": "/freqtrade/user_data/models",
"save_backtesting_prediction": true,
"save_backtest_models": true,
"backtest_period_days": 30,
"purge_old_models": true,
"load_trained_model": true,
"train_period_days": 90,
"backtest_period_days": 10,
"live_retrain_hours": 0,
"include_predictions_in_final_dataframe": true,
"data_kitchen": {
"fillna": "ffill",
"feature_parameters": {
"DI_threshold": 0.5,
"weight_factor": 0.9
}
},
"feature_parameters": {
"include_timeframes": ["5m", "15m", "1h"],
"include_corr_pairlist": ["BTC/USDT", "ETH/USDT"],
"label_period_candles": 12,
"include_shifted_candles": 3,
"indicator_periods_candles": [10, 20, 50],
"plot_feature_importances": 1,
"feature_selection": {
"method": "none"
}
},
"data_split_parameters": {
"test_size": 0.2,
"shuffle": false
},
"model_training_parameters": {
"n_estimators": 200,
"learning_rate": 0.05,
"max_depth": 6,
"subsample": 0.8,
"colsample_bytree": 0.8
},
},
"entry_pricing": {
"price_side": "same",
"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
},
"pairlists": [
{
"method": "StaticPairList"
}
],
"api_server": {
"enabled": true,
"listen_ip_address": "0.0.0.0",
"listen_port": 8080,
"verbosity": "error",
"enable_openapi": false,
"jwt_secret_key": "6a599ab046dbb419014807dffd7b8823bfa7e5df56b17d545485deb87331b4ca",
"ws_token": "6O5pBDiRigiZrmIsofaE2rkKMJtf9h8zVQ",
"CORS_origins": [],
"username": "freqAdmin",
"password": "admin"
},
"use_exit_signal": true,
"bot_name": "freqtrade",
"initial_state": "running",
"force_entry_enable": false,
"internals": {
"process_throttle_secs": 5,
"heartbeat_interval": 20,
"loglevel": "DEBUG"
}
}

View File

@ -1,127 +0,0 @@
{
"$schema": "https://schema.freqtrade.io/schema.json",
"trading_mode": "spot",
"margin_mode": "isolated",
"max_open_trades": 4,
"stake_currency": "USDT",
"stake_amount": 150,
"startup_candle_count": 30,
"tradable_balance_ratio": 1,
"fiat_display_currency": "USD",
"dry_run": true,
"timeframe": "3m",
"dry_run_wallet": 1000,
"cancel_open_orders_on_exit": true,
"stoploss": -0.05,
"unfilledtimeout": {
"entry": 5,
"exit": 15
},
"exchange": {
"name": "okx",
"key": "eca767d4-fda5-4a1b-bb28-49ae18093307",
"secret": "8CA3628A556ED137977DB298D37BC7F3",
"enable_ws": false,
"ccxt_config": {
"enableRateLimit": true,
"rateLimit": 500,
"options": {
"defaultType": "spot"
}
},
"ccxt_async_config": {
"enableRateLimit": true,
"rateLimit": 500,
"timeout": 20000
},
"pair_whitelist": [
"BTC/USDT",
"SOL/USDT"
],
"pair_blacklist": []
},
"entry_pricing": {
"price_side": "same",
"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
},
"pairlists": [
{
"method": "StaticPairList"
}
],
"freqai": {
"enabled": true,
"data_kitchen": {
"fillna": "ffill",
"feature_parameters": {
"DI_threshold": 0.9,
"weight_factor": 0.9
}
},
"freqaimodel": "XGBoostRegressor",
"purge_old_models": 2,
"identifier": "test175",
"train_period_days": 30,
"backtest_period_days": 10,
"live_retrain_hours": 0,
"feature_selection": {
"method": "recursive_elimination",
"threshold": 0.01
},
"feature_parameters": {
"include_timeframes": ["3m", "5m", "1h"],
"include_corr_pairlist": ["BTC/USDT", "ETH/USDT"],
"label_period_candles": 12,
"include_shifted_candles": 3,
"indicator_periods_candles": [10, 20, 50],
"plot_feature_importances": 1
},
"data_split_parameters": {
"test_size": 0.2,
"shuffle": true,
"random_state": 42
},
"model_training_parameters": {
"n_estimators": 200,
"learning_rate": 0.05,
"max_depth": 5,
"subsample": 0.8,
"colsample_bytree": 0.8,
"objective": "reg:squarederror",
"eval_metric": "rmse",
"early_stopping_rounds": 50,
"verbose": 0
}
},
"api_server": {
"enabled": true,
"listen_ip_address": "0.0.0.0",
"listen_port": 8080,
"verbosity": "error",
"enable_openapi": false,
"jwt_secret_key": "6a599ab046dbb419014807dffd7b8823bfa7e5df56b17d545485deb87331b4ca",
"ws_token": "6O5pBDiRigiZrmIsofaE2rkKMJtf9h8zVQ",
"CORS_origins": [],
"username": "freqAdmin",
"password": "admin"
},
"bot_name": "freqtrade",
"initial_state": "running",
"force_entry_enable": false,
"internals": {
"process_throttle_secs": 5,
"heartbeat_interval": 20,
"loglevel": "DEBUG"
}
}

View File

@ -1,95 +0,0 @@
{
"strategy": "TheForceFreqaiStrategy",
"timeframe": "5m",
"timerange": "20240701-20250115",
"exchange": {
"name": "okx",
"ccxt_config": {
"enableRateLimit": true,
"rateLimit": 500,
"options": {"defaultType": "spot"},
"timeout": 20000
},
"pair_whitelist": [
"OKB/USDT"
],
"fee": 0.0008
},
"pair_whitelist": ["OKB/USDT"],
"dataformat_ohlcv": "feather",
"download_data": {
"timeframes": ["5m"],
"timerange": "20240701-20250115"
},
"stake_currency": "USDT",
"stake_amount": 150,
"stoploss": -0.15,
"minimal_roi": {
"0": 0.05,
"60": 0.03,
"120": 0.01
},
"startup_candle_count": 200,
"max_open_trades": 4,
"use_exit_signal": true,
"unfilledtimeout": {
"entry": 5,
"exit": 15,
"unit": "minutes"
},
"export": "trades",
"cache": "none",
"loglevel": "DEBUG",
"verbosity": 2,
"entry_pricing": {
"price_side": "same",
"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
},
"pairlists": [
{
"method": "StaticPairList"
}
],
"freqai": {
"enabled": true,
"identifier": "theforce_model",
"save_backtest_models": true,
"live_retrain": true,
"purge_old_models": true,
"fit_live_predictions_candles": 50,
"force_train": true,
"verbose": 2,
"train_period_days": 7,
"backtest_period_days": 2,
"feature_parameters": {
"include_timeframes": ["5m"],
"include_corr_pairlist": [],
"label_period_candles": 5,
"include_shifted_candles": 2,
"DI_threshold": 1.5,
"indicator_periods_candles": [10, 20, 50],
"include_default_features": ["open", "high", "low", "close", "volume"],
"use_SVM_to_remove_outliers": false
},
"data_split_parameters": {
"test_size": 0.2,
"random_state": 42
},
"model_training_parameters": {
"n_estimators": 100,
"max_depth": 7,
"verbose": -1
}
}
}

View File

@ -1,96 +0,0 @@
{
"$schema": "https://schema.freqtrade.io/schema.json",
"trading_mode": "spot",
"margin_mode": "isolated",
"max_open_trades": 3,
"stake_amount": 300,
"unfilledtimeout": {
"entry": 10,
"exit": 20
},
"entry_pricing": {
"price_side": "same",
"use_order_book": true,
"order_book_top": 1
},
"exit_pricing": {
"price_side": "other",
"use_order_book": true,
"order_book_top": 1
},
"stake_currency": "USDT",
"trailing_stop": false,
"use_custom_stoploss": true,
"startup_candle_count": 200,
"tradable_balance_ratio": 1,
"fiat_display_currency": "USD",
"dry_run": true,
"identifier": "demo1",
"timeframe": "5m",
"dry_run_wallet": 1000,
"cancel_open_orders_on_exit": true,
"stoploss": -0.061,
"roi": {},
"trailing": {
"trailing_stop": false,
"trailing_stop_positive": null,
"trailing_stop_positive_offset": 0.0,
"trailing_only_offset_is_reached": false
},
"max_open_trades": 3,
"buy": {
"adx_buy": 25,
"atr_ratio": 0.005
},
"sell": {
"ema_fast_period": 7,
"rsi_sell": 60
},
"exchange": {
"name": "okx",
"key": "REDACTED",
"secret": "REDACTED",
"enable_ws": false,
"ccxt_config": {
"enableRateLimit": true,
"rateLimit": 500,
"options": {
"defaultType": "spot"
}
},
"ccxt_async_config": {
"enableRateLimit": true,
"rateLimit": 3000,
"timeout": 20000
},
"pair_whitelist": ["BTC/USDT", "ETH/USDT", "SOL/USDT", "DOT/USDT"],
"pair_blacklist": []
},
"pairlists": [
{
"method": "StaticPairList"
}
],
"api_server": {
"enabled": true,
"listen_ip_address": "0.0.0.0",
"listen_port": 8080,
"verbosity": "error",
"enable_openapi": false,
"jwt_secret_key": "6a599ab046dbb419014807dffd7b8823bfa7e5df56b17d545485deb87331b4ca",
"ws_token": "6O5pBDiRigiZrmIsofaE2rkKMJtf9h8zVQ",
"CORS_origins": [],
"username": "freqAdmin",
"password": "REDACTED"
},
"use_exit_signal": true,
"bot_name": "freqtrade",
"initial_state": "running",
"force_entry_enable": false,
"internals": {
"process_throttle_secs": 5,
"heartbeat_interval": 20,
"loglevel": "INFO"
},
"config_files": ["config_examples/theforcev7.json"]
}

View File

@ -1,122 +0,0 @@
diff --git a/config_examples/config_freqai.okx.json b/config_examples/config_freqai.okx.json
index 259459e..c8f04af 100644
--- a/config_examples/config_freqai.okx.json
+++ b/config_examples/config_freqai.okx.json
@@ -5,11 +5,10 @@
"max_open_trades": 4,
"stake_currency": "USDT",
"stake_amount": 150,
- "startup_candle_count": 30,
"tradable_balance_ratio": 1,
"fiat_display_currency": "USD",
"dry_run": true,
- "timeframe": "5m",
+ "timeframe": "3m",
"dry_run_wallet": 1000,
"cancel_open_orders_on_exit": true,
"stoploss": -0.05,
@@ -24,21 +23,21 @@
"enable_ws": false,
"ccxt_config": {
"enableRateLimit": true,
- "rateLimit": 800,
+ "rateLimit": 500,
"options": {
"defaultType": "spot"
}
},
"ccxt_async_config": {
"enableRateLimit": true,
- "rateLimit": 800,
+ "rateLimit": 500,
"timeout": 20000
},
"pair_whitelist": [
- "OKB/USDT",
- "DOT/USDT",
+ "BTC/USDT",
"SOL/USDT"
- ]
+ ],
+ "pair_blacklist": []
},
"entry_pricing": {
"price_side": "same",
@@ -65,47 +64,38 @@
"data_kitchen": {
"fillna": "ffill"
},
- "freqaimodel": "CatboostClassifier",
- "purge_old_models": 2,
- "identifier": "test175",
- "train_period_days": 30,
- "backtest_period_days": 10,
+ "freqaimodel": "XGBoostRegressor",
+ "model_training_parameters": {
+ "n_estimators": 100,
+ "learning_rate": 0.05,
+ "max_depth": 5
+ },
+ "train_period_days": 15,
+ "train_period_days": 180,
+ "backtest_period_days": 60,
"live_retrain_hours": 0,
"feature_selection": {
"method": "recursive_elimination"
},
"feature_parameters": {
- "include_timeframes": [
- "5m",
- "1h"
- ],
- "include_corr_pairlist": [
- "BTC/USDT",
- "ETH/USDT"
- ],
- "label_period_candles": 12,
- "include_shifted_candles": 3,
- "DI_threshold": 0.9,
+ "include_timeframes": ["15m"],
+ "include_corr_pairlist": ["BTC/USDT"],
+ "label_period_candles": 10,
+ "include_shifted_candles": 1,
+
"weight_factor": 0.9,
"principal_component_analysis": false,
"use_SVM_to_remove_outliers": false,
- "indicator_periods_candles": [
- 10,
- 20,
- 50
- ],
- "plot_feature_importances": 0
+ "indicator_periods_candles": [14],
},
"data_split_parameters": {
- "test_size": 0.2,
- "shuffle": false,
+ "test_size": 0.2
},
- "model_training_parameters": {
- "n_estimators": 100,
- "learning_rate": 0.1,
- "num_leaves": 15,
- "verbose": -1
- }
+ "model_training_parameters": {
+ "n_estimators": 100,
+ "learning_rate": 0.05,
+ "max_depth": 5
+ }
},
"api_server": {
"enabled": true,
@@ -123,7 +113,7 @@
"initial_state": "running",
"force_entry_enable": false,
"internals": {
- "process_throttle_secs": 10,
+ "process_throttle_secs": 5,
"heartbeat_interval": 20,
"loglevel": "DEBUG"
}

View File

@ -1,29 +0,0 @@
{
"strategy_name": "TheForceV7",
"params": {
"roi": {},
"trailing": {
"trailing_stop": false,
"trailing_stop_positive": null,
"trailing_stop_positive_offset": 0.0,
"trailing_only_offset_is_reached": false
},
"max_open_trades": {
"max_open_trades": 3
},
"buy": {
"adx_buy": 25,
"atr_ratio": 0.005
},
"sell": {
"ema_fast_period": 7,
"rsi_sell": 60
},
"protection": {},
"stoploss": {
"stoploss": -0.061
}
},
"ft_stratparam_v": 1,
"export_time": "2025-05-15 12:57:22.019801+00:00"
}

View File

@ -1,193 +0,0 @@
from freqtrade.strategy import IStrategy
from pandas import DataFrame
import talib.abstract as ta
from typing import Dict, List, Optional, Union
from freqtrade.persistence import Trade
from freqtrade.strategy import CategoricalParameter, DecimalParameter, IntParameter
from datetime import datetime
class TheForceV7(IStrategy):
# 基础参数
timeframe = '5m'
use_exit_signal = True
exit_profit_only = False
ignore_roi_if_entry_signal = False
# # Hyperopt 参数
# stoploss = DecimalParameter(
# low=-0.3, high=-0.1, default=-0.233, decimals=3, space='`stoploss'
# )
# profit_threshold_multiplier = DecimalParameter(
# low=0.1, high=1.0, default=0.5, decimals=3, space='stoploss'
# )
# trailing_stop_multiplier = DecimalParameter(
# low=0.5, high=3.0, default=1.5, decimals=3, space='stoploss'
# )
# Hyperopt 参数
stoploss = DecimalParameter(low=-0.3, high=-0.1, default=-0.233, decimals=3, space='stoploss')
profit_threshold_multiplier = DecimalParameter(low=0.2, high=1.0, default=0.5, decimals=3, space='stoploss') # 扩大范围
trailing_stop_multiplier = DecimalParameter(low=0.8, high=3.0, default=1.5, decimals=3, space='stoploss') # 扩大范围
# Hyperopt 参数
stoploss = DecimalParameter(-0.3, -0.05, default=-0.15, decimals=3, space='stoploss')
profit_threshold_multiplier = DecimalParameter(0.8, 3.0, default=1.5, decimals=3, space='stoploss')
trailing_stop_multiplier = DecimalParameter(1.5, 6.0, default=3.0, decimals=3, space='stoploss')
adx_buy = DecimalParameter(15, 35, default=25, decimals=0, space='buy')
atr_ratio = DecimalParameter(0.002, 0.01, default=0.005, decimals=3, space='buy')
rsi_sell = DecimalParameter(50, 70, default=60, decimals=0, space='sell')
ema_fast_period = IntParameter(3, 10, default=7, space='sell')
@property
def protections(self):
return [
{
"method": "CooldownPeriod",
"stop_duration_candles": 5 # 卖出后禁止再次买入的K线数
},
{
"method": "MaxDrawdown",
"lookback_period_candles": 48,
"trade_limit": 20,
"stop_duration_candles": 4,
"max_allowed_drawdown": 0.2 # 最大允许回撤 20%
},
{
"method": "StoplossGuard",
"lookback_period_candles": 24,
"trade_limit": 4, # 在 lookback 内最多触发几次止损
"stop_duration_candles": 2, # 锁定多少根 K 线
"only_per_pair": False # 是否按币种统计
},
{
"method": "LowProfitPairs",
"lookback_period_candles": 6,
"trade_limit": 2,
"stop_duration_candles": 60,
"required_profit": 0.02
},
{
"method": "LowProfitPairs",
"lookback_period_candles": 24,
"trade_limit": 4,
"stop_duration_candles": 2,
"required_profit": 0.01
}
]
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# Calculate ATR (14-period, consistent with your code)
# Store the latest ATR in metadata for the pair
dataframe['ema200c'] = ta.EMA(dataframe['close'], timeperiod=200)
dataframe['ema50c'] = ta.EMA(dataframe['close'], timeperiod=50)
dataframe['ema20c'] = ta.EMA(dataframe['close'], timeperiod=20)
dataframe['rsi7'] = ta.RSI(dataframe['close'], timeperiod=7)
macd = ta.MACD(dataframe['close'])
dataframe['macd'] = macd[0]
dataframe['macdsignal'] = macd[1]
stoch = ta.STOCH(dataframe['high'], dataframe['low'], dataframe['close'], fastk_period=14, slowk_period=3, slowd_period=3)
dataframe['slowk'] = stoch[0]
dataframe['slowd'] = stoch[1]
dataframe['volvar'] = dataframe['volume'].rolling(window=20).mean()
dataframe['atr'] = ta.ATR(dataframe, timeperiod=14)
dataframe['adx'] = ta.ADX(dataframe, timeperiod=14)
dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
for period in [self.ema_fast_period.value, 21, 50]:
dataframe[f'ema_{period}'] = ta.EMA(dataframe, timeperiod=period)
metadata['latest_atr'] = dataframe['atr'].iloc[-1]
metadata['latest_adx'] = dataframe['adx'].iloc[-1]
return dataframe
def crossover(self, series1: DataFrame, series2: DataFrame) -> DataFrame:
"""Detects when series1 crosses above series2."""
return (series1 > series2) & (series1.shift(1) <= series2.shift(1))
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(dataframe['close'] > dataframe['ema200c']) & # Relaxed trend
(dataframe['close'] > dataframe['ema50c']) & # Short-term trend
(dataframe['rsi7'] < 50) & # Relaxed RSI
(dataframe['macd'] > 0) & # Relaxed MACD
(dataframe['volume'] > dataframe['volvar'] * 0.5) & # Relaxed volume
(dataframe['adx'] > 21), # Trend strength
'enter_long'
] = 1
return dataframe
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(
(dataframe['slowk'] > 65) | (dataframe['slowd'] > 65) | # Relaxed STOCH
(dataframe['rsi7'] > 70) # Overbought
) &
(dataframe['close'] < dataframe['ema20c']) & # Trend reversal
(self.crossover(dataframe['macdsignal'], dataframe['macd'])) & # Custom crossover
(dataframe['macd'] < 0), # Downtrend
'exit_long'
] = 1
return dataframe
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime, current_rate: float, current_profit: float, after_fill: bool, **kwargs) -> Optional[float]:
atr = kwargs.get('metadata', {}).get('latest_atr', 0.01 * current_rate)
adx = kwargs.get('metadata', {}).get('latest_adx', 0)
atr_percent = atr / current_rate
profit_threshold = float(self.profit_threshold_multiplier.value) * atr_percent
trailing_stop_distance = float(self.trailing_stop_multiplier.value) * atr_percent
trade_duration = (current_time - trade.open_date).total_seconds() / 3600
# 动态调整
if trade_duration < 3: # 3小时内放宽
profit_threshold *= 1.5 # 提高触发门槛
trailing_stop_distance *= 1.5 # 放宽止损距离
if adx > 35: # 强趋势
trailing_stop_distance *= 0.5 # 紧跟趋势
elif adx < 20: # 震荡市场
trailing_stop_distance *= 2.0 # 放宽止损
# ATR 追踪止损
if adx > 35 and after_fill and current_profit > profit_threshold:
return -trailing_stop_distance
# 固定止损
elif trade_duration > 1.5 or adx < 20 or current_profit < -0.015: # 1.5小时,震荡,亏损>1.5%
return float(self.stoploss)
return -0.05 # 默认止损收紧
@staticmethod
def hyperopt_loss_function(results: DataFrame, trade_count: int, min_date: datetime, max_date: datetime, config: Dict, processed: Dict[str, DataFrame], *args, **kwargs) -> float:
total_profit = results['profit_abs'].sum()
win_rate = len(results[results['profit_abs'] > 0]) / trade_count if trade_count > 0 else 0
avg_duration = results['trade_duration'].mean() / 60 # 分钟
loss = -total_profit * win_rate * (1 / (avg_duration + 1))
return loss
def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float,
proposed_stake: float, min_stake: float, max_stake: float,
leverage: float, entry_tag: Optional[str], side: str,
**kwargs) -> float:
dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
if dataframe.empty:
return proposed_stake
atr = ta.ATR(dataframe, timeperiod=28).iloc[-1]
price_std = dataframe['close'].std()
combined_volatility = atr + price_std
base_stake = self.wallets.get_total_stake_amount() * 0.0333 # 3.33% risk
base_stake = min(base_stake, 50.0) # Cap at 50 USDT
risk_factor = 1.0
if combined_volatility > current_rate * 0.03: # High volatility
risk_factor = 0.3 if pair in ['SOL/USDT', 'OKB/USDT'] else 0.5
elif combined_volatility < current_rate * 0.01: # Low volatility
risk_factor = 1.2 if pair in ['BTC/USDT', 'ETH/USDT'] else 1.0
return base_stake * risk_factor