Skip to content

Instantly share code, notes, and snippets.

@yongkangc
Last active March 3, 2026 15:06
Show Gist options
  • Select an option

  • Save yongkangc/d5916741960344f7255b83d3ebac3ece to your computer and use it in GitHub Desktop.

Select an option

Save yongkangc/d5916741960344f7255b83d3ebac3ece to your computer and use it in GitHub Desktop.
CexLead Fine Sweep v2 — ETH 15m — realistic execution (spread + tick size)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CexLead Sweep v2 — ETH 15m — Realistic Execution</title>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<style>
* { box-sizing: border-box; }
body {
background: #0d1117;
color: #c9d1d9;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
margin: 0;
padding: 20px;
max-width: 1400px;
margin: 0 auto;
}
h1 { color: #58a6ff; margin-bottom: 5px; }
h2 { color: #58a6ff; margin-top: 40px; border-bottom: 1px solid #30363d; padding-bottom: 8px; }
.subtitle { color: #8b949e; font-size: 14px; margin-bottom: 30px; }
.chart { height: 500px; }
.chart-3d { height: 650px; }
table {
border-collapse: collapse;
width: 100%;
font-size: 12px;
margin-top: 10px;
}
th, td {
border: 1px solid #30363d;
padding: 5px 8px;
text-align: right;
white-space: nowrap;
}
th {
background: #161b22;
color: #58a6ff;
position: sticky;
top: 0;
z-index: 10;
}
tr:nth-child(even) { background: rgba(22,27,34,0.5); }
tr:hover { background: #1c2128; }
.positive { color: #3fb950; }
.negative { color: #f85149; }
.box {
background: #161b22;
border: 1px solid #30363d;
border-radius: 6px;
padding: 20px;
margin: 20px 0;
}
.box h3 { color: #58a6ff; margin-top: 0; }
.metrics { display: flex; flex-wrap: wrap; gap: 20px; justify-content: center; }
.metric { text-align: center; min-width: 120px; }
.metric .val { font-size: 22px; font-weight: bold; }
.metric .val.green { color: #3fb950; }
.metric .val.blue { color: #58a6ff; }
.metric .val.yellow { color: #d29922; }
.metric .lbl { font-size: 11px; color: #8b949e; margin-top: 2px; }
.grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
@media (max-width: 900px) { .grid { grid-template-columns: 1fr; } }
.note { color: #8b949e; font-size: 13px; margin-top: 10px; }
</style>
</head>
<body>
<h1>⚡ CexLead Signal Sweep v2 — ETH 15m</h1>
<div class="subtitle">
Realistic execution: entry at best_ask (taker), exit at best_bid (5s later) · 1¢ tick size · $5 trade size<br>
Train: Feb 26–27 · Test: Feb 28–Mar 1 · 192 markets per split (96/day)
</div>
<div class="box">
<h3>🏆 Key Findings</h3>
<div class="metrics">
<div class="metric">
<div class="val green">96.4%</div>
<div class="lbl">Train→Test Avg P&L<br>Correlation</div>
</div>
<div class="metric">
<div class="val green">72.1%</div>
<div class="lbl">Win Rate @ 3bps/d≤0.20<br>(test)</div>
</div>
<div class="metric">
<div class="val blue">$0.20</div>
<div class="lbl">Avg P&L/Trade<br>@ 3bps/d≤0.20</div>
</div>
<div class="metric">
<div class="val blue">450/day</div>
<div class="lbl">Trade Frequency<br>@ 3bps/d≤0.20</div>
</div>
<div class="metric">
<div class="val yellow">6.7%</div>
<div class="lbl">Flat Rate ($0 P&L)<br>@ 3bps/d≤0.20</div>
</div>
<div class="metric">
<div class="val green">$177.90</div>
<div class="lbl">2-Day Test P&L<br>@ 3bps/d≤0.20</div>
</div>
</div>
<p class="note">
<strong>Edge survives spread cost.</strong> Even with taker execution (pay the spread), the signal is profitable across all thresholds 1–8 bps.
Low thresholds (1–2 bps) generate huge volume (~1000+ trades/day) with thin per-trade edge (~$0.07–0.13) and high flat rates (~12%).
High thresholds (6–8 bps) yield exceptional per-trade edge ($0.33–0.49, win rate ~80%) but only 50–130 trades/day.
<strong>Sweet spot: 3–5 bps with d≤0.20</strong> — balanced signal quality (72–81% win rate, $0.20–0.33 avg P&L) with decent frequency (144–450 trades/day).
</p>
<p class="note">
⚠️ <strong>Sharpe caveat:</strong> Only 2 daily observations per split → Sharpe ratios are unreliable (std of n=2). Use win rate, avg P&L, and total P&L for comparison instead.
</p>
</div>
<h2>📊 3D Surface — Test Sharpe (daily, √365)</h2>
<div id="surface3d" class="chart-3d"></div>
<div class="grid">
<div>
<h2>✅ Test Win Rate (%)</h2>
<div id="hm_winrate" class="chart"></div>
</div>
<div>
<h2>💰 Test Total P&L ($)</h2>
<div id="hm_pnl" class="chart"></div>
</div>
</div>
<div class="grid">
<div>
<h2>💵 Test Avg P&L per Trade ($)</h2>
<div id="hm_avgpnl" class="chart"></div>
</div>
<div>
<h2>📈 Test Trades/Day</h2>
<div id="hm_tpd" class="chart"></div>
</div>
</div>
<div class="grid">
<div>
<h2>⏸️ Test Flat Rate (%)</h2>
<div id="hm_flatrate" class="chart"></div>
</div>
<div>
<h2>📐 Test Sharpe (daily, √365)</h2>
<div id="hm_sharpe" class="chart"></div>
</div>
</div>
<h2>📋 Full Results — Test Set (with Train comparison)</h2>
<div style="max-height: 700px; overflow-y: auto;">
<table>
<thead>
<tr>
<th>Thresh (bps)</th><th>Dist</th>
<th>Trades</th><th>T/Day</th>
<th>Win%</th><th>Lose%</th><th>Flat%</th>
<th>Avg P&L</th><th>Total P&L</th><th>Sharpe</th>
<th style="border-left:2px solid #58a6ff">Train Win%</th><th>Train Avg</th><th>Train P&L</th>
</tr>
</thead>
<tbody id="tbody"></tbody>
</table>
</div>
<script>
const thresholds = [1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0];
const distances = [0.1, 0.15, 0.2, 0.25, 0.3, 0.4, 0.5];
const dLbl = distances.map(d => d.toFixed(2));
const tLbl = thresholds.map(t => t.toFixed(1));
const dark = {
paper_bgcolor: '#0d1117',
plot_bgcolor: '#0d1117',
font: { color: '#c9d1d9', size: 11 },
margin: { l: 70, r: 20, t: 40, b: 60 },
};
const axes = {
xaxis: { title: 'Distance Filter', tickvals: distances, ticktext: dLbl, gridcolor: '#21262d' },
yaxis: { title: 'CEX Threshold (bps)', tickvals: thresholds, ticktext: tLbl, gridcolor: '#21262d' },
};
// 3D Surface — Sharpe
const sharpeZ = [[302.68271225549705, 227.07353688549085, 278.4750782464173, 229.8601836541388, 305.2853829005092, 341.55177780818366, 212.657710617352], [120.90048975178416, 112.60695953465826, 119.88691220266794, 114.25874445779851, 128.04451697709143, 127.34781239218742, 105.59426190734882], [71.59901161674442, 83.07768638020895, 87.61121392406262, 86.24917380986437, 100.34187815047127, 100.03452814531, 89.64308578955061], [64.58767651540158, 73.57908510922096, 86.611876295469, 77.94341527987343, 91.88431588916424, 88.69141471676862, 81.57643066700938], [58.75562241875785, 66.86740611089976, 80.53968549173356, 79.7294156102967, 94.8873693747105, 92.29120892780024, 89.2072178026181], [57.75836184102589, 64.01937515977323, 71.82191331124777, 71.59787071482008, 91.56576299798944, 91.9082865886444, 92.70371891100127], [63.848226412332096, 64.62071298800515, 71.5352626429552, 79.80990857095796, 86.97116474630994, 82.82917094429325, 84.25121053097928], [63.21081628965938, 62.88720336620339, 72.3693683502116, 73.48509260208175, 85.28793320598069, 81.64353093323601, 85.51873338238346], [58.40663227645938, 52.38690775150333, 64.01362210361121, 61.16992894757173, 67.90664831786079, 66.41252579722014, 69.47036529830487], [69.82614089456793, 55.63438947586769, 70.92995787790029, 63.31539846292527, 73.23573050241404, 63.18530908617654, 63.56745619893333], [70.91109675213738, 53.24775436602261, 63.26316974683694, 56.216481640903154, 68.44894362534873, 57.31491952362843, 59.079391568411005], [60.16968563016929, 43.59852852652074, 53.18411451291644, 49.32841434410644, 57.71797802942048, 48.62560943520687, 48.51964223900655], [116.51342795178908, 54.0941577624028, 69.12791820407094, 54.51147237301618, 61.5720059375211, 48.75534372858237, 46.59749554766535], [137.71501496649603, 66.65030414300722, 91.92863562809416, 63.311370957974, 70.23287291566804, 52.75001442882615, 51.78453255205022], [224.0492308650929, 113.69788913630344, 254.47824268490984, 101.2157089459822, 118.89066040273048, 66.99477259873011, 63.90705084264]];
Plotly.newPlot('surface3d', [{
type: 'surface',
x: distances, y: thresholds,
z: sharpeZ,
colorscale: 'Viridis',
colorbar: { title: 'Sharpe', tickformat: '.0f' },
hovertemplate: 'Dist: %{x}<br>Thresh: %{y} bps<br>Sharpe: %{z:.1f}<extra></extra>',
}], {
...dark,
scene: {
xaxis: { title: 'Distance Filter', color: '#c9d1d9', gridcolor: '#21262d' },
yaxis: { title: 'Threshold (bps)', color: '#c9d1d9', gridcolor: '#21262d' },
zaxis: { title: 'Sharpe (daily, √365)', color: '#c9d1d9', gridcolor: '#21262d' },
bgcolor: '#0d1117',
camera: { eye: { x: 1.5, y: -1.5, z: 0.8 } }
},
margin: { l: 0, r: 0, t: 30, b: 0 },
});
function hm(id, z, title, cs, fmt) {
Plotly.newPlot(id, [{
type: 'heatmap', x: distances, y: thresholds, z: z,
colorscale: cs || 'Viridis',
text: z.map(r => r.map(fmt || (v => v.toFixed(1)))),
texttemplate: '%{text}', textfont: { size: 10 },
hovertemplate: 'Dist: %{x}<br>Thresh: %{y} bps<br>%{z:.2f}<extra></extra>',
}], { ...dark, ...axes });
}
hm('hm_winrate', [[57.462216624685134, 58.118899733806565, 57.396551724137936, 56.6955266955267, 56.35932033983009, 53.47402910282355, 43.323832492874374], [62.23003515821195, 62.402551381998585, 61.4222954420648, 60.88737201365188, 60.568945080995654, 57.83621337340345, 46.01172696094701], [67.21991701244814, 66.45161290322581, 65.86690810321413, 65.51465063861758, 65.05167958656331, 61.012842258299, 47.292418772563174], [70.99023709902372, 69.37984496124031, 68.92988929889299, 68.26273787599754, 67.75039328788674, 64.04016994978757, 48.04102024717328], [75.43859649122807, 73.40116279069767, 72.14206437291898, 72.08448117539027, 70.99296325254105, 66.74195369847544, 49.30944382232176], [81.15015974440894, 77.77777777777779, 76.14533965244867, 76.38709677419355, 74.83731019522777, 70.44917257683215, 51.27681307456589], [81.14035087719299, 78.27298050139275, 76.37130801687763, 76.96245733788396, 76.33477633477634, 73.31932773109243, 52.396804260985355], [83.79888268156425, 81.72043010752688, 79.24528301886792, 79.10112359550561, 78.78787878787878, 75.17146776406035, 53.06122448979592], [83.80281690140845, 82.48847926267281, 80.90277777777779, 79.76539589442815, 78.76543209876543, 75.17482517482517, 52.48152059134108], [85.59322033898306, 83.88888888888889, 81.74273858921161, 80.91872791519434, 79.40298507462687, 76.28205128205127, 53.16129032258065], [83.33333333333334, 82.51748251748252, 80.74866310160428, 78.82882882882883, 77.98507462686567, 75.26041666666666, 52.119309262166404], [82.66666666666667, 81.66666666666667, 80.37974683544303, 78.57142857142857, 78.44036697247707, 74.50980392156863, 49.904761904761905], [84.48275862068965, 81.72043010752688, 79.36507936507937, 77.02702702702703, 77.52808988764045, 74.40944881889764, 49.43310657596372], [84.61538461538461, 81.81818181818183, 82.41758241758241, 79.27927927927928, 78.98550724637681, 75.87939698492463, 50.287356321839084], [81.48148148148148, 79.16666666666666, 80.88235294117648, 79.51807228915662, 80.0, 76.77419354838709, 50.92250922509225]], '', 'RdYlGn', v => v.toFixed(1)+'%');
hm('hm_pnl', [[242.40000000000003, 358.35, 450.4, 516.75, 580.85, 635.55, 543.7499999999999], [206.3, 300.6, 374.0, 446.45, 497.3, 568.25, 510.7], [160.40000000000003, 229.6, 296.70000000000005, 350.54999999999995, 399.9500000000001, 450.3, 414.55], [115.45000000000002, 169.65, 216.7, 255.8, 290.25, 340.05, 316.4], [93.8, 142.10000000000002, 177.89999999999998, 212.0, 238.15, 279.70000000000005, 264.04999999999995], [78.15, 117.45, 146.05, 175.95, 198.9, 233.8, 223.45], [64.5, 99.95, 123.75, 151.85, 169.8, 202.25, 195.8], [55.75, 86.89999999999999, 107.2, 127.7, 143.3, 168.8, 164.95], [48.15, 73.35, 93.65, 107.89999999999998, 119.25, 142.35, 139.45], [41.30000000000001, 62.900000000000006, 80.75, 91.79999999999998, 101.2, 120.55, 118.94999999999996], [30.25, 49.74999999999999, 62.75, 71.65, 81.14999999999999, 98.1, 97.1], [27.4, 44.49999999999999, 56.64999999999999, 62.99999999999999, 71.6, 84.5, 83.3], [21.65, 36.95000000000001, 47.40000000000001, 52.5, 59.3, 71.19999999999999, 70.0], [17.3, 30.7, 40.9, 45.4, 51.65, 62.39999999999999, 61.8], [12.9, 24.4, 33.300000000000004, 37.35, 43.25, 52.6, 52.35]], '', 'RdYlGn', v => '$'+v.toFixed(0));
hm('hm_avgpnl', [[0.0763224181360201, 0.0794920141969831, 0.0776551724137931, 0.0745670995670995, 0.0725699650174912, 0.061246024862677, 0.0397390923043192], [0.1036162732295329, 0.1065201984408221, 0.1026908292147171, 0.1015813424345847, 0.0982418016594231, 0.0853869271224643, 0.0564996127890253], [0.1331120331950207, 0.1346627565982404, 0.1343141693073789, 0.131686701728024, 0.1291828165374677, 0.1091107341894838, 0.0712652570053292], [0.1610181311018131, 0.1643895348837209, 0.1599261992619926, 0.1570288520564763, 0.1522024121657053, 0.1313441483198146, 0.083197475677097], [0.2057017543859649, 0.2065406976744186, 0.197447280799112, 0.194674012855831, 0.1862001563721657, 0.1579333709768492, 0.0985628966032101], [0.2496805111821086, 0.2416666666666666, 0.2307266982622433, 0.2270322580645161, 0.2157266811279826, 0.1842395587076438, 0.1141215526046986], [0.2828947368421052, 0.2784122562674094, 0.2610759493670886, 0.2591296928327645, 0.245021645021645, 0.2124474789915966, 0.1303595206391478], [0.3114525139664804, 0.3114695340501792, 0.2889487870619945, 0.2869662921348314, 0.2714015151515151, 0.2315500685871056, 0.1402636054421768], [0.3390845070422535, 0.3380184331797234, 0.3251736111111111, 0.3164222873900292, 0.2944444444444444, 0.2488636363636363, 0.1472544878563886], [0.3500000000000001, 0.3494444444444445, 0.3350622406639004, 0.3243816254416961, 0.3020895522388059, 0.2575854700854701, 0.1534838709677419], [0.3361111111111111, 0.3479020979020978, 0.3355614973262032, 0.3227477477477478, 0.3027985074626865, 0.2554687499999999, 0.1524332810047095], [0.3653333333333333, 0.3708333333333333, 0.3585443037974683, 0.3461538461538461, 0.328440366972477, 0.2761437908496732, 0.1586666666666666], [0.3732758620689655, 0.3973118279569893, 0.3761904761904763, 0.3547297297297297, 0.3331460674157303, 0.2803149606299212, 0.1587301587301587], [0.4435897435897436, 0.4651515151515151, 0.4494505494505494, 0.409009009009009, 0.3742753623188405, 0.3135678391959798, 0.1775862068965517], [0.4777777777777778, 0.5083333333333333, 0.4897058823529412, 0.4499999999999999, 0.4119047619047619, 0.3393548387096774, 0.1931734317343173]], '', 'Viridis', v => '$'+v.toFixed(2));
hm('hm_tpd', [[1588.0, 2254.0, 2900.0, 3465.0, 4002.0, 5188.5, 6841.5], [995.5, 1411.0, 1821.0, 2197.5, 2531.0, 3327.5, 4519.5], [602.5, 852.5, 1104.5, 1331.0, 1548.0, 2063.5, 2908.5], [358.5, 516.0, 677.5, 814.5, 953.5, 1294.5, 1901.5], [228.0, 344.0, 450.5, 544.5, 639.5, 885.5, 1339.5], [156.5, 243.0, 316.5, 387.5, 461.0, 634.5, 979.0], [114.0, 179.5, 237.0, 293.0, 346.5, 476.0, 751.0], [89.5, 139.5, 185.5, 222.5, 264.0, 364.5, 588.0], [71.0, 108.5, 144.0, 170.5, 202.5, 286.0, 473.5], [59.0, 90.0, 120.5, 141.5, 167.5, 234.0, 387.5], [45.0, 71.5, 93.5, 111.0, 134.0, 192.0, 318.5], [37.5, 60.0, 79.0, 91.0, 109.0, 153.0, 262.5], [29.0, 46.5, 63.0, 74.0, 89.0, 127.0, 220.5], [19.5, 33.0, 45.5, 55.5, 69.0, 99.5, 174.0], [13.5, 24.0, 34.0, 41.5, 52.5, 77.5, 135.5]], '', 'Blues', v => v.toFixed(0));
hm('hm_flatrate', [[12.02770780856423, 11.7790594498669, 11.72413793103448, 12.35209235209235, 12.51874062968515, 13.87684301821335, 17.54001315500986], [10.095429432446, 9.95747696669029, 9.96705107084019, 10.89874857792946, 11.003555906756219, 12.39669421487603, 16.91558800752295], [7.38589211618257, 8.09384164222873, 8.23902218198279, 9.01577761081893, 9.27002583979328, 11.024957596316929, 16.70964414646725], [5.71827057182705, 7.84883720930232, 7.23247232472324, 8.04174340085942, 8.023072889355, 10.00386249517188, 16.64475414146726], [5.48245614035087, 7.12209302325581, 6.65926748057713, 7.2543617998163406, 6.88037529319781, 9.59909655561829, 16.72265770810003], [3.5143769968051104, 5.96707818930041, 6.003159557661919, 6.1935483870967705, 6.0737527114967405, 9.37746256895193, 16.54749744637385], [3.50877192982456, 5.8495821727019495, 6.32911392405063, 6.484641638225249, 6.06060606060606, 8.50840336134453, 16.77762982689747], [2.2346368715083798, 4.3010752688172, 5.12129380053908, 5.39325842696629, 5.68181818181818, 8.23045267489712, 17.091836734693867], [2.8169014084507, 4.14746543778801, 4.5138888888888795, 4.69208211143695, 5.18518518518518, 7.34265734265734, 16.15628299894403], [2.54237288135593, 3.33333333333333, 3.73443983402489, 4.24028268551236, 5.3731343283582, 7.26495726495726, 16.12903225806451], [2.2222222222222197, 3.49650349650349, 3.7433155080213902, 4.5045045045045, 5.59701492537313, 7.8125, 17.111459968602823], [1.33333333333333, 2.5, 3.16455696202531, 3.84615384615384, 5.04587155963302, 8.496732026143789, 18.095238095238088], [0.0, 2.1505376344086, 3.9682539682539595, 4.72972972972973, 5.0561797752808895, 8.26771653543307, 17.68707482993197], [0.0, 3.03030303030303, 3.29670329670329, 4.5045045045045, 5.072463768115941, 8.54271356783919, 17.52873563218391], [0.0, 2.08333333333333, 2.94117647058823, 3.6144578313252995, 4.76190476190476, 9.032258064516121, 16.97416974169741]], '', [[0,'#3fb950'],[0.5,'#d29922'],[1,'#f85149']], v => v.toFixed(1)+'%');
hm('hm_sharpe', [[302.68271225549705, 227.07353688549085, 278.4750782464173, 229.8601836541388, 305.2853829005092, 341.55177780818366, 212.657710617352], [120.90048975178416, 112.60695953465826, 119.88691220266794, 114.25874445779851, 128.04451697709143, 127.34781239218742, 105.59426190734882], [71.59901161674442, 83.07768638020895, 87.61121392406262, 86.24917380986437, 100.34187815047127, 100.03452814531, 89.64308578955061], [64.58767651540158, 73.57908510922096, 86.611876295469, 77.94341527987343, 91.88431588916424, 88.69141471676862, 81.57643066700938], [58.75562241875785, 66.86740611089976, 80.53968549173356, 79.7294156102967, 94.8873693747105, 92.29120892780024, 89.2072178026181], [57.75836184102589, 64.01937515977323, 71.82191331124777, 71.59787071482008, 91.56576299798944, 91.9082865886444, 92.70371891100127], [63.848226412332096, 64.62071298800515, 71.5352626429552, 79.80990857095796, 86.97116474630994, 82.82917094429325, 84.25121053097928], [63.21081628965938, 62.88720336620339, 72.3693683502116, 73.48509260208175, 85.28793320598069, 81.64353093323601, 85.51873338238346], [58.40663227645938, 52.38690775150333, 64.01362210361121, 61.16992894757173, 67.90664831786079, 66.41252579722014, 69.47036529830487], [69.82614089456793, 55.63438947586769, 70.92995787790029, 63.31539846292527, 73.23573050241404, 63.18530908617654, 63.56745619893333], [70.91109675213738, 53.24775436602261, 63.26316974683694, 56.216481640903154, 68.44894362534873, 57.31491952362843, 59.079391568411005], [60.16968563016929, 43.59852852652074, 53.18411451291644, 49.32841434410644, 57.71797802942048, 48.62560943520687, 48.51964223900655], [116.51342795178908, 54.0941577624028, 69.12791820407094, 54.51147237301618, 61.5720059375211, 48.75534372858237, 46.59749554766535], [137.71501496649603, 66.65030414300722, 91.92863562809416, 63.311370957974, 70.23287291566804, 52.75001442882615, 51.78453255205022], [224.0492308650929, 113.69788913630344, 254.47824268490984, 101.2157089459822, 118.89066040273048, 66.99477259873011, 63.90705084264]], '', 'Viridis', v => v.toFixed(0));
// Table
const rows = [{"thresh": 1.0, "dist": 0.1, "trades": 3176, "tpd": 1588, "win": 57.5, "lose": 30.5, "flat": 12.0, "avg_pnl": 0.0763, "total_pnl": 242.4, "sharpe": 302.7, "train_win": 59.6, "train_avg": 0.0859, "train_pnl": 254.3}, {"thresh": 1.0, "dist": 0.15, "trades": 4508, "tpd": 2254, "win": 58.1, "lose": 30.1, "flat": 11.8, "avg_pnl": 0.0795, "total_pnl": 358.35, "sharpe": 227.1, "train_win": 59.5, "train_avg": 0.0855, "train_pnl": 366.15}, {"thresh": 1.0, "dist": 0.2, "trades": 5800, "tpd": 2900, "win": 57.4, "lose": 30.9, "flat": 11.7, "avg_pnl": 0.0777, "total_pnl": 450.4, "sharpe": 278.5, "train_win": 58.7, "train_avg": 0.0814, "train_pnl": 458.2}, {"thresh": 1.0, "dist": 0.25, "trades": 6930, "tpd": 3465, "win": 56.7, "lose": 31.0, "flat": 12.4, "avg_pnl": 0.0746, "total_pnl": 516.75, "sharpe": 229.9, "train_win": 58.1, "train_avg": 0.0787, "train_pnl": 535.55}, {"thresh": 1.0, "dist": 0.3, "trades": 8004, "tpd": 4002, "win": 56.4, "lose": 31.1, "flat": 12.5, "avg_pnl": 0.0726, "total_pnl": 580.85, "sharpe": 305.3, "train_win": 57.6, "train_avg": 0.0756, "train_pnl": 594.3}, {"thresh": 1.0, "dist": 0.4, "trades": 10377, "tpd": 5188, "win": 53.5, "lose": 32.6, "flat": 13.9, "avg_pnl": 0.0612, "total_pnl": 635.55, "sharpe": 341.6, "train_win": 55.0, "train_avg": 0.064, "train_pnl": 648.15}, {"thresh": 1.0, "dist": 0.5, "trades": 13683, "tpd": 6842, "win": 43.3, "lose": 39.1, "flat": 17.5, "avg_pnl": 0.0397, "total_pnl": 543.75, "sharpe": 212.7, "train_win": 45.4, "train_avg": 0.0423, "train_pnl": 566.65}, {"thresh": 1.5, "dist": 0.1, "trades": 1991, "tpd": 996, "win": 62.2, "lose": 27.7, "flat": 10.1, "avg_pnl": 0.1036, "total_pnl": 206.3, "sharpe": 120.9, "train_win": 65.5, "train_avg": 0.1237, "train_pnl": 199.1}, {"thresh": 1.5, "dist": 0.15, "trades": 2822, "tpd": 1411, "win": 62.4, "lose": 27.6, "flat": 10.0, "avg_pnl": 0.1065, "total_pnl": 300.6, "sharpe": 112.6, "train_win": 64.9, "train_avg": 0.1178, "train_pnl": 280.1}, {"thresh": 1.5, "dist": 0.2, "trades": 3642, "tpd": 1821, "win": 61.4, "lose": 28.6, "flat": 10.0, "avg_pnl": 0.1027, "total_pnl": 374.0, "sharpe": 119.9, "train_win": 63.9, "train_avg": 0.113, "train_pnl": 357.65}, {"thresh": 1.5, "dist": 0.25, "trades": 4395, "tpd": 2198, "win": 60.9, "lose": 28.2, "flat": 10.9, "avg_pnl": 0.1016, "total_pnl": 446.45, "sharpe": 114.3, "train_win": 63.1, "train_avg": 0.1094, "train_pnl": 421.4}, {"thresh": 1.5, "dist": 0.3, "trades": 5062, "tpd": 2531, "win": 60.6, "lose": 28.4, "flat": 11.0, "avg_pnl": 0.0982, "total_pnl": 497.3, "sharpe": 128.0, "train_win": 62.7, "train_avg": 0.1051, "train_pnl": 471.85}, {"thresh": 1.5, "dist": 0.4, "trades": 6655, "tpd": 3328, "win": 57.8, "lose": 29.8, "flat": 12.4, "avg_pnl": 0.0854, "total_pnl": 568.25, "sharpe": 127.3, "train_win": 59.8, "train_avg": 0.0898, "train_pnl": 526.1}, {"thresh": 1.5, "dist": 0.5, "trades": 9039, "tpd": 4520, "win": 46.0, "lose": 37.1, "flat": 16.9, "avg_pnl": 0.0565, "total_pnl": 510.7, "sharpe": 105.6, "train_win": 49.2, "train_avg": 0.0624, "train_pnl": 489.0}, {"thresh": 2.0, "dist": 0.1, "trades": 1205, "tpd": 602, "win": 67.2, "lose": 25.4, "flat": 7.4, "avg_pnl": 0.1331, "total_pnl": 160.4, "sharpe": 71.6, "train_win": 67.5, "train_avg": 0.1513, "train_pnl": 126.8}, {"thresh": 2.0, "dist": 0.15, "trades": 1705, "tpd": 852, "win": 66.5, "lose": 25.5, "flat": 8.1, "avg_pnl": 0.1347, "total_pnl": 229.6, "sharpe": 83.1, "train_win": 67.9, "train_avg": 0.15, "train_pnl": 183.75}, {"thresh": 2.0, "dist": 0.2, "trades": 2209, "tpd": 1104, "win": 65.9, "lose": 25.9, "flat": 8.2, "avg_pnl": 0.1343, "total_pnl": 296.7, "sharpe": 87.6, "train_win": 67.4, "train_avg": 0.1444, "train_pnl": 238.6}, {"thresh": 2.0, "dist": 0.25, "trades": 2662, "tpd": 1331, "win": 65.5, "lose": 25.5, "flat": 9.0, "avg_pnl": 0.1317, "total_pnl": 350.55, "sharpe": 86.2, "train_win": 65.9, "train_avg": 0.1384, "train_pnl": 279.5}, {"thresh": 2.0, "dist": 0.3, "trades": 3096, "tpd": 1548, "win": 65.1, "lose": 25.7, "flat": 9.3, "avg_pnl": 0.1292, "total_pnl": 399.95, "sharpe": 100.3, "train_win": 65.5, "train_avg": 0.134, "train_pnl": 315.15}, {"thresh": 2.0, "dist": 0.4, "trades": 4127, "tpd": 2064, "win": 61.0, "lose": 28.0, "flat": 11.0, "avg_pnl": 0.1091, "total_pnl": 450.3, "sharpe": 100.0, "train_win": 61.9, "train_avg": 0.1112, "train_pnl": 349.2}, {"thresh": 2.0, "dist": 0.5, "trades": 5817, "tpd": 2908, "win": 47.3, "lose": 36.0, "flat": 16.7, "avg_pnl": 0.0713, "total_pnl": 414.55, "sharpe": 89.6, "train_win": 50.7, "train_avg": 0.0784, "train_pnl": 337.4}, {"thresh": 2.5, "dist": 0.1, "trades": 717, "tpd": 358, "win": 71.0, "lose": 23.3, "flat": 5.7, "avg_pnl": 0.161, "total_pnl": 115.45, "sharpe": 64.6, "train_win": 73.4, "train_avg": 0.193, "train_pnl": 89.35}, {"thresh": 2.5, "dist": 0.15, "trades": 1032, "tpd": 516, "win": 69.4, "lose": 22.8, "flat": 7.8, "avg_pnl": 0.1644, "total_pnl": 169.65, "sharpe": 73.6, "train_win": 71.9, "train_avg": 0.1839, "train_pnl": 124.5}, {"thresh": 2.5, "dist": 0.2, "trades": 1355, "tpd": 678, "win": 68.9, "lose": 23.8, "flat": 7.2, "avg_pnl": 0.1599, "total_pnl": 216.7, "sharpe": 86.6, "train_win": 71.1, "train_avg": 0.1762, "train_pnl": 160.9}, {"thresh": 2.5, "dist": 0.25, "trades": 1629, "tpd": 814, "win": 68.3, "lose": 23.7, "flat": 8.0, "avg_pnl": 0.157, "total_pnl": 255.8, "sharpe": 77.9, "train_win": 69.8, "train_avg": 0.1739, "train_pnl": 195.65}, {"thresh": 2.5, "dist": 0.3, "trades": 1907, "tpd": 954, "win": 67.8, "lose": 24.2, "flat": 8.0, "avg_pnl": 0.1522, "total_pnl": 290.25, "sharpe": 91.9, "train_win": 69.5, "train_avg": 0.1679, "train_pnl": 220.0}, {"thresh": 2.5, "dist": 0.4, "trades": 2589, "tpd": 1294, "win": 64.0, "lose": 26.0, "flat": 10.0, "avg_pnl": 0.1313, "total_pnl": 340.05, "sharpe": 88.7, "train_win": 65.9, "train_avg": 0.1396, "train_pnl": 246.45}, {"thresh": 2.5, "dist": 0.5, "trades": 3803, "tpd": 1902, "win": 48.0, "lose": 35.3, "flat": 16.6, "avg_pnl": 0.0832, "total_pnl": 316.4, "sharpe": 81.6, "train_win": 53.8, "train_avg": 0.0994, "train_pnl": 245.7}, {"thresh": 3.0, "dist": 0.1, "trades": 456, "tpd": 228, "win": 75.4, "lose": 19.1, "flat": 5.5, "avg_pnl": 0.2057, "total_pnl": 93.8, "sharpe": 58.8, "train_win": 76.6, "train_avg": 0.2236, "train_pnl": 63.95}, {"thresh": 3.0, "dist": 0.15, "trades": 688, "tpd": 344, "win": 73.4, "lose": 19.5, "flat": 7.1, "avg_pnl": 0.2065, "total_pnl": 142.1, "sharpe": 66.9, "train_win": 77.0, "train_avg": 0.2227, "train_pnl": 93.75}, {"thresh": 3.0, "dist": 0.2, "trades": 901, "tpd": 450, "win": 72.1, "lose": 21.2, "flat": 6.7, "avg_pnl": 0.1974, "total_pnl": 177.9, "sharpe": 80.5, "train_win": 75.4, "train_avg": 0.2165, "train_pnl": 121.65}, {"thresh": 3.0, "dist": 0.25, "trades": 1089, "tpd": 544, "win": 72.1, "lose": 20.7, "flat": 7.3, "avg_pnl": 0.1947, "total_pnl": 212.0, "sharpe": 79.7, "train_win": 74.1, "train_avg": 0.2158, "train_pnl": 149.35}, {"thresh": 3.0, "dist": 0.3, "trades": 1279, "tpd": 640, "win": 71.0, "lose": 22.1, "flat": 6.9, "avg_pnl": 0.1862, "total_pnl": 238.15, "sharpe": 94.9, "train_win": 74.1, "train_avg": 0.2074, "train_pnl": 167.15}, {"thresh": 3.0, "dist": 0.4, "trades": 1771, "tpd": 886, "win": 66.7, "lose": 23.7, "flat": 9.6, "avg_pnl": 0.1579, "total_pnl": 279.7, "sharpe": 92.3, "train_win": 69.4, "train_avg": 0.1685, "train_pnl": 188.0}, {"thresh": 3.0, "dist": 0.5, "trades": 2679, "tpd": 1340, "win": 49.3, "lose": 34.0, "flat": 16.7, "avg_pnl": 0.0986, "total_pnl": 264.05, "sharpe": 89.2, "train_win": 56.4, "train_avg": 0.1212, "train_pnl": 190.7}, {"thresh": 3.5, "dist": 0.1, "trades": 313, "tpd": 156, "win": 81.2, "lose": 15.3, "flat": 3.5, "avg_pnl": 0.2497, "total_pnl": 78.15, "sharpe": 57.8, "train_win": 77.7, "train_avg": 0.2415, "train_pnl": 46.6}, {"thresh": 3.5, "dist": 0.15, "trades": 486, "tpd": 243, "win": 77.8, "lose": 16.3, "flat": 6.0, "avg_pnl": 0.2417, "total_pnl": 117.45, "sharpe": 64.0, "train_win": 78.3, "train_avg": 0.2403, "train_pnl": 66.55}, {"thresh": 3.5, "dist": 0.2, "trades": 633, "tpd": 316, "win": 76.1, "lose": 17.9, "flat": 6.0, "avg_pnl": 0.2307, "total_pnl": 146.05, "sharpe": 71.8, "train_win": 77.6, "train_avg": 0.2433, "train_pnl": 92.2}, {"thresh": 3.5, "dist": 0.25, "trades": 775, "tpd": 388, "win": 76.4, "lose": 17.4, "flat": 6.2, "avg_pnl": 0.227, "total_pnl": 175.95, "sharpe": 71.6, "train_win": 75.8, "train_avg": 0.2392, "train_pnl": 112.65}, {"thresh": 3.5, "dist": 0.3, "trades": 922, "tpd": 461, "win": 74.8, "lose": 19.1, "flat": 6.1, "avg_pnl": 0.2157, "total_pnl": 198.9, "sharpe": 91.6, "train_win": 75.7, "train_avg": 0.2322, "train_pnl": 127.0}, {"thresh": 3.5, "dist": 0.4, "trades": 1269, "tpd": 634, "win": 70.4, "lose": 20.2, "flat": 9.4, "avg_pnl": 0.1842, "total_pnl": 233.8, "sharpe": 91.9, "train_win": 71.1, "train_avg": 0.187, "train_pnl": 143.6}, {"thresh": 3.5, "dist": 0.5, "trades": 1958, "tpd": 979, "win": 51.3, "lose": 32.2, "flat": 16.5, "avg_pnl": 0.1141, "total_pnl": 223.45, "sharpe": 92.7, "train_win": 58.0, "train_avg": 0.1354, "train_pnl": 147.0}, {"thresh": 4.0, "dist": 0.1, "trades": 228, "tpd": 114, "win": 81.1, "lose": 15.4, "flat": 3.5, "avg_pnl": 0.2829, "total_pnl": 64.5, "sharpe": 63.8, "train_win": 77.5, "train_avg": 0.2685, "train_pnl": 37.05}, {"thresh": 4.0, "dist": 0.15, "trades": 359, "tpd": 180, "win": 78.3, "lose": 15.9, "flat": 5.8, "avg_pnl": 0.2784, "total_pnl": 99.95, "sharpe": 64.6, "train_win": 77.9, "train_avg": 0.2583, "train_pnl": 51.4}, {"thresh": 4.0, "dist": 0.2, "trades": 474, "tpd": 237, "win": 76.4, "lose": 17.3, "flat": 6.3, "avg_pnl": 0.2611, "total_pnl": 123.75, "sharpe": 71.5, "train_win": 76.8, "train_avg": 0.2647, "train_pnl": 73.05}, {"thresh": 4.0, "dist": 0.25, "trades": 586, "tpd": 293, "win": 77.0, "lose": 16.6, "flat": 6.5, "avg_pnl": 0.2591, "total_pnl": 151.85, "sharpe": 79.8, "train_win": 75.6, "train_avg": 0.2613, "train_pnl": 91.2}, {"thresh": 4.0, "dist": 0.3, "trades": 693, "tpd": 346, "win": 76.3, "lose": 17.6, "flat": 6.1, "avg_pnl": 0.245, "total_pnl": 169.8, "sharpe": 87.0, "train_win": 76.4, "train_avg": 0.2555, "train_pnl": 104.0}, {"thresh": 4.0, "dist": 0.4, "trades": 952, "tpd": 476, "win": 73.3, "lose": 18.2, "flat": 8.5, "avg_pnl": 0.2124, "total_pnl": 202.25, "sharpe": 82.8, "train_win": 71.8, "train_avg": 0.2042, "train_pnl": 116.0}, {"thresh": 4.0, "dist": 0.5, "trades": 1502, "tpd": 751, "win": 52.4, "lose": 30.8, "flat": 16.8, "avg_pnl": 0.1304, "total_pnl": 195.8, "sharpe": 84.3, "train_win": 58.7, "train_avg": 0.1489, "train_pnl": 119.4}, {"thresh": 4.5, "dist": 0.1, "trades": 179, "tpd": 90, "win": 83.8, "lose": 14.0, "flat": 2.2, "avg_pnl": 0.3115, "total_pnl": 55.75, "sharpe": 63.2, "train_win": 84.0, "train_avg": 0.3185, "train_pnl": 31.85}, {"thresh": 4.5, "dist": 0.15, "trades": 279, "tpd": 140, "win": 81.7, "lose": 14.0, "flat": 4.3, "avg_pnl": 0.3115, "total_pnl": 86.9, "sharpe": 62.9, "train_win": 82.8, "train_avg": 0.2907, "train_pnl": 42.15}, {"thresh": 4.5, "dist": 0.2, "trades": 371, "tpd": 186, "win": 79.2, "lose": 15.6, "flat": 5.1, "avg_pnl": 0.2889, "total_pnl": 107.2, "sharpe": 72.4, "train_win": 80.9, "train_avg": 0.3005, "train_pnl": 61.3}, {"thresh": 4.5, "dist": 0.25, "trades": 445, "tpd": 222, "win": 79.1, "lose": 15.5, "flat": 5.4, "avg_pnl": 0.287, "total_pnl": 127.7, "sharpe": 73.5, "train_win": 79.8, "train_avg": 0.3006, "train_pnl": 77.55}, {"thresh": 4.5, "dist": 0.3, "trades": 528, "tpd": 264, "win": 78.8, "lose": 15.5, "flat": 5.7, "avg_pnl": 0.2714, "total_pnl": 143.3, "sharpe": 85.3, "train_win": 81.1, "train_avg": 0.295, "train_pnl": 88.8}, {"thresh": 4.5, "dist": 0.4, "trades": 729, "tpd": 364, "win": 75.2, "lose": 16.6, "flat": 8.2, "avg_pnl": 0.2316, "total_pnl": 168.8, "sharpe": 81.6, "train_win": 75.4, "train_avg": 0.2351, "train_pnl": 98.5}, {"thresh": 4.5, "dist": 0.5, "trades": 1176, "tpd": 588, "win": 53.1, "lose": 29.8, "flat": 17.1, "avg_pnl": 0.1403, "total_pnl": 164.95, "sharpe": 85.5, "train_win": 60.4, "train_avg": 0.1672, "train_pnl": 101.65}, {"thresh": 5.0, "dist": 0.1, "trades": 142, "tpd": 71, "win": 83.8, "lose": 13.4, "flat": 2.8, "avg_pnl": 0.3391, "total_pnl": 48.15, "sharpe": 58.4, "train_win": 86.8, "train_avg": 0.3669, "train_pnl": 24.95}, {"thresh": 5.0, "dist": 0.15, "trades": 217, "tpd": 108, "win": 82.5, "lose": 13.4, "flat": 4.1, "avg_pnl": 0.338, "total_pnl": 73.35, "sharpe": 52.4, "train_win": 85.7, "train_avg": 0.3276, "train_pnl": 32.1}, {"thresh": 5.0, "dist": 0.2, "trades": 288, "tpd": 144, "win": 80.9, "lose": 14.6, "flat": 4.5, "avg_pnl": 0.3252, "total_pnl": 93.65, "sharpe": 64.0, "train_win": 82.6, "train_avg": 0.3236, "train_pnl": 46.6}, {"thresh": 5.0, "dist": 0.25, "trades": 341, "tpd": 170, "win": 79.8, "lose": 15.5, "flat": 4.7, "avg_pnl": 0.3164, "total_pnl": 107.9, "sharpe": 61.2, "train_win": 83.6, "train_avg": 0.3374, "train_pnl": 61.75}, {"thresh": 5.0, "dist": 0.3, "trades": 405, "tpd": 202, "win": 78.8, "lose": 16.0, "flat": 5.2, "avg_pnl": 0.2944, "total_pnl": 119.25, "sharpe": 67.9, "train_win": 84.7, "train_avg": 0.3285, "train_pnl": 70.95}, {"thresh": 5.0, "dist": 0.4, "trades": 572, "tpd": 286, "win": 75.2, "lose": 17.5, "flat": 7.3, "avg_pnl": 0.2489, "total_pnl": 142.35, "sharpe": 66.4, "train_win": 77.9, "train_avg": 0.2619, "train_pnl": 80.4}, {"thresh": 5.0, "dist": 0.5, "trades": 947, "tpd": 474, "win": 52.5, "lose": 31.4, "flat": 16.2, "avg_pnl": 0.1473, "total_pnl": 139.45, "sharpe": 69.5, "train_win": 60.9, "train_avg": 0.1807, "train_pnl": 83.65}, {"thresh": 5.5, "dist": 0.1, "trades": 118, "tpd": 59, "win": 85.6, "lose": 11.9, "flat": 2.5, "avg_pnl": 0.35, "total_pnl": 41.3, "sharpe": 69.8, "train_win": 89.6, "train_avg": 0.4198, "train_pnl": 20.15}, {"thresh": 5.5, "dist": 0.15, "trades": 180, "tpd": 90, "win": 83.9, "lose": 12.8, "flat": 3.3, "avg_pnl": 0.3494, "total_pnl": 62.9, "sharpe": 55.6, "train_win": 90.3, "train_avg": 0.3785, "train_pnl": 27.25}, {"thresh": 5.5, "dist": 0.2, "trades": 241, "tpd": 120, "win": 81.7, "lose": 14.5, "flat": 3.7, "avg_pnl": 0.3351, "total_pnl": 80.75, "sharpe": 70.9, "train_win": 86.4, "train_avg": 0.3645, "train_pnl": 40.1}, {"thresh": 5.5, "dist": 0.25, "trades": 283, "tpd": 142, "win": 80.9, "lose": 14.8, "flat": 4.2, "avg_pnl": 0.3244, "total_pnl": 91.8, "sharpe": 63.3, "train_win": 86.5, "train_avg": 0.3801, "train_pnl": 53.6}, {"thresh": 5.5, "dist": 0.3, "trades": 335, "tpd": 168, "win": 79.4, "lose": 15.2, "flat": 5.4, "avg_pnl": 0.3021, "total_pnl": 101.2, "sharpe": 73.2, "train_win": 87.3, "train_avg": 0.3636, "train_pnl": 60.0}, {"thresh": 5.5, "dist": 0.4, "trades": 468, "tpd": 234, "win": 76.3, "lose": 16.5, "flat": 7.3, "avg_pnl": 0.2576, "total_pnl": 120.55, "sharpe": 63.2, "train_win": 80.1, "train_avg": 0.2855, "train_pnl": 68.8}, {"thresh": 5.5, "dist": 0.5, "trades": 775, "tpd": 388, "win": 53.2, "lose": 30.7, "flat": 16.1, "avg_pnl": 0.1535, "total_pnl": 118.95, "sharpe": 63.6, "train_win": 62.3, "train_avg": 0.197, "train_pnl": 71.5}, {"thresh": 6.0, "dist": 0.1, "trades": 90, "tpd": 45, "win": 83.3, "lose": 14.4, "flat": 2.2, "avg_pnl": 0.3361, "total_pnl": 30.25, "sharpe": 70.9, "train_win": 87.5, "train_avg": 0.4175, "train_pnl": 16.7}, {"thresh": 6.0, "dist": 0.15, "trades": 143, "tpd": 72, "win": 82.5, "lose": 14.0, "flat": 3.5, "avg_pnl": 0.3479, "total_pnl": 49.75, "sharpe": 53.2, "train_win": 87.9, "train_avg": 0.3664, "train_pnl": 21.25}, {"thresh": 6.0, "dist": 0.2, "trades": 187, "tpd": 94, "win": 80.7, "lose": 15.5, "flat": 3.7, "avg_pnl": 0.3356, "total_pnl": 62.75, "sharpe": 63.3, "train_win": 86.4, "train_avg": 0.3676, "train_pnl": 32.35}, {"thresh": 6.0, "dist": 0.25, "trades": 222, "tpd": 111, "win": 78.8, "lose": 16.7, "flat": 4.5, "avg_pnl": 0.3227, "total_pnl": 71.65, "sharpe": 56.2, "train_win": 87.0, "train_avg": 0.4039, "train_pnl": 46.45}, {"thresh": 6.0, "dist": 0.3, "trades": 268, "tpd": 134, "win": 78.0, "lose": 16.4, "flat": 5.6, "avg_pnl": 0.3028, "total_pnl": 81.15, "sharpe": 68.4, "train_win": 87.4, "train_avg": 0.3841, "train_pnl": 51.85}, {"thresh": 6.0, "dist": 0.4, "trades": 384, "tpd": 192, "win": 75.3, "lose": 16.9, "flat": 7.8, "avg_pnl": 0.2555, "total_pnl": 98.1, "sharpe": 57.3, "train_win": 80.4, "train_avg": 0.2912, "train_pnl": 57.95}, {"thresh": 6.0, "dist": 0.5, "trades": 637, "tpd": 318, "win": 52.1, "lose": 30.8, "flat": 17.1, "avg_pnl": 0.1524, "total_pnl": 97.1, "sharpe": 59.1, "train_win": 62.2, "train_avg": 0.2033, "train_pnl": 60.8}, {"thresh": 6.5, "dist": 0.1, "trades": 75, "tpd": 38, "win": 82.7, "lose": 16.0, "flat": 1.3, "avg_pnl": 0.3653, "total_pnl": 27.4, "sharpe": 60.2, "train_win": 89.3, "train_avg": 0.425, "train_pnl": 11.9}, {"thresh": 6.5, "dist": 0.15, "trades": 120, "tpd": 60, "win": 81.7, "lose": 15.8, "flat": 2.5, "avg_pnl": 0.3708, "total_pnl": 44.5, "sharpe": 43.6, "train_win": 87.8, "train_avg": 0.3793, "train_pnl": 15.55}, {"thresh": 6.5, "dist": 0.2, "trades": 158, "tpd": 79, "win": 80.4, "lose": 16.5, "flat": 3.2, "avg_pnl": 0.3585, "total_pnl": 56.65, "sharpe": 53.2, "train_win": 89.2, "train_avg": 0.3815, "train_pnl": 24.8}, {"thresh": 6.5, "dist": 0.25, "trades": 182, "tpd": 91, "win": 78.6, "lose": 17.6, "flat": 3.8, "avg_pnl": 0.3462, "total_pnl": 63.0, "sharpe": 49.3, "train_win": 90.0, "train_avg": 0.4228, "train_pnl": 38.05}, {"thresh": 6.5, "dist": 0.3, "trades": 218, "tpd": 109, "win": 78.4, "lose": 16.5, "flat": 5.0, "avg_pnl": 0.3284, "total_pnl": 71.6, "sharpe": 57.7, "train_win": 90.7, "train_avg": 0.4037, "train_pnl": 43.2}, {"thresh": 6.5, "dist": 0.4, "trades": 306, "tpd": 153, "win": 74.5, "lose": 17.0, "flat": 8.5, "avg_pnl": 0.2761, "total_pnl": 84.5, "sharpe": 48.6, "train_win": 83.3, "train_avg": 0.308, "train_pnl": 48.05}, {"thresh": 6.5, "dist": 0.5, "trades": 525, "tpd": 262, "win": 49.9, "lose": 32.0, "flat": 18.1, "avg_pnl": 0.1587, "total_pnl": 83.3, "sharpe": 48.5, "train_win": 64.7, "train_avg": 0.216, "train_pnl": 51.4}, {"thresh": 7.0, "dist": 0.1, "trades": 58, "tpd": 29, "win": 84.5, "lose": 15.5, "flat": 0.0, "avg_pnl": 0.3733, "total_pnl": 21.65, "sharpe": 116.5, "train_win": 87.0, "train_avg": 0.4196, "train_pnl": 9.65}, {"thresh": 7.0, "dist": 0.15, "trades": 93, "tpd": 46, "win": 81.7, "lose": 16.1, "flat": 2.2, "avg_pnl": 0.3973, "total_pnl": 36.95, "sharpe": 54.1, "train_win": 84.8, "train_avg": 0.3788, "train_pnl": 12.5}, {"thresh": 7.0, "dist": 0.2, "trades": 126, "tpd": 63, "win": 79.4, "lose": 16.7, "flat": 4.0, "avg_pnl": 0.3762, "total_pnl": 47.4, "sharpe": 69.1, "train_win": 88.5, "train_avg": 0.3856, "train_pnl": 20.05}, {"thresh": 7.0, "dist": 0.25, "trades": 148, "tpd": 74, "win": 77.0, "lose": 18.2, "flat": 4.7, "avg_pnl": 0.3547, "total_pnl": 52.5, "sharpe": 54.5, "train_win": 88.7, "train_avg": 0.4092, "train_pnl": 29.05}, {"thresh": 7.0, "dist": 0.3, "trades": 178, "tpd": 89, "win": 77.5, "lose": 17.4, "flat": 5.1, "avg_pnl": 0.3331, "total_pnl": 59.3, "sharpe": 61.6, "train_win": 89.7, "train_avg": 0.392, "train_pnl": 34.1}, {"thresh": 7.0, "dist": 0.4, "trades": 254, "tpd": 127, "win": 74.4, "lose": 17.3, "flat": 8.3, "avg_pnl": 0.2803, "total_pnl": 71.2, "sharpe": 48.8, "train_win": 82.3, "train_avg": 0.304, "train_pnl": 37.7}, {"thresh": 7.0, "dist": 0.5, "trades": 441, "tpd": 220, "win": 49.4, "lose": 32.9, "flat": 17.7, "avg_pnl": 0.1587, "total_pnl": 70.0, "sharpe": 46.6, "train_win": 62.2, "train_avg": 0.208, "train_pnl": 40.15}, {"thresh": 7.5, "dist": 0.1, "trades": 39, "tpd": 20, "win": 84.6, "lose": 15.4, "flat": 0.0, "avg_pnl": 0.4436, "total_pnl": 17.3, "sharpe": 137.7, "train_win": 87.0, "train_avg": 0.4196, "train_pnl": 9.65}, {"thresh": 7.5, "dist": 0.15, "trades": 66, "tpd": 33, "win": 81.8, "lose": 15.2, "flat": 3.0, "avg_pnl": 0.4652, "total_pnl": 30.7, "sharpe": 66.7, "train_win": 90.0, "train_avg": 0.4017, "train_pnl": 12.05}, {"thresh": 7.5, "dist": 0.2, "trades": 91, "tpd": 46, "win": 82.4, "lose": 14.3, "flat": 3.3, "avg_pnl": 0.4495, "total_pnl": 40.9, "sharpe": 91.9, "train_win": 93.0, "train_avg": 0.4047, "train_pnl": 17.4}, {"thresh": 7.5, "dist": 0.25, "trades": 111, "tpd": 56, "win": 79.3, "lose": 16.2, "flat": 4.5, "avg_pnl": 0.409, "total_pnl": 45.4, "sharpe": 63.3, "train_win": 91.5, "train_avg": 0.4186, "train_pnl": 24.7}, {"thresh": 7.5, "dist": 0.3, "trades": 138, "tpd": 69, "win": 79.0, "lose": 15.9, "flat": 5.1, "avg_pnl": 0.3743, "total_pnl": 51.65, "sharpe": 70.2, "train_win": 93.1, "train_avg": 0.4056, "train_pnl": 29.2}, {"thresh": 7.5, "dist": 0.4, "trades": 199, "tpd": 100, "win": 75.9, "lose": 15.6, "flat": 8.5, "avg_pnl": 0.3136, "total_pnl": 62.4, "sharpe": 52.8, "train_win": 86.4, "train_avg": 0.3209, "train_pnl": 33.05}, {"thresh": 7.5, "dist": 0.5, "trades": 348, "tpd": 174, "win": 50.3, "lose": 32.2, "flat": 17.5, "avg_pnl": 0.1776, "total_pnl": 61.8, "sharpe": 51.8, "train_win": 67.1, "train_avg": 0.2303, "train_pnl": 35.7}, {"thresh": 8.0, "dist": 0.1, "trades": 27, "tpd": 14, "win": 81.5, "lose": 18.5, "flat": 0.0, "avg_pnl": 0.4778, "total_pnl": 12.9, "sharpe": 224.0, "train_win": 85.7, "train_avg": 0.4048, "train_pnl": 8.5}, {"thresh": 8.0, "dist": 0.15, "trades": 48, "tpd": 24, "win": 79.2, "lose": 18.8, "flat": 2.1, "avg_pnl": 0.5083, "total_pnl": 24.4, "sharpe": 113.7, "train_win": 88.5, "train_avg": 0.4058, "train_pnl": 10.55}, {"thresh": 8.0, "dist": 0.2, "trades": 68, "tpd": 34, "win": 80.9, "lose": 16.2, "flat": 2.9, "avg_pnl": 0.4897, "total_pnl": 33.3, "sharpe": 254.5, "train_win": 91.7, "train_avg": 0.3958, "train_pnl": 14.25}, {"thresh": 8.0, "dist": 0.25, "trades": 83, "tpd": 42, "win": 79.5, "lose": 16.9, "flat": 3.6, "avg_pnl": 0.45, "total_pnl": 37.35, "sharpe": 101.2, "train_win": 93.9, "train_avg": 0.4316, "train_pnl": 21.15}, {"thresh": 8.0, "dist": 0.3, "trades": 105, "tpd": 52, "win": 80.0, "lose": 15.2, "flat": 4.8, "avg_pnl": 0.4119, "total_pnl": 43.25, "sharpe": 118.9, "train_win": 95.2, "train_avg": 0.4137, "train_pnl": 25.65}, {"thresh": 8.0, "dist": 0.4, "trades": 155, "tpd": 78, "win": 76.8, "lose": 14.2, "flat": 9.0, "avg_pnl": 0.3394, "total_pnl": 52.6, "sharpe": 67.0, "train_win": 90.6, "train_avg": 0.3435, "train_pnl": 29.2}, {"thresh": 8.0, "dist": 0.5, "trades": 271, "tpd": 136, "win": 50.9, "lose": 32.1, "flat": 17.0, "avg_pnl": 0.1932, "total_pnl": 52.35, "sharpe": 63.9, "train_win": 68.5, "train_avg": 0.2358, "train_pnl": 30.65}];
const tb = document.getElementById('tbody');
rows.forEach(r => {
const tr = document.createElement('tr');
const c = r.avg_pnl > 0 ? 'positive' : (r.avg_pnl < 0 ? 'negative' : '');
tr.innerHTML = `
<td>${r.thresh}</td><td>${r.dist.toFixed(2)}</td>
<td>${r.trades}</td><td>${r.tpd}</td>
<td>${r.win}%</td><td>${r.lose}%</td><td>${r.flat}%</td>
<td class="${c}">\${r.avg_pnl.toFixed(4)}</td>
<td class="${c}">\${r.total_pnl.toFixed(2)}</td>
<td>${r.sharpe}</td>
<td style="border-left:2px solid #30363d">${r.train_win}%</td>
<td>\${r.train_avg.toFixed(4)}</td>
<td>\${r.train_pnl.toFixed(2)}</td>
`;
tb.appendChild(tr);
});
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment