<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<title>Wheel Strategy Interactive Dashboard</title>
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css" />
<style>
body { font-family: Arial, sans-serif; margin: 24px; background: #fafafa; }
.panel { background: #fff; padding: 16px; margin-bottom: 24px; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
#equityChart { max-height: 420px; }
table { width: 100%; }
</style>
</head>
<body>
<div class="panel">
<h1>Wheel Strategy Interactive Dashboard</h1>
<p>Underlying 159915.SZ · Window 20230101 → 20251203</p>
</div>
<div class="panel">
<canvas id="equityChart"></canvas>
</div>
<div class="panel">
<table id="tradesTable">
<thead>
<tr><th>month</th><th>type</th><th>ts_code</th><th>trade_date</th><th>maturity</th><th>strike</th><th>spot</th><th>otm_pct(%)</th><th>premium</th><th>implied_vol(%)</th><th>expiry_price</th><th>assigned</th><th>cash_balance</th><th>holding_value</th><th>portfolio_value</th></tr>
</thead>
<tbody>
<tr><td>202301</td><td>PUT</td><td>90001546.SZ</td><td>20230103</td><td>20230130</td><td>2.15</td><td>2.289</td><td>6.07</td><td>56.0</td><td>18.81</td><td>2.533</td><td>False</td><td>56.0</td><td>0.0</td><td>56.0</td></tr>
<tr><td>202302</td><td>PUT</td><td>90001711.SZ</td><td>20230201</td><td>20230222</td><td>2.4</td><td>2.537</td><td>5.4</td><td>95.0</td><td>22.1</td><td>2.377</td><td>True</td><td>-23849.0</td><td>23770.0</td><td>-79.0</td></tr>
<tr><td>202303</td><td>CALL</td><td>90001281.SZ</td><td>20230301</td><td>20230322</td><td>2.5</td><td>2.372</td><td>5.4</td><td>110.0</td><td>21.86</td><td>2.27</td><td>False</td><td>-23739.0</td><td>22700.0</td><td>-1039.0</td></tr>
<tr><td>202304</td><td>CALL</td><td>90001931.SZ</td><td>20230403</td><td>20230426</td><td>2.5</td><td>2.366</td><td>5.66</td><td>71.0</td><td>18.69</td><td>2.226</td><td>False</td><td>-23668.0</td><td>22260.0</td><td>-1408.0</td></tr>
<tr><td>202305</td><td>CALL</td><td>90002035.SZ</td><td>20230504</td><td>20230524</td><td>2.35</td><td>2.23</td><td>5.38</td><td>69.0</td><td>19.54</td><td>2.183</td><td>False</td><td>-23599.0</td><td>21830.0</td><td>-1769.0</td></tr>
<tr><td>202306</td><td>CALL</td><td>90001457.SZ</td><td>20230601</td><td>20230628</td><td>2.3</td><td>2.148</td><td>7.08</td><td>64.0</td><td>20.03</td><td>2.126</td><td>False</td><td>-23535.0</td><td>21260.0</td><td>-2275.0</td></tr>
<tr><td>202307</td><td>CALL</td><td>90002217.SZ</td><td>20230703</td><td>20230726</td><td>2.3</td><td>2.171</td><td>5.94</td><td>68.0</td><td>19.54</td><td>2.135</td><td>False</td><td>-23467.0</td><td>21350.0</td><td>-2117.0</td></tr>
<tr><td>202308</td><td>CALL</td><td>90002346.SZ</td><td>20230801</td><td>20230823</td><td>2.3</td><td>2.168</td><td>6.09</td><td>74.0</td><td>20.88</td><td>1.987</td><td>False</td><td>-23393.0</td><td>19870.0</td><td>-3523.0</td></tr>
<tr><td>202309</td><td>CALL</td><td>90001903.SZ</td><td>20230901</td><td>20230927</td><td>2.2</td><td>2.049</td><td>7.37</td><td>82.0</td><td>22.96</td><td>1.956</td><td>False</td><td>-23311.0</td><td>19560.0</td><td>-3751.0</td></tr>
<tr><td>202310</td><td>CALL</td><td>90002542.SZ</td><td>20231009</td><td>20231025</td><td>2.05</td><td>1.947</td><td>5.29</td><td>54.0</td><td>21.01</td><td>1.815</td><td>False</td><td>-23257.0</td><td>18150.0</td><td>-5107.0</td></tr>
<tr><td>202311</td><td>CALL</td><td>90002677.SZ</td><td>20231101</td><td>20231122</td><td>2.05</td><td>1.908</td><td>7.44</td><td>31.0</td><td>20.27</td><td>1.899</td><td>False</td><td>-23226.0</td><td>18990.0</td><td>-4236.0</td></tr>
<tr><td>202312</td><td>CALL</td><td>90002183.SZ</td><td>20231201</td><td>20231227</td><td>2.0</td><td>1.881</td><td>6.33</td><td>68.0</td><td>20.03</td><td>1.763</td><td>False</td><td>-23158.0</td><td>17630.0</td><td>-5528.0</td></tr>
<tr><td>202401</td><td>CALL</td><td>90002913.SZ</td><td>20240102</td><td>20240124</td><td>1.9</td><td>1.806</td><td>5.2</td><td>103.0</td><td>22.47</td><td>1.65</td><td>False</td><td>-23055.0</td><td>16500.0</td><td>-6555.0</td></tr>
<tr><td>202402</td><td>CALL</td><td>90003037.SZ</td><td>20240201</td><td>20240228</td><td>1.65</td><td>1.548</td><td>6.59</td><td>157.0</td><td>29.31</td><td>1.701</td><td>True</td><td>-6398.0</td><td>0.0</td><td>-6398.0</td></tr>
<tr><td>202403</td><td>PUT</td><td>90002762.SZ</td><td>20240301</td><td>20240327</td><td>1.65</td><td>1.775</td><td>7.04</td><td>151.0</td><td>31.75</td><td>1.742</td><td>False</td><td>-6247.0</td><td>0.0</td><td>-6247.0</td></tr>
<tr><td>202404</td><td>PUT</td><td>90003350.SZ</td><td>20240401</td><td>20240424</td><td>1.7</td><td>1.822</td><td>6.7</td><td>71.0</td><td>24.91</td><td>1.719</td><td>False</td><td>-6176.0</td><td>0.0</td><td>-6176.0</td></tr>
<tr><td>202405</td><td>PUT</td><td>90003458.SZ</td><td>20240506</td><td>20240522</td><td>1.75</td><td>1.853</td><td>5.56</td><td>61.00000000000001</td><td>24.67</td><td>1.839</td><td>False</td><td>-6115.0</td><td>0.0</td><td>-6115.0</td></tr>
<tr><td>202406</td><td>PUT</td><td>90002823.SZ</td><td>20240603</td><td>20240626</td><td>1.65</td><td>1.782</td><td>7.41</td><td>28.999999999999996</td><td>21.25</td><td>1.699</td><td>False</td><td>-6086.0</td><td>0.0</td><td>-6086.0</td></tr>
<tr><td>202407</td><td>PUT</td><td>90003694.SZ</td><td>20240701</td><td>20240724</td><td>1.55</td><td>1.65</td><td>6.06</td><td>59.0</td><td>22.47</td><td>1.619</td><td>False</td><td>-6027.0</td><td>0.0</td><td>-6027.0</td></tr>
<tr><td>202408</td><td>PUT</td><td>90003743.SZ</td><td>20240801</td><td>20240828</td><td>1.55</td><td>1.636</td><td>5.26</td><td>76.0</td><td>20.64</td><td>1.501</td><td>True</td><td>-21451.0</td><td>15010.0</td><td>-6441.0</td></tr>
<tr><td>202409</td><td>CALL</td><td>90003196.SZ</td><td>20240902</td><td>20240925</td><td>1.6</td><td>1.507</td><td>6.17</td><td>57.0</td><td>21.25</td><td>1.61</td><td>True</td><td>-5394.0</td><td>0.0</td><td>-5394.0</td></tr>
<tr><td>202410</td><td>PUT</td><td>90004374.SZ</td><td>20241008</td><td>20241023</td><td>2.45</td><td>2.678</td><td>8.51</td><td>2098.0</td><td>150.89</td><td>2.162</td><td>True</td><td>-27796.0</td><td>21620.0</td><td>-6176.0</td></tr>
<tr><td>202411</td><td>CALL</td><td>90004377.SZ</td><td>20241101</td><td>20241127</td><td>2.2</td><td>2.084</td><td>5.57</td><td>723.0</td><td>52.87</td><td>2.165</td><td>False</td><td>-27073.0</td><td>21650.0</td><td>-5423.0</td></tr>
<tr><td>202412</td><td>CALL</td><td>90004396.SZ</td><td>20241202</td><td>20241225</td><td>2.35</td><td>2.211</td><td>6.29</td><td>353.0</td><td>38.1</td><td>2.156</td><td>False</td><td>-26720.0</td><td>21560.0</td><td>-5160.0</td></tr>
<tr><td>202501</td><td>CALL</td><td>90004733.SZ</td><td>20250102</td><td>20250122</td><td>2.15</td><td>2.019</td><td>6.49</td><td>231.0</td><td>35.65</td><td>2.059</td><td>False</td><td>-26489.0</td><td>20590.0</td><td>-5899.0</td></tr>
<tr><td>202502</td><td>CALL</td><td>90004905.SZ</td><td>20250205</td><td>20250226</td><td>2.15</td><td>2.024</td><td>6.23</td><td>149.0</td><td>28.33</td><td>2.223</td><td>True</td><td>-4840.0</td><td>0.0</td><td>-4840.0</td></tr>
<tr><td>202503</td><td>PUT</td><td>90004273.SZ</td><td>20250303</td><td>20250326</td><td>2.0</td><td>2.154</td><td>7.15</td><td>110.0</td><td>28.33</td><td>2.098</td><td>False</td><td>-4730.0</td><td>0.0</td><td>-4730.0</td></tr>
<tr><td>202504</td><td>PUT</td><td>90005222.SZ</td><td>20250401</td><td>20250423</td><td>1.95</td><td>2.062</td><td>5.43</td><td>77.0</td><td>21.74</td><td>1.919</td><td>True</td><td>-24153.0</td><td>19190.0</td><td>-4963.0</td></tr>
<tr><td>202505</td><td>CALL</td><td>90005257.SZ</td><td>20250506</td><td>20250528</td><td>2.1</td><td>1.958</td><td>7.25</td><td>50.0</td><td>21.74</td><td>1.959</td><td>False</td><td>-24103.0</td><td>19590.0</td><td>-4513.0</td></tr>
<tr><td>202506</td><td>CALL</td><td>90004620.SZ</td><td>20250603</td><td>20250625</td><td>2.1</td><td>1.977</td><td>6.22</td><td>57.0</td><td>20.15</td><td>2.109</td><td>True</td><td>-3046.0</td><td>0.0</td><td>-3046.0</td></tr>
<tr><td>202507</td><td>PUT</td><td>90005641.SZ</td><td>20250701</td><td>20250723</td><td>2.0</td><td>2.126</td><td>5.93</td><td>80.0</td><td>23.08</td><td>2.287</td><td>False</td><td>-2966.0</td><td>0.0</td><td>-2966.0</td></tr>
<tr><td>202508</td><td>PUT</td><td>90005727.SZ</td><td>20250801</td><td>20250827</td><td>2.15</td><td>2.303</td><td>6.64</td><td>103.0</td><td>24.3</td><td>2.696</td><td>False</td><td>-2863.0</td><td>0.0</td><td>-2863.0</td></tr>
<tr><td>202509</td><td>PUT</td><td>90006025.SZ</td><td>20250901</td><td>20250924</td><td>2.75</td><td>2.927</td><td>6.05</td><td>422.0</td><td>38.58</td><td>3.16</td><td>False</td><td>-2441.0</td><td>0.0</td><td>-2441.0</td></tr>
<tr><td>202510</td><td>PUT</td><td>90006202.SZ</td><td>20251009</td><td>20251022</td><td>3.0</td><td>3.235</td><td>7.26</td><td>136.0</td><td>35.65</td><td>3.039</td><td>False</td><td>-2305.0</td><td>0.0</td><td>-2305.0</td></tr>
<tr><td>202511</td><td>PUT</td><td>90006330.SZ</td><td>20251103</td><td>20251126</td><td>3.0</td><td>3.176</td><td>5.54</td><td>379.00000000000006</td><td>33.7</td><td>3.027</td><td>False</td><td>-1926.0</td><td>0.0</td><td>-1926.0</td></tr>
<tr><td>202512</td><td>PUT</td><td>90006101.SZ</td><td>20251201</td><td>20251224</td><td>2.9</td><td>3.073</td><td>5.63</td><td>291.0</td><td>30.65</td><td>3.019</td><td>False</td><td>-1635.0</td><td>0.0</td><td>-1635.0</td></tr>
</tbody>
</table>
</div>
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const labels = ["20230103", "20230201", "20230301", "20230403", "20230504", "20230601", "20230703", "20230801", "20230901", "20231009", "20231101", "20231201", "20240102", "20240201", "20240301", "20240401", "20240506", "20240603", "20240701", "20240801", "20240902", "20241008", "20241101", "20241202", "20250102", "20250205", "20250303", "20250401", "20250506", "20250603", "20250701", "20250801", "20250901", "20251009", "20251103", "20251201"];
const cashSeries = [56.0, -23849.0, -23739.0, -23668.0, -23599.0, -23535.0, -23467.0, -23393.0, -23311.0, -23257.0, -23226.0, -23158.0, -23055.0, -6398.0, -6247.0, -6176.0, -6115.0, -6086.0, -6027.0, -21451.0, -5394.0, -27796.0, -27073.0, -26720.0, -26489.0, -4840.0, -4730.0, -24153.0, -24103.0, -3046.0, -2966.0, -2863.0, -2441.0, -2305.0, -1926.0, -1635.0];
const holdingSeries = [0.0, 23770.0, 22700.0, 22260.0, 21830.0, 21260.0, 21350.0, 19870.0, 19560.0, 18150.0, 18990.0, 17630.0, 16500.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 15010.0, 0.0, 21620.0, 21650.0, 21560.0, 20590.0, 0.0, 0.0, 19190.0, 19590.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0];
const portfolioSeries = [56.0, -79.0, -1039.0, -1408.0, -1769.0, -2275.0, -2117.0, -3523.0, -3751.0, -5107.0, -4236.0, -5528.0, -6555.0, -6398.0, -6247.0, -6176.0, -6115.0, -6086.0, -6027.0, -6441.0, -5394.0, -6176.0, -5423.0, -5160.0, -5899.0, -4840.0, -4730.0, -4963.0, -4513.0, -3046.0, -2966.0, -2863.0, -2441.0, -2305.0, -1926.0, -1635.0];
const ctx = document.getElementById('equityChart').getContext('2d');
new Chart(ctx, {
type: 'line',
data: {
labels,
datasets: [
{ label: 'Cash', data: cashSeries, borderColor: '#1f77b4', fill: false },
{ label: 'Holding', data: holdingSeries, borderColor: '#ff7f0e', fill: false },
{ label: 'Portfolio', data: portfolioSeries, borderColor: '#2ca02c', fill: false, borderWidth: 2 }
]
},
options: {
responsive: true,
interaction: { mode: 'index', intersect: false },
plugins: {
tooltip: { callbacks: { label: (context) => `${context.dataset.label}: ${context.formattedValue}` } }
},
scales: {
y: { beginAtZero: false }
}
}
});
$(document).ready(function() {
$('#tradesTable').DataTable({
pageLength: 25,
order: [[0, 'asc']]
});
});
</script>
</body>
</html>