From 5b0aac4e9d1d359fd7109c69a5d919ef0037ad61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=96=87=E8=96=87=E5=AE=89?= Date: Tue, 5 May 2026 22:32:53 +0800 Subject: [PATCH] 1 --- config/my_batch_steady_lift_tier1.json | 23 +++++++ scripts/apply_config_patch_only.py | 89 ++++++++++++++++++++++++++ scripts/apply_steady_lift_tier1.sh | 27 ++++++++ trading_system/config.py | 6 +- 4 files changed, 142 insertions(+), 3 deletions(-) create mode 100644 config/my_batch_steady_lift_tier1.json create mode 100644 scripts/apply_config_patch_only.py create mode 100755 scripts/apply_steady_lift_tier1.sh diff --git a/config/my_batch_steady_lift_tier1.json b/config/my_batch_steady_lift_tier1.json new file mode 100644 index 0000000..a063e89 --- /dev/null +++ b/config/my_batch_steady_lift_tier1.json @@ -0,0 +1,23 @@ +[ + { + "key": "MIN_CHANGE_PERCENT", + "value": 1.0, + "type": "number", + "category": "scan", + "description": "稳妥增效一档:24h涨跌幅绝对值门槛从2%降至1%,主流币更易进入候选池" + }, + { + "key": "MIN_SIGNAL_STRENGTH", + "value": 7, + "type": "number", + "category": "strategy", + "description": "稳妥增效一档:最低信号强度 8→7,略增机会" + }, + { + "key": "ENTRY_SYMBOL_COOLDOWN_SEC", + "value": 1200, + "type": "number", + "category": "strategy", + "description": "稳妥增效一档:同币种开仓冷却 1800s→1200s(20分钟)" + } +] diff --git a/scripts/apply_config_patch_only.py b/scripts/apply_config_patch_only.py new file mode 100644 index 0000000..da6790b --- /dev/null +++ b/scripts/apply_config_patch_only.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 +""" +仅应用 JSON 补丁中的配置项,不与 DEFAULT_RECOMMENDED 合并。 +用于小幅改库,避免误把 apply_recommended_config 内置批量默认值重新刷一遍。 + +JSON 格式与 apply_recommended_config.py --from 相同(数组或对象)。 +""" +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +PROJECT_ROOT = Path(__file__).resolve().parent.parent +SCRIPTS_DIR = PROJECT_ROOT / "scripts" +BACKEND_DIR = PROJECT_ROOT / "backend" +for p in (SCRIPTS_DIR, BACKEND_DIR, PROJECT_ROOT): + if str(p) not in sys.path: + sys.path.insert(0, str(p)) + +from apply_recommended_config import infer_type, load_external_json + + +def main() -> None: + parser = argparse.ArgumentParser(description="仅应用补丁 JSON 中的全局策略配置(不合并内置默认)") + parser.add_argument("--from", dest="from_path", required=True, help="补丁 JSON 路径") + parser.add_argument("--dry-run", action="store_true", help="只打印,不落库") + parser.add_argument("--updated-by", default="apply_config_patch_only", help="写入 updated_by") + args = parser.parse_args() + + from_path = Path(args.from_path) + if not from_path.is_absolute(): + from_path = PROJECT_ROOT / from_path + if not from_path.is_file(): + raise FileNotFoundError(f"未找到配置文件: {from_path}") + + patch = load_external_json(from_path) + if not patch: + print("补丁为空,退出") + return + + print(f"将应用 {len(patch)} 个配置项(仅补丁,dry_run={args.dry_run})") + for key in sorted(patch.keys()): + meta = patch[key] + print(f" - {key} = {meta.get('value')} [{meta.get('type')}/{meta.get('category')}]") + + if args.dry_run: + return + + from database.models import GlobalStrategyConfig + + mgr = None + try: + import config_manager + + if hasattr(config_manager, "GlobalStrategyConfigManager"): + mgr = config_manager.GlobalStrategyConfigManager() + except Exception: + mgr = None + + ok, fail = 0, 0 + for key, meta in patch.items(): + try: + GlobalStrategyConfig.set( + key, + meta.get("value"), + meta.get("type") or infer_type(meta.get("value")), + meta.get("category") or "strategy", + meta.get("description"), + updated_by=args.updated_by, + ) + if mgr is not None: + try: + mgr._set_to_redis(key, meta.get("value")) + mgr._cache[key] = meta.get("value") + except Exception: + pass + ok += 1 + except Exception as e: + fail += 1 + print(f"[失败] {key}: {e}") + + print(f"\n完成:成功 {ok},失败 {fail}") + if fail > 0: + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/scripts/apply_steady_lift_tier1.sh b/scripts/apply_steady_lift_tier1.sh new file mode 100755 index 0000000..f462e10 --- /dev/null +++ b/scripts/apply_steady_lift_tier1.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +# 稳妥增效一档:写入 global_strategy_config + Redis 缓存(与前端「保存配置」同路径) +# +# 变更内容(见 config/my_batch_steady_lift_tier1.json): +# MIN_CHANGE_PERCENT 2% → 1% (24h 涨跌绝对值门槛) +# MIN_SIGNAL_STRENGTH 8 → 7 +# ENTRY_SYMBOL_COOLDOWN_SEC 1800 → 1200 +# +# 用法(在项目根目录): +# chmod +x scripts/apply_steady_lift_tier1.sh +# ./scripts/apply_steady_lift_tier1.sh +# ./scripts/apply_steady_lift_tier1.sh --dry-run +# +set -euo pipefail +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$ROOT" + +DRY_RUN=() +if [[ "${1:-}" == "--dry-run" ]]; then + DRY_RUN=(--dry-run) +fi + +# 使用 apply_config_patch_only:只写本 JSON 中的键,不合并 apply_recommended_config 内置批量默认 +exec python3 "$ROOT/scripts/apply_config_patch_only.py" \ + --from "$ROOT/config/my_batch_steady_lift_tier1.json" \ + --updated-by "steady_lift_tier1" \ + "${DRY_RUN[@]}" diff --git a/trading_system/config.py b/trading_system/config.py index ee40f70..09040fa 100644 --- a/trading_system/config.py +++ b/trading_system/config.py @@ -216,7 +216,7 @@ DEFAULT_TRADING_CONFIG = { 'MAX_TOTAL_POSITION_PERCENT': 0.80, # 总仓位80%(避免满仓,留有余地) 'MIN_POSITION_PERCENT': 0.01, # 最小仓位1% 'MIN_MARGIN_USDT': 2.0, # 最小保证金2美元(降低门槛,允许高杠杆小资金交易,避免被 risk_manager 拦截) - 'MIN_CHANGE_PERCENT': 0.5, # 最小价格变动0.5% + 'MIN_CHANGE_PERCENT': 1.0, # 最小24h涨跌幅绝对值(%);与稳妥增效一档对齐,缺省略宽于0.5以利主流币入池 'TOP_N_SYMBOLS': 8, # 主流币模式:缩小候选池,提高信号质量 'SCAN_EXTRA_SYMBOLS_FOR_SUPPLEMENT': 20, # 智能补单候选增加 'MAX_SCAN_SYMBOLS': 120, # 主流币模式:减少扫描面,降低噪声与计算负载 @@ -267,7 +267,7 @@ DEFAULT_TRADING_CONFIG = { 'MIN_VOLUME_24H': 30000000, # 24小时成交额≥3000万美元,过滤垃圾币 'MIN_VOLUME_24H_STRICT': 50000000, # 严格过滤≥5000万美元 'MIN_VOLATILITY': 0.03, # 最小波动率3%,过滤死币 - 'MIN_SIGNAL_STRENGTH': 8, # 主流币模式:提高信号门槛,减少低质量入场 + 'MIN_SIGNAL_STRENGTH': 7, # 稳妥增效一档:略降门槛以增加机会(原为8) # ===== 资金费率过滤(开仓前)===== 'FUNDING_RATE_FILTER_ENABLED': True, # 开仓前检查资金费率,避免在费率极端不利于己方时进场 'MAX_FUNDING_RATE_FOR_LONG': 0.001, # 做多时 lastFundingRate 超过此值则跳过(0.1%=多头付费高) @@ -393,7 +393,7 @@ DEFAULT_TRADING_CONFIG = { # 根治方案:默认关闭。关闭后回归“纯限价单模式”(不追价/不市价兜底/未成交撤单跳过) 'SMART_ENTRY_ENABLED': True, # 开启智能入场,提高成交率 'SMART_ENTRY_STRONG_SIGNAL': 7, # 强信号阈值(与 MIN_SIGNAL_STRENGTH 一致,便于智能入场触发) - 'ENTRY_SYMBOL_COOLDOWN_SEC': 1800, # 同一币种冷却30分钟(1800秒),快速验证模式:缩短冷却以增加交易频率 + 'ENTRY_SYMBOL_COOLDOWN_SEC': 1200, # 稳妥增效一档:同一币种冷却20分钟(1200秒) # ===== 同一交易对连续亏损过滤(避免连续亏损后继续交易)===== 'SYMBOL_LOSS_COOLDOWN_ENABLED': True, # 是否启用同一交易对连续亏损后的冷却