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:
@@ -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)
|
||||
Reference in New Issue
Block a user