Files
trading_bot_v4/cluster/v11_results/analyze_v11.awk
mindesbunister a669058636 docs: V11 progressive sweep results - 1,024 configs complete
SWEEP COMPLETED: 33.2 minutes, 4 workers, ALL 1,024 configs tested

KEY FINDINGS:
 NO zero-signal configs (flip_threshold fix successful)
 Top strategy: 1.97 PF, 74.7% WR, $2,416 PnL (766 trades)
 5× better P&L than v9 baseline ($405 → $2,416)
 96% less drawdown than v9 (-$1,360 → -$55)

CRITICAL ANOMALY DISCOVERED:
 flip_threshold=0.35/0.40 generating 3-4× FEWER signals than expected
  - flip=0.30: 1,271 avg signals (Worker1) ✓
  - flip=0.35: 304 avg signals (Worker2) ⚠️
  - flip=0.40: 276 avg signals (Worker2) ⚠️
  - flip=0.45: 920 avg signals (Worker1) ✓

Expected: 0.30 > 0.35 > 0.40 > 0.45 (linear decrease)
Actual: 0.30 (1,271) > 0.45 (920) > 0.35 (304) > 0.40 (276)

Possible causes:
1. Indicator bug in mid-range flip detection
2. Worker2 deployment issue (stale code?)
3. Dataset artifact (2024 SOL specific pattern)

OPTIMAL PRODUCTION CONFIG:
- flip_threshold=0.45 (all top 10 use this)
- adx_min=15 (strictest filter, all top 10)
- long_pos_max=95, short_pos_min=5 (permissive)
- vol_min=0.0 (no volume filter)
- RSI parameters DON'T MATTER (identical results)

ADX FILTER VALIDATION:
 adx=0: 1,162 signals (most, as expected)
 adx=5: 582 signals (50% reduction)
 adx=10: 572 signals (similar to adx=5)
 adx=15: 455 signals (least, as expected)

NEXT STEPS:
1. Investigate flip=0.35/0.40 anomaly (re-run on Worker1)
2. Forward test flip=0.45, adx=15 config on 2025 data
3. Deploy to production if validation passes

Files:
- cluster/V11_SWEEP_RESULTS.md (comprehensive analysis)
- cluster/v11_results/*.csv (local copies of all 4 chunks)
2025-12-07 00:34:49 +01:00

66 lines
1.9 KiB
Awk

BEGIN {
FS=","
print "============================================================"
print "V11 PROGRESSIVE SWEEP RESULTS - 1,024 CONFIGURATIONS"
print "============================================================"
}
NR==1 {next} # Skip header
{
flip=$1; adx=$2; trades=$13; pf=$11; wr=$10; pnl=$9
# Track by flip_threshold
flip_sum[flip]+=trades
flip_cnt[flip]++
if(trades==0) flip_zero[flip]++
if(flip_min[flip]=="" || trades<flip_min[flip]) flip_min[flip]=trades
if(trades>flip_max[flip]) flip_max[flip]=trades
# Track by adx
adx_sum[adx]+=trades
adx_cnt[adx]++
if(adx_min[adx]=="" || trades<adx_min[adx]) adx_min[adx]=trades
if(trades>adx_max[adx]) adx_max[adx]=trades
# Track best configs
if(pf>best_pf) {
best_pf=pf; best_pf_line=$0
}
if(wr>best_wr && trades>50) {
best_wr=wr; best_wr_line=$0
}
if(pnl>best_pnl) {
best_pnl=pnl; best_pnl_line=$0
}
total++
}
END {
print "\nTOTAL CONFIGS TESTED:", total
print "\n" "=" x 60
print "SIGNAL DISTRIBUTION BY FLIP_THRESHOLD"
print "=" x 60
for(f in flip_sum | "sort -n") {
printf "\nflip=%.2f: %d configs, avg=%.0f, min=%d, max=%d", f, flip_cnt[f], flip_sum[f]/flip_cnt[f], flip_min[f], flip_max[f]
if(flip_zero[f]>0) printf ", ZEROS=%d ⚠️", flip_zero[f]
print ""
}
print "\n" "=" x 60
print "SIGNAL DISTRIBUTION BY ADX_MIN"
print "=" x 60
for(a in adx_sum | "sort -n") {
printf "\nadx=%d: %d configs, avg=%.0f, min=%d, max=%d\n", a, adx_cnt[a], adx_sum[a]/adx_cnt[a], adx_min[a], adx_max[a]
}
print "\n" "=" x 60
print "TOP CONFIGURATIONS"
print "=" x 60
print "\nBEST PROFIT FACTOR:", best_pf
print best_pf_line
print "\nBEST WIN RATE (trades>50):", best_wr "%"
print best_wr_line
print "\nBEST P&L:", best_pnl
print best_pnl_line
}