#!/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)