- 新增 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 文档中心(策略研究章节)
53 lines
2.1 KiB
Python
53 lines
2.1 KiB
Python
#!/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)
|