Created
March 3, 2026 14:30
-
-
Save yongkangc/c7ec8ccef7f23dc489d801c80b977200 to your computer and use it in GitHub Desktop.
CexLead Fine Sweep — ETH 15m (1-8bps × distance)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <meta charset="utf-8"> | |
| <title>CexLead Fine Sweep — ETH 15m (1-8bps × distance)</title> | |
| <script src="https://cdn.plot.ly/plotly-2.27.0.min.js"></script> | |
| <style> | |
| * { margin: 0; padding: 0; box-sizing: border-box; } | |
| body { | |
| background: #0d1117; color: #c9d1d9; | |
| font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif; | |
| padding: 20px; | |
| } | |
| h1 { color: #58a6ff; margin-bottom: 5px; font-size: 24px; } | |
| h2 { color: #8b949e; margin: 30px 0 10px 0; font-size: 18px; } | |
| .subtitle { color: #8b949e; font-size: 14px; margin-bottom: 20px; } | |
| .summary-box { | |
| background: #161b22; border: 1px solid #30363d; border-radius: 8px; | |
| padding: 16px; margin: 15px 0; display: inline-block; | |
| } | |
| .summary-box h3 { color: #58a6ff; margin-bottom: 8px; font-size: 14px; } | |
| .summary-box .metric { | |
| display: flex; justify-content: space-between; | |
| padding: 4px 0; border-bottom: 1px solid #21262d; | |
| } | |
| .summary-box .metric:last-child { border-bottom: none; } | |
| .metric-label { color: #8b949e; } | |
| .metric-value { color: #f0f6fc; font-weight: 600; } | |
| .metric-value.positive { color: #3fb950; } | |
| .metric-value.negative { color: #f85149; } | |
| .charts-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; } | |
| .chart-container { | |
| background: #161b22; border: 1px solid #30363d; border-radius: 8px; | |
| padding: 10px; | |
| } | |
| .chart-full { grid-column: 1 / -1; } | |
| table { | |
| width: 100%; border-collapse: collapse; font-size: 12px; | |
| background: #161b22; border-radius: 8px; overflow: hidden; | |
| } | |
| th { background: #21262d; color: #58a6ff; padding: 8px 6px; text-align: right; } | |
| td { padding: 6px; text-align: right; border-bottom: 1px solid #21262d; } | |
| tr:hover { background: #1c2128; } | |
| .filter-bar { margin: 10px 0; display: flex; gap: 10px; align-items: center; } | |
| .filter-bar label { color: #8b949e; font-size: 13px; } | |
| .filter-bar select { | |
| background: #21262d; color: #c9d1d9; border: 1px solid #30363d; | |
| padding: 4px 8px; border-radius: 4px; | |
| } | |
| .key-finding { | |
| background: #1a2332; border-left: 3px solid #58a6ff; padding: 12px 16px; | |
| margin: 10px 0; border-radius: 0 6px 6px 0; font-size: 14px; | |
| } | |
| .key-finding strong { color: #58a6ff; } | |
| </style> | |
| </head> | |
| <body> | |
| <h1>⚡ CexLead Fine-grained Signal Sweep — ETH 15m</h1> | |
| <p class="subtitle">CEX return threshold: 1.0–8.0 bps (0.5 steps) × Distance from 0.50: 7 levels | 105 combos | Feb 26 – Mar 1, 2026</p> | |
| <div class="key-finding"> | |
| <strong>Key Finding:</strong> 1bps threshold dominates across all distance filters. Sharpe and P&L monotonically decrease | |
| as threshold increases. The 5bps optimum from the previous coarse sweep was an artifact of not testing below 5bps. | |
| Optimal combo: <strong>1.0bps × dist≤0.40</strong> (test Sharpe: 686.6, $1373 P&L, 75.4% win rate, 5384 trades/day). | |
| </div> | |
| <div style="display: flex; gap: 15px; flex-wrap: wrap;"> | |
| <div class="summary-box" style="min-width: 280px;"> | |
| <h3>🏆 Best Test Combo (by Sharpe)</h3> | |
| <div class="metric"><span class="metric-label">Threshold</span><span class="metric-value">1.0 bps</span></div> | |
| <div class="metric"><span class="metric-label">Distance Filter</span><span class="metric-value">≤ 0.40</span></div> | |
| <div class="metric"><span class="metric-label">Sharpe</span><span class="metric-value positive">686.6</span></div> | |
| <div class="metric"><span class="metric-label">Total P&L</span><span class="metric-value positive">$1,373</span></div> | |
| <div class="metric"><span class="metric-label">Win Rate</span><span class="metric-value positive">75.4%</span></div> | |
| <div class="metric"><span class="metric-label">Avg Edge</span><span class="metric-value positive">2.55¢</span></div> | |
| <div class="metric"><span class="metric-label">Trades/Day</span><span class="metric-value">5,384</span></div> | |
| </div> | |
| <div class="summary-box" style="min-width: 280px;"> | |
| <h3>💰 Best Test Combo (by P&L)</h3> | |
| <div class="metric"><span class="metric-label">Threshold</span><span class="metric-value">1.0 bps</span></div> | |
| <div class="metric"><span class="metric-label">Distance Filter</span><span class="metric-value">≤ 0.50</span></div> | |
| <div class="metric"><span class="metric-label">Total P&L</span><span class="metric-value positive">$1,423</span></div> | |
| <div class="metric"><span class="metric-label">Sharpe</span><span class="metric-value positive">576.0</span></div> | |
| <div class="metric"><span class="metric-label">Win Rate</span><span class="metric-value positive">67.0%</span></div> | |
| <div class="metric"><span class="metric-label">Avg Edge</span><span class="metric-value positive">1.92¢</span></div> | |
| <div class="metric"><span class="metric-label">Trades/Day</span><span class="metric-value">7,431</span></div> | |
| </div> | |
| <div class="summary-box" style="min-width: 280px;"> | |
| <h3>🔬 Train/Test Consistency</h3> | |
| <div class="metric"><span class="metric-label">Overfit Flags</span><span class="metric-value positive">0 / 105</span></div> | |
| <div class="metric"><span class="metric-label">Train Best Sharpe</span><span class="metric-value">723.6</span></div> | |
| <div class="metric"><span class="metric-label">Test Best Sharpe</span><span class="metric-value">686.6</span></div> | |
| <div class="metric"><span class="metric-label">Ratio</span><span class="metric-value positive">0.95× ✓</span></div> | |
| <div class="metric"><span class="metric-label">Pattern</span><span class="metric-value">Monotonic ↓</span></div> | |
| </div> | |
| </div> | |
| <div class="charts-grid"> | |
| <!-- 3D Surface --> | |
| <div class="chart-container chart-full" id="surface3d" style="height: 500px;"></div> | |
| <!-- Test Sharpe Heatmap --> | |
| <div class="chart-container" id="hm-sharpe" style="height: 400px;"></div> | |
| <!-- Test P&L Heatmap --> | |
| <div class="chart-container" id="hm-pnl" style="height: 400px;"></div> | |
| <!-- Trades/Day Heatmap --> | |
| <div class="chart-container" id="hm-trades" style="height: 400px;"></div> | |
| <!-- Win Rate Heatmap --> | |
| <div class="chart-container" id="hm-winrate" style="height: 400px;"></div> | |
| <!-- Avg Edge Heatmap --> | |
| <div class="chart-container" id="hm-edge" style="height: 400px;"></div> | |
| <!-- Train Sharpe Heatmap (comparison) --> | |
| <div class="chart-container" id="hm-train-sharpe" style="height: 400px;"></div> | |
| </div> | |
| <h2>📊 Threshold Profile (at distance = 0.50)</h2> | |
| <div class="charts-grid"> | |
| <div class="chart-container" id="line-sharpe" style="height: 350px;"></div> | |
| <div class="chart-container" id="line-edge" style="height: 350px;"></div> | |
| </div> | |
| <h2>📋 Full Results Table</h2> | |
| <div class="filter-bar"> | |
| <label>Split:</label> | |
| <select id="split-filter" onchange="filterTable()"> | |
| <option value="all">All</option> | |
| <option value="test" selected>Test</option> | |
| <option value="train">Train</option> | |
| </select> | |
| <label>Sort by:</label> | |
| <select id="sort-col" onchange="filterTable()"> | |
| <option value="sharpe">Sharpe</option> | |
| <option value="pnl">P&L</option> | |
| <option value="tpd">Trades/Day</option> | |
| <option value="edge">Avg Edge</option> | |
| <option value="win">Win Rate</option> | |
| </select> | |
| </div> | |
| <table id="results-table"> | |
| <thead> | |
| <tr> | |
| <th>Split</th><th>Threshold (bps)</th><th>Distance</th> | |
| <th>Trades</th><th>Win %</th><th>Avg Edge (¢)</th> | |
| <th>P&L ($)</th><th>Sharpe</th><th>Trades/Day</th> | |
| </tr> | |
| </thead> | |
| <tbody id="table-body"></tbody> | |
| </table> | |
| <p style="color: #484f58; font-size: 11px; margin-top: 30px; text-align: center;"> | |
| Generated: 2026-03-03 14:30 UTC | | |
| Data: ClickHouse on helsinki-pm | Params: lookback=200ms, horizon=5s, cooldown=5s, entry_after=30s, stop_before=60s, $5/trade, maker (0 fees) | |
| </p> | |
| <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 distLabels = distances.map(d => '≤' + d.toFixed(2)); | |
| const testSharpe = [[314.1779401451242, 419.6529295967845, 497.43143130096695, 554.2698341961622, 607.7691314049625, 686.5933023008294, 575.9636500769822], [206.9332826843506, 270.5868406461078, 323.21901297634327, 358.5723597712048, 395.28820488663706, 451.3830715429102, 359.1644806755912], [165.86213415100943, 206.9457722844464, 244.38227341436087, 270.1393173660857, 299.0996031950838, 339.855806090798, 275.6535430717794], [162.94088666298654, 189.18402485119225, 224.62012835552628, 243.33863193963504, 263.0249112576207, 293.72945883281415, 254.12502086135925], [139.2287935327244, 151.69780080030128, 176.6801469116127, 191.93427698827784, 205.71226058674108, 233.53028084413228, 203.6413042561734], [122.59107904299223, 137.39523324595095, 151.6536080112207, 163.0613947651143, 174.81288900994292, 198.11142293712695, 172.7945901941224], [103.36411065591687, 120.72867534231386, 136.76796053445634, 146.76068684334382, 157.20604572902803, 169.93206912113268, 143.61092198355936], [88.88515575439244, 102.19125036627192, 117.24672712606518, 124.85506323478796, 133.51306608912046, 145.07192001190745, 134.45031944733842], [76.60682540772851, 90.85786008195144, 106.33560151319033, 112.70310451356866, 119.6514068679034, 129.3172619439286, 117.8358915963362], [63.347764846613416, 81.63256281043864, 94.14824233727062, 98.80792118518823, 105.96686225890016, 114.76718036633764, 107.82530126092372], [59.83216227204602, 74.79471648943283, 84.16287512989066, 85.08462385928921, 89.81246597067167, 97.6557702194458, 92.99971393547816], [53.63299234166411, 69.66556894930065, 75.41297115754236, 76.05775772754139, 80.42796884988289, 83.92952220406012, 79.4731499734464], [55.14274930048581, 66.99662923921234, 73.75335858560065, 69.50325466187417, 73.84600367884192, 74.58387782562627, 71.46611712118924], [49.35988124536584, 61.17654780901137, 67.76236061026218, 63.06342012741487, 64.1581509445053, 62.88108281105708, 61.87336463854221], [38.84843565885243, 52.79880487440525, 61.20736314650492, 56.39816992944292, 58.81791613100501, 53.28909519164607, 53.09310329407588]]; | |
| const testPnl = [[458.14958572149465, 680.512210644686, 872.3016728023974, 1017.9219223713352, 1157.9198435637284, 1373.23519342579, 1422.8038707482326], [186.2017277033633, 276.404120869547, 356.724000404628, 411.9789944665126, 471.8711358133451, 568.5448373920835, 576.5606779927348], [93.61680076144955, 141.67217555995842, 180.38343962024928, 208.6764907381916, 239.6043235377938, 289.12063389884605, 295.85133922480105], [65.56223185619264, 99.46567411415606, 127.48959513394948, 144.69404005599694, 163.15168310617003, 193.89569782024452, 203.63069023585885], [45.12385694844328, 68.41962442687826, 85.5102239431737, 98.0583557665542, 109.78048416163784, 132.50632145531256, 140.65155195992634], [35.0973346505427, 55.56942572673788, 65.69017429774388, 74.13552327739055, 82.85314726049896, 100.22337450982856, 108.16443248039876], [27.5773462562213, 45.75533046890683, 54.94776323586444, 61.48289436549536, 68.78046344332634, 79.84793213131026, 85.1966434257329], [19.56042986929249, 34.350298351208274, 42.16346851523824, 46.24582186709137, 51.642954320297775, 60.85264036475905, 67.04964491181565], [15.90834494752511, 28.46395428038771, 34.72397933000092, 37.614009970461616, 42.081638385604734, 49.81200067109803, 54.54240042703596], [12.631137863879172, 24.71346267791332, 29.582792018171208, 31.947822658631885, 36.415451073775, 43.46187331644176, 48.00008900172247], [11.38119766819378, 21.656738751591234, 25.470469273374366, 26.684400266593347, 29.58682748948609, 35.59282462480796, 39.52874413496648], [10.038793394597898, 19.54675466781416, 21.946809602437558, 23.16074059565653, 25.484213369957416, 29.199783439956256, 31.134108187534203], [9.755198769737875, 15.16985209953738, 17.56990703416077, 17.53383802737976, 19.48277627879468, 21.781604413309644, 23.68267585427749], [8.341453823027107, 13.213412852308476, 15.61346778693187, 15.577398780150856, 16.626337031565775, 18.039719337936283, 19.89003970594276], [6.316208204254447, 11.188167233535816, 13.443555424616772, 13.40748641783576, 14.231424669250682, 14.323274310896632, 16.173594678903108]]; | |
| const testTradesDay = [[1766.5, 2436.5, 3102.5, 3652.0, 4192.5, 5383.5, 7431.0], [574.0, 793.0, 1018.5, 1187.0, 1368.5, 1773.5, 2546.5], [212.5, 297.0, 381.0, 449.0, 525.0, 701.5, 1059.5], [108.5, 154.0, 202.0, 234.5, 274.0, 367.5, 565.0], [60.0, 87.5, 113.0, 135.0, 157.5, 214.0, 343.5], [39.5, 56.5, 72.0, 85.0, 99.0, 136.5, 225.0], [27.5, 39.5, 51.0, 58.5, 68.5, 93.0, 154.5], [18.5, 27.0, 36.0, 42.0, 49.0, 69.0, 112.0], [14.5, 21.0, 27.5, 31.0, 36.5, 52.0, 82.0], [10.5, 16.5, 21.0, 24.0, 29.5, 43.5, 64.0], [8.5, 13.0, 16.5, 18.5, 23.5, 36.0, 52.0], [7.5, 11.0, 13.0, 15.0, 18.5, 26.5, 39.5], [6.5, 9.0, 11.0, 12.0, 15.0, 20.5, 30.5], [5.0, 7.0, 9.0, 10.0, 12.0, 16.0, 23.5], [4.0, 6.0, 7.5, 8.5, 9.5, 12.0, 19.0]]; | |
| const testWinrate = [[0.7299745258986697, 0.7510773650728504, 0.7553585817888799, 0.7584884994523549, 0.759809183064997, 0.7538775889291354, 0.6697618086394832], [0.7430313588850174, 0.7711223203026482, 0.783014236622484, 0.7864363942712721, 0.7902813299232737, 0.7868621370171976, 0.6854506184959749], [0.7835294117647059, 0.8080808080808081, 0.8083989501312336, 0.8140311804008908, 0.8171428571428572, 0.8089807555238774, 0.6989145823501651], [0.815668202764977, 0.8409090909090909, 0.8539603960396039, 0.8550106609808102, 0.8521897810218978, 0.8462585034013606, 0.7230088495575221], [0.8333333333333334, 0.8514285714285714, 0.8584070796460177, 0.8629629629629629, 0.8571428571428571, 0.8621495327102804, 0.7336244541484717], [0.8607594936708861, 0.8938053097345132, 0.8819444444444444, 0.888235294117647, 0.8838383838383839, 0.8937728937728938, 0.7688888888888888], [0.8727272727272727, 0.8987341772151899, 0.9117647058823528, 0.9145299145299144, 0.9124087591240876, 0.913978494623656, 0.7831715210355987], [0.8918918918918919, 0.9074074074074074, 0.9166666666666666, 0.9166666666666666, 0.9183673469387756, 0.9202898550724636, 0.7901785714285714], [0.8620689655172413, 0.9047619047619048, 0.9272727272727272, 0.9193548387096774, 0.9178082191780822, 0.9134615384615384, 0.7621951219512195], [0.8571428571428571, 0.9090909090909092, 0.9285714285714286, 0.9166666666666666, 0.9152542372881356, 0.9080459770114944, 0.7734375], [0.8823529411764706, 0.9230769230769232, 0.9393939393939394, 0.918918918918919, 0.9148936170212766, 0.9027777777777778, 0.7596153846153846], [0.8666666666666667, 0.9090909090909092, 0.9230769230769232, 0.9, 0.8918918918918919, 0.8679245283018868, 0.7341772151898734], [0.9230769230769232, 0.9444444444444444, 0.9545454545454546, 0.9166666666666666, 0.9, 0.8780487804878049, 0.7704918032786885], [0.9, 0.9285714285714286, 0.9444444444444444, 0.9, 0.875, 0.84375, 0.7659574468085106], [0.875, 0.9166666666666666, 0.9333333333333332, 0.8823529411764706, 0.8947368421052632, 0.8333333333333334, 0.7631578947368421]]; | |
| const testEdge = [[2.593544215802404, 2.7929908091306626, 2.811608937316349, 2.787299896964225, 2.761883944099531, 2.5508223152703446, 1.9146869475820647], [3.2439325383861206, 3.4855500740169854, 3.5024447756959063, 3.4707581673674186, 3.448090141127841, 3.2057786151231102, 2.2641298959070677], [4.405496506421156, 4.770106921210722, 4.734473480846438, 4.647583312654601, 4.563891876910358, 4.121463063419046, 2.7923675245379997], [6.042602014395635, 6.458810007412732, 6.311366095740074, 6.170321537569167, 5.954440989276277, 5.276073410074681, 3.604083013024051], [7.520642824740547, 7.819385648786087, 7.567276455148114, 7.263581908633643, 6.970189470580181, 6.191884180154791, 4.094659445703823], [8.885401177352582, 9.835296588803166, 9.123635319131097, 8.721826267928298, 8.369004773787776, 7.342371758961799, 4.807308110239946], [10.028125911353198, 11.583627966811855, 10.77407122271852, 10.509896472734251, 10.040943568368812, 8.585799153904329, 5.514345852798246], [10.573205334752696, 12.722332722669735, 11.712074587566176, 11.010909968355092, 10.53937843271383, 8.819223241269425, 5.9865754385549685], [10.971272377603526, 13.554263943041764, 12.626901574545792, 12.133551603374713, 11.529215996056088, 9.579230898288085, 6.651512247199509], [12.029655108456357, 14.97785616843231, 14.087043818176769, 13.311592774429954, 12.344220702974578, 9.991235245159023, 7.500013906519137], [13.389644315522094, 16.659029808916333, 15.436648044469312, 14.424000144104514, 12.590139357228129, 9.886895729113323, 7.601681564416631], [13.385057859463863, 17.769776970740143, 16.882161232644272, 15.440493730437693, 13.775250470247254, 11.018786203757076, 7.882052705704861], [15.00799810728904, 16.8553912217082, 15.972642758327972, 14.611531689483137, 12.988517519196456, 10.625172884541293, 7.764811755500816], [16.68290764605422, 18.876304074726395, 17.34829754103541, 15.577398780150858, 13.85528085963815, 11.274824586210178, 8.463846683379897], [15.79052051063612, 18.646945389226364, 17.924740566155695, 15.773513432747954, 14.980447020263874, 11.936061925747197, 8.512418252054266]]; | |
| const trainSharpe = [[330.5204097488047, 438.5582107268464, 525.1669360007832, 591.3309641611175, 644.7355648365532, 723.5500290246069, 601.1662748048199], [179.1732146093654, 235.9628710492549, 286.8452968643347, 326.7574344195218, 356.1709739882656, 403.0312829512269, 323.9753818463457], [98.3952929107673, 135.62286757924312, 170.35969920661492, 188.80647458006345, 213.57292789463912, 242.9377709019654, 193.73435198025535], [74.38612327899382, 100.15410216485095, 127.07018389496508, 141.44199073302252, 165.25256354550132, 187.08778834040984, 137.7554087139832], [48.16592998671864, 70.8277322464416, 96.8107671899918, 108.8222726112693, 127.5172828152764, 142.49233567346045, 91.8737524432808], [25.01829269972688, 45.14478692822234, 63.820327942203264, 75.56293835870099, 93.78005321107752, 107.1169136820133, 71.93808786097853], [68.59710132565752, 86.48415653288097, 103.87503362488836, 102.49121536696384, 125.2290614202109, 132.4471471257672, 66.40116873631177], [57.360026324483904, 69.98041541953796, 82.68622467487764, 80.76129258606107, 101.89159522440264, 111.79737008317744, 45.17882920073753], [41.775061123369966, 51.52129766513217, 63.39812514825532, 60.82113277004823, 72.81602415803056, 81.8861035182073, 27.46737907959712], [40.49200952290103, 51.92464564479396, 62.073611409022, 55.120534010980265, 60.80666718991687, 70.26338263204312, 17.849184049219843], [26.61779157536117, 40.447508977102174, 49.66492392723619, 36.16239041708815, 40.44318441730401, 50.32626980936328, 5.70303235566396], [20.96844864590519, 35.58320662083495, 44.45491999159383, 32.44388849265798, 36.83496507695123, 45.73099422266175, 2.2009674939676884], [20.96844864590519, 25.781768299857088, 35.8506314131893, 17.049411469036563, 17.049411469036563, 25.147078326629966, -3.037851582590925], [20.96844864590519, 25.781768299857088, 27.348580188869025, 10.920134328840604, 10.920134328840604, 19.55518741253865, -6.54321179255806], [20.96844864590519, 20.96844864590519, 22.5653231481819, 8.331176510728577, 8.331176510728577, 13.173797448287322, -1.6811389715074103]]; | |
| const trainPnl = [[452.6943490301316, 662.4771931262035, 860.7995085645288, 1021.8629236766516, 1161.156874635351, 1369.296067088556, 1410.8812369427528], [141.19443349257065, 206.8181845815929, 273.0954658342817, 327.5483396292917, 372.0306154362388, 439.7657473970541, 444.1476012206802], [50.944026309195856, 75.74219619338297, 104.7920936887314, 122.76116002979136, 144.37166590695293, 172.36863191763217, 175.40230571733372], [26.99641252147785, 39.98229770376565, 56.2336758849075, 67.11628743129093, 81.40911701350726, 96.69380984711566, 94.90466385364992], [13.98368869129012, 22.838267291405067, 34.65807986573923, 42.63253288707257, 51.53091555818372, 60.49282512415691, 56.704385336622295], [6.901320792134442, 13.525758056498, 20.257486779670543, 26.252812257230136, 33.81844461170291, 40.0827286847928, 37.60281659224705], [8.445449062437469, 13.48144723194066, 17.86049976658235, 22.685931443073446, 29.456766548189734, 34.00001829325417, 29.98394047270098], [6.362021848306261, 8.532102729683862, 11.242938186952308, 15.406117619978712, 20.070539816610744, 23.64791555803449, 19.09340355257589], [4.093005765531746, 5.663086646909347, 7.998922104177792, 11.17200473327058, 13.641542323312397, 16.109065123559677, 11.202053118101068], [3.863173832758637, 5.361007007714219, 7.496842464982663, 9.65930009407545, 10.760644180096955, 13.045608473070358, 7.077323923225181], [1.8624275641019208, 3.1363417674953684, 4.70764283249278, 5.680673148810237, 6.430673148810237, 8.44063744178364, 2.165050067850528], [1.4624275641019209, 2.736341767495368, 4.099408905304554, 5.072439221622011, 5.822439221622011, 7.392867141890021, 0.8316297679569076], [1.4624275641019209, 1.8124275641019203, 2.9934275641019203, 2.46542756410192, 2.46542756410192, 3.6796924625011416, -0.931544911431969], [1.4624275641019209, 1.8124275641019203, 1.98742756410192, 1.4594275641019203, 1.4594275641019203, 2.6736924625011413, -1.9375449114319692], [1.4624275641019209, 1.4624275641019209, 1.6374275641019205, 1.109427564101921, 1.109427564101921, 1.773692462501142, -0.3887552362436278]]; | |
| const tableData = [{"split": "train", "thresh": 1.0, "dist": 0.1, "trades": 3305, "win": 73.1, "edge": 2.739, "pnl": 452.69, "sharpe": 330.52, "tpd": 1652.5}, {"split": "train", "thresh": 1.0, "dist": 0.15, "trades": 4635, "win": 74.4, "edge": 2.859, "pnl": 662.48, "sharpe": 438.56, "tpd": 2317.5}, {"split": "train", "thresh": 1.0, "dist": 0.2, "trades": 6019, "win": 74.7, "edge": 2.86, "pnl": 860.8, "sharpe": 525.17, "tpd": 3009.5}, {"split": "train", "thresh": 1.0, "dist": 0.25, "trades": 7155, "win": 75.0, "edge": 2.856, "pnl": 1021.86, "sharpe": 591.33, "tpd": 3577.5}, {"split": "train", "thresh": 1.0, "dist": 0.3, "trades": 8222, "win": 75.5, "edge": 2.825, "pnl": 1161.16, "sharpe": 644.74, "tpd": 4111.0}, {"split": "train", "thresh": 1.0, "dist": 0.4, "trades": 10499, "win": 75.0, "edge": 2.608, "pnl": 1369.3, "sharpe": 723.55, "tpd": 5249.5}, {"split": "train", "thresh": 1.0, "dist": 0.5, "trades": 14493, "win": 68.6, "edge": 1.947, "pnl": 1410.88, "sharpe": 601.17, "tpd": 7246.5}, {"split": "train", "thresh": 1.5, "dist": 0.1, "trades": 866, "win": 76.7, "edge": 3.261, "pnl": 141.19, "sharpe": 179.17, "tpd": 433.0}, {"split": "train", "thresh": 1.5, "dist": 0.15, "trades": 1218, "win": 77.4, "edge": 3.396, "pnl": 206.82, "sharpe": 235.96, "tpd": 609.0}, {"split": "train", "thresh": 1.5, "dist": 0.2, "trades": 1592, "win": 77.6, "edge": 3.431, "pnl": 273.1, "sharpe": 286.85, "tpd": 796.0}, {"split": "train", "thresh": 1.5, "dist": 0.25, "trades": 1891, "win": 78.3, "edge": 3.464, "pnl": 327.55, "sharpe": 326.76, "tpd": 945.5}, {"split": "train", "thresh": 1.5, "dist": 0.3, "trades": 2174, "win": 78.7, "edge": 3.423, "pnl": 372.03, "sharpe": 356.17, "tpd": 1087.0}, {"split": "train", "thresh": 1.5, "dist": 0.4, "trades": 2831, "win": 78.2, "edge": 3.107, "pnl": 439.77, "sharpe": 403.03, "tpd": 1415.5}, {"split": "train", "thresh": 1.5, "dist": 0.5, "trades": 3981, "win": 71.6, "edge": 2.231, "pnl": 444.15, "sharpe": 323.98, "tpd": 1990.5}, {"split": "train", "thresh": 2.0, "dist": 0.1, "trades": 274, "win": 75.9, "edge": 3.719, "pnl": 50.94, "sharpe": 98.4, "tpd": 137.0}, {"split": "train", "thresh": 2.0, "dist": 0.15, "trades": 387, "win": 76.5, "edge": 3.914, "pnl": 75.74, "sharpe": 135.62, "tpd": 193.5}, {"split": "train", "thresh": 2.0, "dist": 0.2, "trades": 516, "win": 77.5, "edge": 4.062, "pnl": 104.79, "sharpe": 170.36, "tpd": 258.0}, {"split": "train", "thresh": 2.0, "dist": 0.25, "trades": 604, "win": 78.6, "edge": 4.065, "pnl": 122.76, "sharpe": 188.81, "tpd": 302.0}, {"split": "train", "thresh": 2.0, "dist": 0.3, "trades": 701, "win": 79.9, "edge": 4.119, "pnl": 144.37, "sharpe": 213.57, "tpd": 350.5}, {"split": "train", "thresh": 2.0, "dist": 0.4, "trades": 945, "win": 79.4, "edge": 3.648, "pnl": 172.37, "sharpe": 242.94, "tpd": 472.5}, {"split": "train", "thresh": 2.0, "dist": 0.5, "trades": 1371, "win": 72.9, "edge": 2.559, "pnl": 175.4, "sharpe": 193.73, "tpd": 685.5}, {"split": "train", "thresh": 2.5, "dist": 0.1, "trades": 126, "win": 81.0, "edge": 4.285, "pnl": 27.0, "sharpe": 74.39, "tpd": 63.0}, {"split": "train", "thresh": 2.5, "dist": 0.15, "trades": 170, "win": 80.6, "edge": 4.704, "pnl": 39.98, "sharpe": 100.15, "tpd": 85.0}, {"split": "train", "thresh": 2.5, "dist": 0.2, "trades": 222, "win": 81.5, "edge": 5.066, "pnl": 56.23, "sharpe": 127.07, "tpd": 111.0}, {"split": "train", "thresh": 2.5, "dist": 0.25, "trades": 262, "win": 82.1, "edge": 5.123, "pnl": 67.12, "sharpe": 141.44, "tpd": 131.0}, {"split": "train", "thresh": 2.5, "dist": 0.3, "trades": 310, "win": 83.5, "edge": 5.252, "pnl": 81.41, "sharpe": 165.25, "tpd": 155.0}, {"split": "train", "thresh": 2.5, "dist": 0.4, "trades": 423, "win": 83.5, "edge": 4.572, "pnl": 96.69, "sharpe": 187.09, "tpd": 211.5}, {"split": "train", "thresh": 2.5, "dist": 0.5, "trades": 619, "win": 76.1, "edge": 3.066, "pnl": 94.9, "sharpe": 137.76, "tpd": 309.5}, {"split": "train", "thresh": 3.0, "dist": 0.1, "trades": 66, "win": 83.3, "edge": 4.237, "pnl": 13.98, "sharpe": 48.17, "tpd": 33.0}, {"split": "train", "thresh": 3.0, "dist": 0.15, "trades": 89, "win": 84.3, "edge": 5.132, "pnl": 22.84, "sharpe": 70.83, "tpd": 44.5}, {"split": "train", "thresh": 3.0, "dist": 0.2, "trades": 122, "win": 85.2, "edge": 5.682, "pnl": 34.66, "sharpe": 96.81, "tpd": 61.0}, {"split": "train", "thresh": 3.0, "dist": 0.25, "trades": 145, "win": 85.5, "edge": 5.88, "pnl": 42.63, "sharpe": 108.82, "tpd": 72.5}, {"split": "train", "thresh": 3.0, "dist": 0.3, "trades": 171, "win": 86.5, "edge": 6.027, "pnl": 51.53, "sharpe": 127.52, "tpd": 85.5}, {"split": "train", "thresh": 3.0, "dist": 0.4, "trades": 231, "win": 85.3, "edge": 5.237, "pnl": 60.49, "sharpe": 142.49, "tpd": 115.5}, {"split": "train", "thresh": 3.0, "dist": 0.5, "trades": 350, "win": 76.6, "edge": 3.24, "pnl": 56.7, "sharpe": 91.87, "tpd": 175.0}, {"split": "train", "thresh": 3.5, "dist": 0.1, "trades": 33, "win": 78.8, "edge": 4.183, "pnl": 6.9, "sharpe": 25.02, "tpd": 16.5}, {"split": "train", "thresh": 3.5, "dist": 0.15, "trades": 49, "win": 83.7, "edge": 5.521, "pnl": 13.53, "sharpe": 45.14, "tpd": 24.5}, {"split": "train", "thresh": 3.5, "dist": 0.2, "trades": 69, "win": 85.5, "edge": 5.872, "pnl": 20.26, "sharpe": 63.82, "tpd": 34.5}, {"split": "train", "thresh": 3.5, "dist": 0.25, "trades": 86, "win": 86.0, "edge": 6.105, "pnl": 26.25, "sharpe": 75.56, "tpd": 43.0}, {"split": "train", "thresh": 3.5, "dist": 0.3, "trades": 108, "win": 87.0, "edge": 6.263, "pnl": 33.82, "sharpe": 93.78, "tpd": 54.0}, {"split": "train", "thresh": 3.5, "dist": 0.4, "trades": 143, "win": 86.0, "edge": 5.606, "pnl": 40.08, "sharpe": 107.12, "tpd": 71.5}, {"split": "train", "thresh": 3.5, "dist": 0.5, "trades": 214, "win": 79.0, "edge": 3.514, "pnl": 37.6, "sharpe": 71.94, "tpd": 107.0}, {"split": "train", "thresh": 4.0, "dist": 0.1, "trades": 20, "win": 80.0, "edge": 8.445, "pnl": 8.45, "sharpe": 68.6, "tpd": 10.0}, {"split": "train", "thresh": 4.0, "dist": 0.15, "trades": 30, "win": 86.7, "edge": 8.988, "pnl": 13.48, "sharpe": 86.48, "tpd": 15.0}, {"split": "train", "thresh": 4.0, "dist": 0.2, "trades": 41, "win": 90.2, "edge": 8.712, "pnl": 17.86, "sharpe": 103.88, "tpd": 20.5}, {"split": "train", "thresh": 4.0, "dist": 0.25, "trades": 54, "win": 88.9, "edge": 8.402, "pnl": 22.69, "sharpe": 102.49, "tpd": 27.0}, {"split": "train", "thresh": 4.0, "dist": 0.3, "trades": 72, "win": 90.3, "edge": 8.182, "pnl": 29.46, "sharpe": 125.23, "tpd": 36.0}, {"split": "train", "thresh": 4.0, "dist": 0.4, "trades": 95, "win": 88.4, "edge": 7.158, "pnl": 34.0, "sharpe": 132.45, "tpd": 47.5}, {"split": "train", "thresh": 4.0, "dist": 0.5, "trades": 141, "win": 80.9, "edge": 4.253, "pnl": 29.98, "sharpe": 66.4, "tpd": 70.5}, {"split": "train", "thresh": 4.5, "dist": 0.1, "trades": 14, "win": 78.6, "edge": 9.089, "pnl": 6.36, "sharpe": 57.36, "tpd": 7.0}, {"split": "train", "thresh": 4.5, "dist": 0.15, "trades": 20, "win": 85.0, "edge": 8.532, "pnl": 8.53, "sharpe": 69.98, "tpd": 10.0}, {"split": "train", "thresh": 4.5, "dist": 0.2, "trades": 28, "win": 89.3, "edge": 8.031, "pnl": 11.24, "sharpe": 82.69, "tpd": 14.0}, {"split": "train", "thresh": 4.5, "dist": 0.25, "trades": 38, "win": 89.5, "edge": 8.108, "pnl": 15.41, "sharpe": 80.76, "tpd": 19.0}, {"split": "train", "thresh": 4.5, "dist": 0.3, "trades": 50, "win": 92.0, "edge": 8.028, "pnl": 20.07, "sharpe": 101.89, "tpd": 25.0}, {"split": "train", "thresh": 4.5, "dist": 0.4, "trades": 64, "win": 92.2, "edge": 7.39, "pnl": 23.65, "sharpe": 111.8, "tpd": 32.0}, {"split": "train", "thresh": 4.5, "dist": 0.5, "trades": 100, "win": 81.0, "edge": 3.819, "pnl": 19.09, "sharpe": 45.18, "tpd": 50.0}, {"split": "train", "thresh": 5.0, "dist": 0.1, "trades": 8, "win": 75.0, "edge": 10.233, "pnl": 4.09, "sharpe": 41.78, "tpd": 4.0}, {"split": "train", "thresh": 5.0, "dist": 0.15, "trades": 12, "win": 83.3, "edge": 9.438, "pnl": 5.66, "sharpe": 51.52, "tpd": 6.0}, {"split": "train", "thresh": 5.0, "dist": 0.2, "trades": 19, "win": 89.5, "edge": 8.42, "pnl": 8.0, "sharpe": 63.4, "tpd": 9.5}, {"split": "train", "thresh": 5.0, "dist": 0.25, "trades": 27, "win": 88.9, "edge": 8.276, "pnl": 11.17, "sharpe": 60.82, "tpd": 13.5}, {"split": "train", "thresh": 5.0, "dist": 0.3, "trades": 34, "win": 91.2, "edge": 8.024, "pnl": 13.64, "sharpe": 72.82, "tpd": 17.0}, {"split": "train", "thresh": 5.0, "dist": 0.4, "trades": 46, "win": 91.3, "edge": 7.004, "pnl": 16.11, "sharpe": 81.89, "tpd": 23.0}, {"split": "train", "thresh": 5.0, "dist": 0.5, "trades": 76, "win": 77.6, "edge": 2.948, "pnl": 11.2, "sharpe": 27.47, "tpd": 38.0}, {"split": "train", "thresh": 5.5, "dist": 0.1, "trades": 7, "win": 71.4, "edge": 11.038, "pnl": 3.86, "sharpe": 40.49, "tpd": 3.5}, {"split": "train", "thresh": 5.5, "dist": 0.15, "trades": 10, "win": 80.0, "edge": 10.722, "pnl": 5.36, "sharpe": 51.92, "tpd": 5.0}, {"split": "train", "thresh": 5.5, "dist": 0.2, "trades": 16, "win": 87.5, "edge": 9.371, "pnl": 7.5, "sharpe": 62.07, "tpd": 8.0}, {"split": "train", "thresh": 5.5, "dist": 0.25, "trades": 23, "win": 87.0, "edge": 8.399, "pnl": 9.66, "sharpe": 55.12, "tpd": 11.5}, {"split": "train", "thresh": 5.5, "dist": 0.3, "trades": 25, "win": 88.0, "edge": 8.609, "pnl": 10.76, "sharpe": 60.81, "tpd": 12.5}, {"split": "train", "thresh": 5.5, "dist": 0.4, "trades": 35, "win": 88.6, "edge": 7.455, "pnl": 13.05, "sharpe": 70.26, "tpd": 17.5}, {"split": "train", "thresh": 5.5, "dist": 0.5, "trades": 61, "win": 75.4, "edge": 2.32, "pnl": 7.08, "sharpe": 17.85, "tpd": 30.5}, {"split": "train", "thresh": 6.0, "dist": 0.1, "trades": 4, "win": 75.0, "edge": 9.312, "pnl": 1.86, "sharpe": 26.62, "tpd": 2.0}, {"split": "train", "thresh": 6.0, "dist": 0.15, "trades": 6, "win": 83.3, "edge": 10.454, "pnl": 3.14, "sharpe": 40.45, "tpd": 3.0}, {"split": "train", "thresh": 6.0, "dist": 0.2, "trades": 10, "win": 90.0, "edge": 9.415, "pnl": 4.71, "sharpe": 49.66, "tpd": 5.0}, {"split": "train", "thresh": 6.0, "dist": 0.25, "trades": 14, "win": 85.7, "edge": 8.115, "pnl": 5.68, "sharpe": 36.16, "tpd": 7.0}, {"split": "train", "thresh": 6.0, "dist": 0.3, "trades": 15, "win": 86.7, "edge": 8.574, "pnl": 6.43, "sharpe": 40.44, "tpd": 7.5}, {"split": "train", "thresh": 6.0, "dist": 0.4, "trades": 24, "win": 87.5, "edge": 7.034, "pnl": 8.44, "sharpe": 50.33, "tpd": 12.0}, {"split": "train", "thresh": 6.0, "dist": 0.5, "trades": 44, "win": 70.5, "edge": 0.984, "pnl": 2.17, "sharpe": 5.7, "tpd": 22.0}, {"split": "train", "thresh": 6.5, "dist": 0.1, "trades": 3, "win": 66.7, "edge": 9.75, "pnl": 1.46, "sharpe": 20.97, "tpd": 1.5}, {"split": "train", "thresh": 6.5, "dist": 0.15, "trades": 5, "win": 80.0, "edge": 10.945, "pnl": 2.74, "sharpe": 35.58, "tpd": 2.5}, {"split": "train", "thresh": 6.5, "dist": 0.2, "trades": 8, "win": 87.5, "edge": 10.249, "pnl": 4.1, "sharpe": 44.45, "tpd": 4.0}, {"split": "train", "thresh": 6.5, "dist": 0.25, "trades": 12, "win": 83.3, "edge": 8.454, "pnl": 5.07, "sharpe": 32.44, "tpd": 6.0}, {"split": "train", "thresh": 6.5, "dist": 0.3, "trades": 13, "win": 84.6, "edge": 8.958, "pnl": 5.82, "sharpe": 36.83, "tpd": 6.5}, {"split": "train", "thresh": 6.5, "dist": 0.4, "trades": 18, "win": 88.9, "edge": 8.214, "pnl": 7.39, "sharpe": 45.73, "tpd": 9.0}, {"split": "train", "thresh": 6.5, "dist": 0.5, "trades": 32, "win": 71.9, "edge": 0.52, "pnl": 0.83, "sharpe": 2.2, "tpd": 16.0}, {"split": "train", "thresh": 7.0, "dist": 0.1, "trades": 3, "win": 66.7, "edge": 9.75, "pnl": 1.46, "sharpe": 20.97, "tpd": 1.5}, {"split": "train", "thresh": 7.0, "dist": 0.15, "trades": 4, "win": 75.0, "edge": 9.062, "pnl": 1.81, "sharpe": 25.78, "tpd": 2.0}, {"split": "train", "thresh": 7.0, "dist": 0.2, "trades": 6, "win": 83.3, "edge": 9.978, "pnl": 2.99, "sharpe": 35.85, "tpd": 3.0}, {"split": "train", "thresh": 7.0, "dist": 0.25, "trades": 8, "win": 75.0, "edge": 6.164, "pnl": 2.47, "sharpe": 17.05, "tpd": 4.0}, {"split": "train", "thresh": 7.0, "dist": 0.3, "trades": 8, "win": 75.0, "edge": 6.164, "pnl": 2.47, "sharpe": 17.05, "tpd": 4.0}, {"split": "train", "thresh": 7.0, "dist": 0.4, "trades": 11, "win": 81.8, "edge": 6.69, "pnl": 3.68, "sharpe": 25.15, "tpd": 5.5}, {"split": "train", "thresh": 7.0, "dist": 0.5, "trades": 21, "win": 66.7, "edge": -0.887, "pnl": -0.93, "sharpe": -3.04, "tpd": 10.5}, {"split": "train", "thresh": 7.5, "dist": 0.1, "trades": 3, "win": 66.7, "edge": 9.75, "pnl": 1.46, "sharpe": 20.97, "tpd": 1.5}, {"split": "train", "thresh": 7.5, "dist": 0.15, "trades": 4, "win": 75.0, "edge": 9.062, "pnl": 1.81, "sharpe": 25.78, "tpd": 2.0}, {"split": "train", "thresh": 7.5, "dist": 0.2, "trades": 5, "win": 80.0, "edge": 7.95, "pnl": 1.99, "sharpe": 27.35, "tpd": 2.5}, {"split": "train", "thresh": 7.5, "dist": 0.25, "trades": 7, "win": 71.4, "edge": 4.17, "pnl": 1.46, "sharpe": 10.92, "tpd": 3.5}, {"split": "train", "thresh": 7.5, "dist": 0.3, "trades": 7, "win": 71.4, "edge": 4.17, "pnl": 1.46, "sharpe": 10.92, "tpd": 3.5}, {"split": "train", "thresh": 7.5, "dist": 0.4, "trades": 10, "win": 80.0, "edge": 5.347, "pnl": 2.67, "sharpe": 19.56, "tpd": 5.0}, {"split": "train", "thresh": 7.5, "dist": 0.5, "trades": 20, "win": 65.0, "edge": -1.938, "pnl": -1.94, "sharpe": -6.54, "tpd": 10.0}, {"split": "train", "thresh": 8.0, "dist": 0.1, "trades": 3, "win": 66.7, "edge": 9.75, "pnl": 1.46, "sharpe": 20.97, "tpd": 1.5}, {"split": "train", "thresh": 8.0, "dist": 0.15, "trades": 3, "win": 66.7, "edge": 9.75, "pnl": 1.46, "sharpe": 20.97, "tpd": 1.5}, {"split": "train", "thresh": 8.0, "dist": 0.2, "trades": 4, "win": 75.0, "edge": 8.187, "pnl": 1.64, "sharpe": 22.57, "tpd": 2.0}, {"split": "train", "thresh": 8.0, "dist": 0.25, "trades": 6, "win": 66.7, "edge": 3.698, "pnl": 1.11, "sharpe": 8.33, "tpd": 3.0}, {"split": "train", "thresh": 8.0, "dist": 0.3, "trades": 6, "win": 66.7, "edge": 3.698, "pnl": 1.11, "sharpe": 8.33, "tpd": 3.0}, {"split": "train", "thresh": 8.0, "dist": 0.4, "trades": 8, "win": 75.0, "edge": 4.434, "pnl": 1.77, "sharpe": 13.17, "tpd": 4.0}, {"split": "train", "thresh": 8.0, "dist": 0.5, "trades": 16, "win": 68.8, "edge": -0.486, "pnl": -0.39, "sharpe": -1.68, "tpd": 8.0}, {"split": "test", "thresh": 1.0, "dist": 0.1, "trades": 3533, "win": 73.0, "edge": 2.594, "pnl": 458.15, "sharpe": 314.18, "tpd": 1766.5}, {"split": "test", "thresh": 1.0, "dist": 0.15, "trades": 4873, "win": 75.1, "edge": 2.793, "pnl": 680.51, "sharpe": 419.65, "tpd": 2436.5}, {"split": "test", "thresh": 1.0, "dist": 0.2, "trades": 6205, "win": 75.5, "edge": 2.812, "pnl": 872.3, "sharpe": 497.43, "tpd": 3102.5}, {"split": "test", "thresh": 1.0, "dist": 0.25, "trades": 7304, "win": 75.8, "edge": 2.787, "pnl": 1017.92, "sharpe": 554.27, "tpd": 3652.0}, {"split": "test", "thresh": 1.0, "dist": 0.3, "trades": 8385, "win": 76.0, "edge": 2.762, "pnl": 1157.92, "sharpe": 607.77, "tpd": 4192.5}, {"split": "test", "thresh": 1.0, "dist": 0.4, "trades": 10767, "win": 75.4, "edge": 2.551, "pnl": 1373.24, "sharpe": 686.59, "tpd": 5383.5}, {"split": "test", "thresh": 1.0, "dist": 0.5, "trades": 14862, "win": 67.0, "edge": 1.915, "pnl": 1422.8, "sharpe": 575.96, "tpd": 7431.0}, {"split": "test", "thresh": 1.5, "dist": 0.1, "trades": 1148, "win": 74.3, "edge": 3.244, "pnl": 186.2, "sharpe": 206.93, "tpd": 574.0}, {"split": "test", "thresh": 1.5, "dist": 0.15, "trades": 1586, "win": 77.1, "edge": 3.486, "pnl": 276.4, "sharpe": 270.59, "tpd": 793.0}, {"split": "test", "thresh": 1.5, "dist": 0.2, "trades": 2037, "win": 78.3, "edge": 3.502, "pnl": 356.72, "sharpe": 323.22, "tpd": 1018.5}, {"split": "test", "thresh": 1.5, "dist": 0.25, "trades": 2374, "win": 78.6, "edge": 3.471, "pnl": 411.98, "sharpe": 358.57, "tpd": 1187.0}, {"split": "test", "thresh": 1.5, "dist": 0.3, "trades": 2737, "win": 79.0, "edge": 3.448, "pnl": 471.87, "sharpe": 395.29, "tpd": 1368.5}, {"split": "test", "thresh": 1.5, "dist": 0.4, "trades": 3547, "win": 78.7, "edge": 3.206, "pnl": 568.54, "sharpe": 451.38, "tpd": 1773.5}, {"split": "test", "thresh": 1.5, "dist": 0.5, "trades": 5093, "win": 68.5, "edge": 2.264, "pnl": 576.56, "sharpe": 359.16, "tpd": 2546.5}, {"split": "test", "thresh": 2.0, "dist": 0.1, "trades": 425, "win": 78.4, "edge": 4.405, "pnl": 93.62, "sharpe": 165.86, "tpd": 212.5}, {"split": "test", "thresh": 2.0, "dist": 0.15, "trades": 594, "win": 80.8, "edge": 4.77, "pnl": 141.67, "sharpe": 206.95, "tpd": 297.0}, {"split": "test", "thresh": 2.0, "dist": 0.2, "trades": 762, "win": 80.8, "edge": 4.734, "pnl": 180.38, "sharpe": 244.38, "tpd": 381.0}, {"split": "test", "thresh": 2.0, "dist": 0.25, "trades": 898, "win": 81.4, "edge": 4.648, "pnl": 208.68, "sharpe": 270.14, "tpd": 449.0}, {"split": "test", "thresh": 2.0, "dist": 0.3, "trades": 1050, "win": 81.7, "edge": 4.564, "pnl": 239.6, "sharpe": 299.1, "tpd": 525.0}, {"split": "test", "thresh": 2.0, "dist": 0.4, "trades": 1403, "win": 80.9, "edge": 4.121, "pnl": 289.12, "sharpe": 339.86, "tpd": 701.5}, {"split": "test", "thresh": 2.0, "dist": 0.5, "trades": 2119, "win": 69.9, "edge": 2.792, "pnl": 295.85, "sharpe": 275.65, "tpd": 1059.5}, {"split": "test", "thresh": 2.5, "dist": 0.1, "trades": 217, "win": 81.6, "edge": 6.043, "pnl": 65.56, "sharpe": 162.94, "tpd": 108.5}, {"split": "test", "thresh": 2.5, "dist": 0.15, "trades": 308, "win": 84.1, "edge": 6.459, "pnl": 99.47, "sharpe": 189.18, "tpd": 154.0}, {"split": "test", "thresh": 2.5, "dist": 0.2, "trades": 404, "win": 85.4, "edge": 6.311, "pnl": 127.49, "sharpe": 224.62, "tpd": 202.0}, {"split": "test", "thresh": 2.5, "dist": 0.25, "trades": 469, "win": 85.5, "edge": 6.17, "pnl": 144.69, "sharpe": 243.34, "tpd": 234.5}, {"split": "test", "thresh": 2.5, "dist": 0.3, "trades": 548, "win": 85.2, "edge": 5.954, "pnl": 163.15, "sharpe": 263.02, "tpd": 274.0}, {"split": "test", "thresh": 2.5, "dist": 0.4, "trades": 735, "win": 84.6, "edge": 5.276, "pnl": 193.9, "sharpe": 293.73, "tpd": 367.5}, {"split": "test", "thresh": 2.5, "dist": 0.5, "trades": 1130, "win": 72.3, "edge": 3.604, "pnl": 203.63, "sharpe": 254.13, "tpd": 565.0}, {"split": "test", "thresh": 3.0, "dist": 0.1, "trades": 120, "win": 83.3, "edge": 7.521, "pnl": 45.12, "sharpe": 139.23, "tpd": 60.0}, {"split": "test", "thresh": 3.0, "dist": 0.15, "trades": 175, "win": 85.1, "edge": 7.819, "pnl": 68.42, "sharpe": 151.7, "tpd": 87.5}, {"split": "test", "thresh": 3.0, "dist": 0.2, "trades": 226, "win": 85.8, "edge": 7.567, "pnl": 85.51, "sharpe": 176.68, "tpd": 113.0}, {"split": "test", "thresh": 3.0, "dist": 0.25, "trades": 270, "win": 86.3, "edge": 7.264, "pnl": 98.06, "sharpe": 191.93, "tpd": 135.0}, {"split": "test", "thresh": 3.0, "dist": 0.3, "trades": 315, "win": 85.7, "edge": 6.97, "pnl": 109.78, "sharpe": 205.71, "tpd": 157.5}, {"split": "test", "thresh": 3.0, "dist": 0.4, "trades": 428, "win": 86.2, "edge": 6.192, "pnl": 132.51, "sharpe": 233.53, "tpd": 214.0}, {"split": "test", "thresh": 3.0, "dist": 0.5, "trades": 687, "win": 73.4, "edge": 4.095, "pnl": 140.65, "sharpe": 203.64, "tpd": 343.5}, {"split": "test", "thresh": 3.5, "dist": 0.1, "trades": 79, "win": 86.1, "edge": 8.885, "pnl": 35.1, "sharpe": 122.59, "tpd": 39.5}, {"split": "test", "thresh": 3.5, "dist": 0.15, "trades": 113, "win": 89.4, "edge": 9.835, "pnl": 55.57, "sharpe": 137.4, "tpd": 56.5}, {"split": "test", "thresh": 3.5, "dist": 0.2, "trades": 144, "win": 88.2, "edge": 9.124, "pnl": 65.69, "sharpe": 151.65, "tpd": 72.0}, {"split": "test", "thresh": 3.5, "dist": 0.25, "trades": 170, "win": 88.8, "edge": 8.722, "pnl": 74.14, "sharpe": 163.06, "tpd": 85.0}, {"split": "test", "thresh": 3.5, "dist": 0.3, "trades": 198, "win": 88.4, "edge": 8.369, "pnl": 82.85, "sharpe": 174.81, "tpd": 99.0}, {"split": "test", "thresh": 3.5, "dist": 0.4, "trades": 273, "win": 89.4, "edge": 7.342, "pnl": 100.22, "sharpe": 198.11, "tpd": 136.5}, {"split": "test", "thresh": 3.5, "dist": 0.5, "trades": 450, "win": 76.9, "edge": 4.807, "pnl": 108.16, "sharpe": 172.79, "tpd": 225.0}, {"split": "test", "thresh": 4.0, "dist": 0.1, "trades": 55, "win": 87.3, "edge": 10.028, "pnl": 27.58, "sharpe": 103.36, "tpd": 27.5}, {"split": "test", "thresh": 4.0, "dist": 0.15, "trades": 79, "win": 89.9, "edge": 11.584, "pnl": 45.76, "sharpe": 120.73, "tpd": 39.5}, {"split": "test", "thresh": 4.0, "dist": 0.2, "trades": 102, "win": 91.2, "edge": 10.774, "pnl": 54.95, "sharpe": 136.77, "tpd": 51.0}, {"split": "test", "thresh": 4.0, "dist": 0.25, "trades": 117, "win": 91.5, "edge": 10.51, "pnl": 61.48, "sharpe": 146.76, "tpd": 58.5}, {"split": "test", "thresh": 4.0, "dist": 0.3, "trades": 137, "win": 91.2, "edge": 10.041, "pnl": 68.78, "sharpe": 157.21, "tpd": 68.5}, {"split": "test", "thresh": 4.0, "dist": 0.4, "trades": 186, "win": 91.4, "edge": 8.586, "pnl": 79.85, "sharpe": 169.93, "tpd": 93.0}, {"split": "test", "thresh": 4.0, "dist": 0.5, "trades": 309, "win": 78.3, "edge": 5.514, "pnl": 85.2, "sharpe": 143.61, "tpd": 154.5}, {"split": "test", "thresh": 4.5, "dist": 0.1, "trades": 37, "win": 89.2, "edge": 10.573, "pnl": 19.56, "sharpe": 88.89, "tpd": 18.5}, {"split": "test", "thresh": 4.5, "dist": 0.15, "trades": 54, "win": 90.7, "edge": 12.722, "pnl": 34.35, "sharpe": 102.19, "tpd": 27.0}, {"split": "test", "thresh": 4.5, "dist": 0.2, "trades": 72, "win": 91.7, "edge": 11.712, "pnl": 42.16, "sharpe": 117.25, "tpd": 36.0}, {"split": "test", "thresh": 4.5, "dist": 0.25, "trades": 84, "win": 91.7, "edge": 11.011, "pnl": 46.25, "sharpe": 124.86, "tpd": 42.0}, {"split": "test", "thresh": 4.5, "dist": 0.3, "trades": 98, "win": 91.8, "edge": 10.539, "pnl": 51.64, "sharpe": 133.51, "tpd": 49.0}, {"split": "test", "thresh": 4.5, "dist": 0.4, "trades": 138, "win": 92.0, "edge": 8.819, "pnl": 60.85, "sharpe": 145.07, "tpd": 69.0}, {"split": "test", "thresh": 4.5, "dist": 0.5, "trades": 224, "win": 79.0, "edge": 5.987, "pnl": 67.05, "sharpe": 134.45, "tpd": 112.0}, {"split": "test", "thresh": 5.0, "dist": 0.1, "trades": 29, "win": 86.2, "edge": 10.971, "pnl": 15.91, "sharpe": 76.61, "tpd": 14.5}, {"split": "test", "thresh": 5.0, "dist": 0.15, "trades": 42, "win": 90.5, "edge": 13.554, "pnl": 28.46, "sharpe": 90.86, "tpd": 21.0}, {"split": "test", "thresh": 5.0, "dist": 0.2, "trades": 55, "win": 92.7, "edge": 12.627, "pnl": 34.72, "sharpe": 106.34, "tpd": 27.5}, {"split": "test", "thresh": 5.0, "dist": 0.25, "trades": 62, "win": 91.9, "edge": 12.134, "pnl": 37.61, "sharpe": 112.7, "tpd": 31.0}, {"split": "test", "thresh": 5.0, "dist": 0.3, "trades": 73, "win": 91.8, "edge": 11.529, "pnl": 42.08, "sharpe": 119.65, "tpd": 36.5}, {"split": "test", "thresh": 5.0, "dist": 0.4, "trades": 104, "win": 91.3, "edge": 9.579, "pnl": 49.81, "sharpe": 129.32, "tpd": 52.0}, {"split": "test", "thresh": 5.0, "dist": 0.5, "trades": 164, "win": 76.2, "edge": 6.652, "pnl": 54.54, "sharpe": 117.84, "tpd": 82.0}, {"split": "test", "thresh": 5.5, "dist": 0.1, "trades": 21, "win": 85.7, "edge": 12.03, "pnl": 12.63, "sharpe": 63.35, "tpd": 10.5}, {"split": "test", "thresh": 5.5, "dist": 0.15, "trades": 33, "win": 90.9, "edge": 14.978, "pnl": 24.71, "sharpe": 81.63, "tpd": 16.5}, {"split": "test", "thresh": 5.5, "dist": 0.2, "trades": 42, "win": 92.9, "edge": 14.087, "pnl": 29.58, "sharpe": 94.15, "tpd": 21.0}, {"split": "test", "thresh": 5.5, "dist": 0.25, "trades": 48, "win": 91.7, "edge": 13.312, "pnl": 31.95, "sharpe": 98.81, "tpd": 24.0}, {"split": "test", "thresh": 5.5, "dist": 0.3, "trades": 59, "win": 91.5, "edge": 12.344, "pnl": 36.42, "sharpe": 105.97, "tpd": 29.5}, {"split": "test", "thresh": 5.5, "dist": 0.4, "trades": 87, "win": 90.8, "edge": 9.991, "pnl": 43.46, "sharpe": 114.77, "tpd": 43.5}, {"split": "test", "thresh": 5.5, "dist": 0.5, "trades": 128, "win": 77.3, "edge": 7.5, "pnl": 48.0, "sharpe": 107.83, "tpd": 64.0}, {"split": "test", "thresh": 6.0, "dist": 0.1, "trades": 17, "win": 88.2, "edge": 13.39, "pnl": 11.38, "sharpe": 59.83, "tpd": 8.5}, {"split": "test", "thresh": 6.0, "dist": 0.15, "trades": 26, "win": 92.3, "edge": 16.659, "pnl": 21.66, "sharpe": 74.79, "tpd": 13.0}, {"split": "test", "thresh": 6.0, "dist": 0.2, "trades": 33, "win": 93.9, "edge": 15.437, "pnl": 25.47, "sharpe": 84.16, "tpd": 16.5}, {"split": "test", "thresh": 6.0, "dist": 0.25, "trades": 37, "win": 91.9, "edge": 14.424, "pnl": 26.68, "sharpe": 85.08, "tpd": 18.5}, {"split": "test", "thresh": 6.0, "dist": 0.3, "trades": 47, "win": 91.5, "edge": 12.59, "pnl": 29.59, "sharpe": 89.81, "tpd": 23.5}, {"split": "test", "thresh": 6.0, "dist": 0.4, "trades": 72, "win": 90.3, "edge": 9.887, "pnl": 35.59, "sharpe": 97.66, "tpd": 36.0}, {"split": "test", "thresh": 6.0, "dist": 0.5, "trades": 104, "win": 76.0, "edge": 7.602, "pnl": 39.53, "sharpe": 93.0, "tpd": 52.0}, {"split": "test", "thresh": 6.5, "dist": 0.1, "trades": 15, "win": 86.7, "edge": 13.385, "pnl": 10.04, "sharpe": 53.63, "tpd": 7.5}, {"split": "test", "thresh": 6.5, "dist": 0.15, "trades": 22, "win": 90.9, "edge": 17.77, "pnl": 19.55, "sharpe": 69.67, "tpd": 11.0}, {"split": "test", "thresh": 6.5, "dist": 0.2, "trades": 26, "win": 92.3, "edge": 16.882, "pnl": 21.95, "sharpe": 75.41, "tpd": 13.0}, {"split": "test", "thresh": 6.5, "dist": 0.25, "trades": 30, "win": 90.0, "edge": 15.44, "pnl": 23.16, "sharpe": 76.06, "tpd": 15.0}, {"split": "test", "thresh": 6.5, "dist": 0.3, "trades": 37, "win": 89.2, "edge": 13.775, "pnl": 25.48, "sharpe": 80.43, "tpd": 18.5}, {"split": "test", "thresh": 6.5, "dist": 0.4, "trades": 53, "win": 86.8, "edge": 11.019, "pnl": 29.2, "sharpe": 83.93, "tpd": 26.5}, {"split": "test", "thresh": 6.5, "dist": 0.5, "trades": 79, "win": 73.4, "edge": 7.882, "pnl": 31.13, "sharpe": 79.47, "tpd": 39.5}, {"split": "test", "thresh": 7.0, "dist": 0.1, "trades": 13, "win": 92.3, "edge": 15.008, "pnl": 9.76, "sharpe": 55.14, "tpd": 6.5}, {"split": "test", "thresh": 7.0, "dist": 0.15, "trades": 18, "win": 94.4, "edge": 16.855, "pnl": 15.17, "sharpe": 67.0, "tpd": 9.0}, {"split": "test", "thresh": 7.0, "dist": 0.2, "trades": 22, "win": 95.5, "edge": 15.973, "pnl": 17.57, "sharpe": 73.75, "tpd": 11.0}, {"split": "test", "thresh": 7.0, "dist": 0.25, "trades": 24, "win": 91.7, "edge": 14.612, "pnl": 17.53, "sharpe": 69.5, "tpd": 12.0}, {"split": "test", "thresh": 7.0, "dist": 0.3, "trades": 30, "win": 90.0, "edge": 12.989, "pnl": 19.48, "sharpe": 73.85, "tpd": 15.0}, {"split": "test", "thresh": 7.0, "dist": 0.4, "trades": 41, "win": 87.8, "edge": 10.625, "pnl": 21.78, "sharpe": 74.58, "tpd": 20.5}, {"split": "test", "thresh": 7.0, "dist": 0.5, "trades": 61, "win": 77.0, "edge": 7.765, "pnl": 23.68, "sharpe": 71.47, "tpd": 30.5}, {"split": "test", "thresh": 7.5, "dist": 0.1, "trades": 10, "win": 90.0, "edge": 16.683, "pnl": 8.34, "sharpe": 49.36, "tpd": 5.0}, {"split": "test", "thresh": 7.5, "dist": 0.15, "trades": 14, "win": 92.9, "edge": 18.876, "pnl": 13.21, "sharpe": 61.18, "tpd": 7.0}, {"split": "test", "thresh": 7.5, "dist": 0.2, "trades": 18, "win": 94.4, "edge": 17.348, "pnl": 15.61, "sharpe": 67.76, "tpd": 9.0}, {"split": "test", "thresh": 7.5, "dist": 0.25, "trades": 20, "win": 90.0, "edge": 15.577, "pnl": 15.58, "sharpe": 63.06, "tpd": 10.0}, {"split": "test", "thresh": 7.5, "dist": 0.3, "trades": 24, "win": 87.5, "edge": 13.855, "pnl": 16.63, "sharpe": 64.16, "tpd": 12.0}, {"split": "test", "thresh": 7.5, "dist": 0.4, "trades": 32, "win": 84.4, "edge": 11.275, "pnl": 18.04, "sharpe": 62.88, "tpd": 16.0}, {"split": "test", "thresh": 7.5, "dist": 0.5, "trades": 47, "win": 76.6, "edge": 8.464, "pnl": 19.89, "sharpe": 61.87, "tpd": 23.5}, {"split": "test", "thresh": 8.0, "dist": 0.1, "trades": 8, "win": 87.5, "edge": 15.791, "pnl": 6.32, "sharpe": 38.85, "tpd": 4.0}, {"split": "test", "thresh": 8.0, "dist": 0.15, "trades": 12, "win": 91.7, "edge": 18.647, "pnl": 11.19, "sharpe": 52.8, "tpd": 6.0}, {"split": "test", "thresh": 8.0, "dist": 0.2, "trades": 15, "win": 93.3, "edge": 17.925, "pnl": 13.44, "sharpe": 61.21, "tpd": 7.5}, {"split": "test", "thresh": 8.0, "dist": 0.25, "trades": 17, "win": 88.2, "edge": 15.774, "pnl": 13.41, "sharpe": 56.4, "tpd": 8.5}, {"split": "test", "thresh": 8.0, "dist": 0.3, "trades": 19, "win": 89.5, "edge": 14.98, "pnl": 14.23, "sharpe": 58.82, "tpd": 9.5}, {"split": "test", "thresh": 8.0, "dist": 0.4, "trades": 24, "win": 83.3, "edge": 11.936, "pnl": 14.32, "sharpe": 53.29, "tpd": 12.0}, {"split": "test", "thresh": 8.0, "dist": 0.5, "trades": 38, "win": 76.3, "edge": 8.512, "pnl": 16.17, "sharpe": 53.09, "tpd": 19.0}]; | |
| const darkLayout = { | |
| paper_bgcolor: '#161b22', | |
| plot_bgcolor: '#0d1117', | |
| font: { color: '#c9d1d9', size: 12 }, | |
| margin: { t: 40, b: 40, l: 50, r: 20 }, | |
| }; | |
| // 3D Surface | |
| Plotly.newPlot('surface3d', [{ | |
| type: 'surface', | |
| x: distances, | |
| y: thresholds, | |
| z: testSharpe, | |
| colorscale: 'Viridis', | |
| colorbar: { title: 'Sharpe', titlefont: { color: '#c9d1d9' } }, | |
| hovertemplate: 'Dist: %{x}<br>Thresh: %{y} bps<br>Sharpe: %{z:.1f}<extra></extra>', | |
| }], { | |
| ...darkLayout, | |
| title: { text: 'Test Sharpe — 3D Surface', font: { color: '#58a6ff', size: 16 } }, | |
| scene: { | |
| xaxis: { title: 'Distance Filter', color: '#8b949e', gridcolor: '#21262d' }, | |
| yaxis: { title: 'CEX Threshold (bps)', color: '#8b949e', gridcolor: '#21262d' }, | |
| zaxis: { title: 'Sharpe', color: '#8b949e', gridcolor: '#21262d' }, | |
| bgcolor: '#0d1117', | |
| }, | |
| margin: { t: 50, b: 20, l: 20, r: 20 }, | |
| }); | |
| function makeHeatmap(divId, z, title, colorscale, fmt) { | |
| // Annotate cells | |
| const annotations = []; | |
| for (let i = 0; i < thresholds.length; i++) { | |
| for (let j = 0; j < distances.length; j++) { | |
| annotations.push({ | |
| x: distances[j], | |
| y: thresholds[i], | |
| text: fmt(z[i][j]), | |
| font: { color: z[i][j] > (Math.max(...z.flat()) * 0.6) ? '#0d1117' : '#c9d1d9', size: 9 }, | |
| showarrow: false, | |
| }); | |
| } | |
| } | |
| Plotly.newPlot(divId, [{ | |
| type: 'heatmap', | |
| x: distances, | |
| y: thresholds, | |
| z: z, | |
| colorscale: colorscale || 'Viridis', | |
| hovertemplate: 'Dist: %{x}<br>Thresh: %{y} bps<br>Value: %{z:.2f}<extra></extra>', | |
| }], { | |
| ...darkLayout, | |
| title: { text: title, font: { color: '#58a6ff', size: 14 } }, | |
| xaxis: { title: 'Distance Filter', color: '#8b949e', dtick: 0.05 }, | |
| yaxis: { title: 'CEX Threshold (bps)', color: '#8b949e', dtick: 0.5 }, | |
| annotations: annotations, | |
| }); | |
| } | |
| makeHeatmap('hm-sharpe', testSharpe, 'Test Sharpe', 'Viridis', v => v.toFixed(0)); | |
| makeHeatmap('hm-pnl', testPnl, 'Test P&L ($)', 'Greens', v => '$' + v.toFixed(0)); | |
| makeHeatmap('hm-trades', testTradesDay, 'Test Trades/Day', 'YlOrRd', v => v.toFixed(0)); | |
| makeHeatmap('hm-winrate', testWinrate.map(r => r.map(v => v * 100)), 'Test Win Rate (%)', 'RdYlGn', v => v.toFixed(1) + '%'); | |
| makeHeatmap('hm-edge', testEdge, 'Test Avg Edge (¢)', 'Plasma', v => v.toFixed(2) + '¢'); | |
| makeHeatmap('hm-train-sharpe', trainSharpe, 'Train Sharpe (comparison)', 'Viridis', v => v.toFixed(0)); | |
| // Line charts: threshold profile at dist=0.50 | |
| const distIdx = distances.indexOf(0.5); | |
| const testSharpeByThresh = thresholds.map((_, i) => testSharpe[i][distIdx]); | |
| const trainSharpeByThresh = thresholds.map((_, i) => trainSharpe[i][distIdx]); | |
| const testEdgeByThresh = thresholds.map((_, i) => testEdge[i][distIdx]); | |
| const testPnlByThresh = thresholds.map((_, i) => testPnl[i][distIdx]); | |
| const testTradesByThresh = thresholds.map((_, i) => testTradesDay[i][distIdx]); | |
| Plotly.newPlot('line-sharpe', [ | |
| { x: thresholds, y: testSharpeByThresh, name: 'Test Sharpe', line: { color: '#58a6ff', width: 2 } }, | |
| { x: thresholds, y: trainSharpeByThresh, name: 'Train Sharpe', line: { color: '#8b949e', width: 2, dash: 'dot' } }, | |
| ], { | |
| ...darkLayout, | |
| title: { text: 'Sharpe vs Threshold (dist=0.50)', font: { color: '#58a6ff', size: 14 } }, | |
| xaxis: { title: 'CEX Return Threshold (bps)', color: '#8b949e', gridcolor: '#21262d' }, | |
| yaxis: { title: 'Sharpe Ratio', color: '#8b949e', gridcolor: '#21262d' }, | |
| legend: { font: { color: '#c9d1d9' }, bgcolor: 'rgba(0,0,0,0)' }, | |
| }); | |
| Plotly.newPlot('line-edge', [ | |
| { x: thresholds, y: testEdgeByThresh, name: 'Avg Edge (¢)', yaxis: 'y', line: { color: '#3fb950', width: 2 } }, | |
| { x: thresholds, y: testTradesByThresh, name: 'Trades/Day', yaxis: 'y2', line: { color: '#f0883e', width: 2 } }, | |
| ], { | |
| ...darkLayout, | |
| title: { text: 'Edge & Volume vs Threshold (dist=0.50)', font: { color: '#58a6ff', size: 14 } }, | |
| xaxis: { title: 'CEX Return Threshold (bps)', color: '#8b949e', gridcolor: '#21262d' }, | |
| yaxis: { title: 'Avg Edge (¢)', color: '#3fb950', gridcolor: '#21262d' }, | |
| yaxis2: { title: 'Trades/Day', color: '#f0883e', overlaying: 'y', side: 'right', gridcolor: '#21262d' }, | |
| legend: { font: { color: '#c9d1d9' }, bgcolor: 'rgba(0,0,0,0)' }, | |
| }); | |
| // Table | |
| function filterTable() { | |
| const split = document.getElementById('split-filter').value; | |
| const sortCol = document.getElementById('sort-col').value; | |
| let filtered = tableData.filter(r => split === 'all' || r.split === split); | |
| filtered.sort((a, b) => b[sortCol] - a[sortCol]); | |
| const tbody = document.getElementById('table-body'); | |
| tbody.innerHTML = ''; | |
| filtered.forEach(r => { | |
| const pnlColor = r.pnl >= 0 ? '#3fb950' : '#f85149'; | |
| const edgeColor = r.edge >= 0 ? '#3fb950' : '#f85149'; | |
| tbody.innerHTML += `<tr> | |
| <td>${r.split}</td> | |
| <td>${r.thresh.toFixed(1)}</td> | |
| <td>${r.dist.toFixed(2)}</td> | |
| <td>${r.trades.toLocaleString()}</td> | |
| <td>${r.win.toFixed(1)}%</td> | |
| <td style="color:${edgeColor}">${r.edge.toFixed(3)}¢</td> | |
| <td style="color:${pnlColor}">$${r.pnl.toFixed(2)}</td> | |
| <td>${r.sharpe.toFixed(1)}</td> | |
| <td>${r.tpd.toFixed(1)}</td> | |
| </tr>`; | |
| }); | |
| } | |
| filterTable(); | |
| </script> | |
| </body> | |
| </html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment