Add analyze.sh: diagnostic script for signals.csv

Outputs: file info, time span, recommendation breakdown, max edges,
phase distribution, max model probabilities per phase, would-be ENTER
breakdown by regime, recent rows, and PM2 error tails.

Use when no pushes arrive to distinguish 'no signals' from 'signals
being swallowed' — see DEPLOYMENT.md pitfall #7.
This commit is contained in:
2026-07-22 02:21:11 +08:00
parent 3c3899a115
commit 9c713ad3f6
+71
View File
@@ -0,0 +1,71 @@
CSV=/opt/PolymarketBTC15mAssistant/logs/signals.csv
echo "=== File info ==="
wc -l $CSV
ls -la $CSV
echo ""
echo "=== Time span ==="
head -2 $CSV | tail -1 | awk -F, '{print "first:", $1}'
tail -1 $CSV | awk -F, '{print "last :", $1}'
echo ""
echo "=== Recommendation breakdown ==="
awk -F, 'NR>1{print $12}' $CSV | sort | uniq -c | sort -rn
echo ""
echo "=== Max edges seen ==="
awk -F, 'NR>1 && $10+0 > maxu {maxu=$10+0} END{printf "max edge_up: %.4f\n", maxu}' $CSV
awk -F, 'NR>1 && $11+0 > maxd {maxd=$11+0} END{printf "max edge_down: %.4f\n", maxd}' $CSV
echo ""
echo "=== Phase distribution ==="
awk -F, 'NR>1{
t=$3+0;
if (t >= 10) p="EARLY";
else if (t >= 5) p="MID";
else p="LATE";
print p
}' $CSV | sort | uniq -c
echo ""
echo "=== Max model_up/down at each phase ==="
awk -F, 'NR>1{
mu=$6+0; md=$7+0; t=$3+0;
if (t >= 10) p="EARLY"; else if (t >= 5) p="MID"; else p="LATE";
if (mu > m[p"_u"]) m[p"_u"]=mu;
if (md > m[p"_d"]) m[p"_d"]=md;
} END{for (k in m) printf " %-6s model_up=%.3f model_down=%.3f\n", k, m[k], 1-m[k]}' $CSV
echo ""
echo "=== TREND_UP rows: would-be ENTER breakdown ==="
awk -F, 'NR>1 && $4 == "TREND_UP" && $10+0 > 0{
e=$10+0; mu=$6+0;
if (e >= 0.05 && mu >= 0.55) bucket="BOTH met (would ENTER)";
else if (e >= 0.05) bucket="edge ok, model low";
else if (mu >= 0.55) bucket="model ok, edge low";
else bucket="both low";
cnt[bucket]++
} END{for (k in cnt) printf " %-30s %d\n", k, cnt[k]}' $CSV
echo ""
echo "=== TREND_DOWN rows ==="
awk -F, 'NR>1 && $4 == "TREND_DOWN" && $11+0 > 0{
e=$11+0; md=$7+0;
if (e >= 0.05 && md >= 0.55) bucket="BOTH met (would ENTER)";
else if (e >= 0.05) bucket="edge ok, model low";
else if (md >= 0.55) bucket="model ok, edge low";
else bucket="both low";
cnt[bucket]++
} END{for (k in cnt) printf " %-30s %d\n", k, cnt[k]}' $CSV
echo ""
echo "=== Recent 5 rows ==="
tail -5 $CSV
echo ""
echo "=== PM2 errors (last 20 each) ==="
echo "--- watcher ---"
tail -20 /opt/PolymarketBTC15mAssistant/logs/pm2-watcher.err.log 2>/dev/null
echo "--- bot ---"
tail -20 /opt/PolymarketBTC15mAssistant/logs/pm2-bot.err.log 2>/dev/null