-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.py
More file actions
126 lines (115 loc) · 6.14 KB
/
Copy pathconfig.py
File metadata and controls
126 lines (115 loc) · 6.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import os
# ── 市场配置 ──────────────────────────────────────────
# MVP 阶段:只锁定美股。美股的研究资料、示例 alpha、字段覆盖度都最齐全,
# 先把单市场闭环跑通再考虑扩展。未来要加 CHN / EUR / ASI 等,只需在此
# 字典新增对应条目,pipeline / agents / prompts 的 `market` 参数已经是
# per-market 的,不用改动。
MARKET_CONFIGS = {
"USA": {
"region": "USA",
"instrumentType": "EQUITY",
"universe": "TOP3000",
"delay": 1,
"default_neutralization": "INDUSTRY",
},
}
# MVP 默认市场,main.py 和脚本类入口从这里取。扩展多市场时,此常量作为"默认",
# 配合交互菜单或 CLI 参数覆盖。
DEFAULT_MARKET = "USA"
# USA + delay=1 可用的股票池档位(平台 UI 原生选项)。
# MVP 单值运行 → MARKET_CONFIGS["USA"]["universe"];
# 如果做 Universe 扫描实验,从这里取候选,禁止把 Universe 交给 Agent 2 迭代选
# (会让 Agent 靠缩小股票池偷 Sharpe,混淆"改进信号"与"换池子"的信号)。
UNIVERSE_OPTIONS = ["TOP3000", "TOP1000", "TOP500", "TOP200", "TOPSP500"]
# ── 评估标准(Phase A)────────────────────────────────
PERFORMANCE_CRITERIA = {
"sharpe_min": 1.25,
"fitness_min": 1.0,
"turnover_min": 0.01, # 1%
"turnover_max": 0.70, # 70%
}
# ── 迭代控制 ──────────────────────────────────────────
MAX_ITER = 8 # 最大迭代轮数
# ── 回测轮询控制 ───────────────────────────────────────
# WQ 正常回测 2-5 分钟,慢 alpha 5-10 分钟。服务端自身会在约 15-20 分钟后
# 把长跑 simulation 标记为 ERROR("running too long"),我们更早放弃以:
# - 让 Agent 2 尽快拿到"该表达式病态"的反馈信号;
# - 避免 8 轮 × 20 分钟 = 近 3 小时的无聊等待。
# SIMULATION_HEARTBEAT_SEC:progress 日志最小间隔(太密刷屏,太疏像卡死)。
SIMULATION_SOFT_TIMEOUT_SEC = 600 # 10 分钟软超时,触发后 DELETE + 抛异常
SIMULATION_HEARTBEAT_SEC = 30 # 每 30 秒打一行 progress 心跳
# ── 模型 ──────────────────────────────────────────────
LLM_MODEL = os.environ.get("LLM_MODEL", "anthropic/claude-haiku-4-5")
OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1"
# ── WQ Brain API ──────────────────────────────────────
WQ_BASE_URL = "https://api.worldquantbrain.com"
# ── 固定回测参数(不由 Agent 决定)───────────────────
# 说明:
# - pasteurization 基本只在 debug 时关;长期 ON 安全
# - maxTrade=OFF:研究阶段不用风控开关,避免 Agent 靠开关"刷"Sharpe。
# WQ UI 还有 "Max Position" 开关,API 字段名未确认,暂不加;
# 默认服务端应为 OFF,跑出来指标异常时再补。
# - nanHandling 不在这里:它随策略模式变化(见 settings_patterns.txt 模式 D),
# 交给 Agent 2 每轮决定。
FIXED_SETTINGS = {
"instrumentType": "EQUITY",
"pasteurization": "ON",
"unitHandling": "VERIFY",
"maxTrade": "OFF",
"language": "FASTEXPR",
"visualization": False,
"testPeriod": "P5Y0M0D", # 5年回测区间
}
# ── Agent 可决定的回测参数范围 ────────────────────────
# decay 说明:工作区 0~20,降换手可到 30。
# - 0~8: 快信号(价量 / 新闻 / 情绪 / 短期反转)
# - 10~20: 大多数基本面 / 分析师 / 模型类
# - 20~30: Turnover 下不来且字段确为季度/年度更新时使用
# - 30+: 默认禁用。decay 过大只是把噪音平掉,Sharpe 虚高 OOS 衰减;
# 而且 Turnover<12.5% 后降换手对 Fitness 零贡献(见 iteration_strategy.txt)。
# neutralization 完整列表来自 AlphaGen/neutralizations.json (Jan 2026 验证)
# nanHandling:大多数策略 OFF(WQ 服务端默认);
# 仅在 ts_zscore/高换手模式下开 ON(参考 settings_patterns.txt 模式 D)。
AGENT_SETTINGS_OPTIONS = {
"decay": [0, 1, 2, 4, 8, 13, 20, 30],
"neutralization": [
"MARKET", "SECTOR", "INDUSTRY", "SUBINDUSTRY",
"NONE", "SLOW", "FAST", "SLOW_AND_FAST",
"REVERSION_AND_MOMENTUM", "CROWDING",
],
"truncation": [0.01, 0.02, 0.03, 0.04, 0.08],
"nanHandling": ["OFF", "ON"],
}
# ── 预设策略大方向(L3 因子族粒度)──────────────────
# 每个方向对应一组"经济逻辑 + 默认数据类别建议"。
# Agent 1 会在该方向内选择具体异象、做理论研究、确认字段。
DIRECTIONS = {
"value": {
"desc": "价格偏离内在价值:用基本面锚定合理价格,买低估卖高估",
"default_categories": ["fundamental"],
},
"quality": {
"desc": "高质量公司长期跑赢:盈利稳定性、资产质量、应计项目",
"default_categories": ["fundamental", "earnings"],
},
"momentum": {
"desc": "趋势延续:过去涨幅大/技术形态强的股票继续跑赢",
"default_categories": ["pv"],
},
"reversal": {
"desc": "短期超跌反弹:过度反应后的均值回归",
"default_categories": ["pv", "sentiment"],
},
"analyst": {
"desc": "分析师预期修正:盈利上调/目标价上调的超额收益",
"default_categories": ["analyst", "earnings"],
},
"sentiment": {
"desc": "市场情绪 / 新闻:信息冲击驱动的短期信号",
"default_categories": ["news", "socialmedia", "sentiment"],
},
"short_interest": {
"desc": "空头博弈:空头持仓变化揭示的信息优势",
"default_categories": ["shortinterest"],
},
}