docs: 预测超跌反弹策略研究成果归档(方法论/策略文档/研究记录/脚本)

- 新增 strategy_research_methodology.md(由果及因/12维/铁律/支撑压力规范)
- 新增 predictive_oversold_strategy.md(v5定稿,年化18.57%)
- 新增 deployment-plan-predictive-oversold.md(整合部署计划)
- 归档 docs/research/(63份研究过程文档)+ scripts/research/(19个研究脚本)
- 更新 docs/README.md 文档中心(策略研究章节)
This commit is contained in:
hmo
2026-08-10 14:37:21 +08:00
parent 79980ce991
commit b9c68a83a7
88 changed files with 6923 additions and 0 deletions
+52
View File
@@ -0,0 +1,52 @@
#!/usr/bin/env python3
# step48_predict_dd.py - 阴跌中段判定测试
import numpy as np
import pandas as pd
print("=== 加载 ===", flush=True)
tr = pd.read_csv("/tmp/step43_trades.csv")
print("交易:", len(tr), flush=True)
print("全量: avg={:.2f}% wr={:.1f}% 大亏率={:.1f}%".format(
tr["ret"].mean(), (tr["ret"]>0).mean()*100, (tr["ret"]<-10).mean()*100), flush=True)
def evaluate(cond, label):
sub = tr[cond]
if len(sub) < 50:
print("{}: n={} 不足".format(label, len(sub)), flush=True)
return
avg = sub["ret"].mean()
wr = (sub["ret"]>0).mean()*100
big_loss = (sub["ret"]<-10).mean()*100
print("{}: n={} avg={:.2f}% wr={:.1f}% 大亏率={:.1f}%".format(
label, len(sub), avg, wr, big_loss), flush=True)
print("\n=== 单特征阈值扫描 ===", flush=True)
print("\n-- mkt_down_days >= N --", flush=True)
for t in [2, 3, 4]:
evaluate(tr["mkt_down_days"] >= t, "连跌>={}(阴跌)".format(t))
print("\n-- sig_mkt_adx <= N --", flush=True)
for t in [40, 45, 50, 55]:
evaluate(tr["sig_mkt_adx"] <= t, "adx<={}(弱趋势)".format(t))
print("\n-- mkt_news5 <= N --", flush=True)
for t in [1000, 1500, 2000]:
evaluate(tr["mkt_news5"] <= t, "news<={}(冷清)".format(t))
print("\n=== 组合:阴跌中段判定 ===", flush=True)
yin_die = (tr["mkt_down_days"] >= 2) & (tr["sig_mkt_adx"] <= 50)
print("阴跌判定(连跌>=2+adx<=50) 命中:", yin_die.sum(), flush=True)
evaluate(~yin_die, "保留(非阴跌)")
evaluate(yin_die, "跳过(阴跌)")
yin_die2 = (tr["mkt_down_days"] >= 2) & (tr["sig_mkt_adx"] <= 50) & (tr["mkt_news5"] <= 2000)
print("阴跌判定2(+news<=2000) 命中:", yin_die2.sum(), flush=True)
evaluate(~yin_die2, "保留(非阴跌2")
evaluate(yin_die2, "跳过(阴跌2")
yin_die3 = (tr["mkt_down_days"] >= 2) & (tr["sig_mkt_adx"] <= 55) & (tr["sig_mkt_rsi"] >= 33)
print("阴跌判定3(连跌>=2+adx<=55+rsi>=33) 命中:", yin_die3.sum(), flush=True)
evaluate(~yin_die3, "保留(非阴跌3")
evaluate(yin_die3, "跳过(阴跌3")
print("\n=== 完成 ===", flush=True)