mirror of
https://github.com/xavierchuan/FX-ML-Trading-Engine.git
synced 2026-07-27 18:17:44 +00:00
56 lines
1.8 KiB
Bash
56 lines
1.8 KiB
Bash
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
cd "$(dirname "$0")/.."
|
||
|
||
RUN_ID=${RUN:-$(date +"risk_%Y%m%d_%H%M%S")}
|
||
RISK_LOG="results/risk/events.jsonl"
|
||
|
||
# 每次运行前清理旧的风险事件,避免历史数据干扰统计
|
||
mkdir -p "$(dirname "$RISK_LOG")"
|
||
: > "$RISK_LOG"
|
||
|
||
# 自动发现 trades.csv(优先使用显式 TRADES,未设置则读取 summary.json 中的 artifacts.trades)
|
||
if [ -z "${TRADES:-}" ]; then
|
||
SUMMARY="results/${RUN_ID}/summary.json"
|
||
if [ -f "$SUMMARY" ]; then
|
||
TRADES=$(python - <<'PY' "$SUMMARY"
|
||
import json, sys
|
||
with open(sys.argv[1], encoding="utf-8") as fh:
|
||
summary = json.load(fh)
|
||
print(summary.get("artifacts", {}).get("trades", ""))
|
||
PY
|
||
)
|
||
fi
|
||
fi
|
||
|
||
# 如果 summary 中给的是相对路径,补全为绝对路径
|
||
if [ -n "${TRADES:-}" ] && [ ! -f "$TRADES" ] && [ -f "$PWD/$TRADES" ]; then
|
||
TRADES="$PWD/$TRADES"
|
||
fi
|
||
|
||
if [ -z "${TRADES:-}" ] || [ ! -f "$TRADES" ]; then
|
||
echo "Trades CSV not found. Provide TRADES env or ensure results/${RUN_ID}/summary.json.artifacts.trades 指向有效文件。" >&2
|
||
exit 1
|
||
fi
|
||
|
||
python scripts/simulate_execution.py --trades-csv "$TRADES" \
|
||
--risk-limits-yaml ../QuantTrader/config/risk_limits_sim.yaml \
|
||
--adapter paper \
|
||
--paper-latency-ms 25 \
|
||
--paper-slippage-pips 0.05 \
|
||
--run-id "$RUN_ID" \
|
||
--risk-log "$RISK_LOG"
|
||
python scripts/risk_report.py --log "$RISK_LOG" --out results/risk/report.csv --run-id "$RUN_ID" --skip-metrics
|
||
if python scripts/check_risk_report.py --report results/risk/report.csv --max-rejects 0 --max-kill 0; then
|
||
STATUS="pass"
|
||
else
|
||
STATUS="fail"
|
||
fi
|
||
python scripts/risk_report.py --log "$RISK_LOG" --out results/risk/report.csv --run-id "$RUN_ID" --status "$STATUS" --skip-report
|
||
if [ -s "$RISK_LOG" ]; then
|
||
cp "$RISK_LOG" "results/risk/events_${RUN_ID}.jsonl"
|
||
fi
|
||
if [ "$STATUS" != "pass" ]; then
|
||
exit 1
|
||
fi
|