exit_model.walk_exits 给止盈记的毛收益是 target*a/entry,即假定限价单全额 成交在目标价。新增 lib/exit_fill.py:两张挂单常驻(半仓 3ATR、半仓 8ATR), 每根按该根在限价之上的可成交量逐步吃进,未成交部分继续持有,止损触发时 市价平掉剩余。可成交量 = 形状函数 f(k) × 该根主动买成交额,f 由影子成交流 实测(近似线性,即区间内均匀分布,故结论对形状假设不敏感)。 结果:预算对仓位规模远比预期稳健。到 100 万名义额,BTC 10.97→10.69、 ETH 15.34→15.20、SOL 17.21→15.83bp。原因是挂单常驻多根而非只在首次触及 那一根成交,且价格决定性穿过限价时整根成交量都可用。 首版实现有个静默 bug 值得记:avail_above 里有个 `hi <= 0` 的守卫,而空头 用「价格取负」处理,负价格空间里 hi 恒为负——所有空头挂单的可成交量一律 判 0,空头全被拖到 48 根超时收盘。下跌段里那比 3ATR 目标赚得多,于是预算 反而偏高 0.76bp,表现为「一个看似合理的模型差异」。已改为显式方向参数, 并加 assert_converges:仓位趋近 0 时必须逐笔收敛到 walk_exits,不符即抛错。 Co-authored-by: Cursor <cursoragent@cursor.com>
3.5 KiB
3.5 KiB
| 1 | sym | notional | budget_bp | budget_bp_old | maker_share | w_stop | w_time | net_bp | n |
|---|---|---|---|---|---|---|---|---|---|
| 2 | BTC | 5000.0 | 10.971497515124305 | 10.971497515124295 | 0.4230769230769231 | 0.3516483516483517 | 0.22527472527472528 | 15.724284543080632 | 91 |
| 3 | BTC | 10000.0 | 10.971497515124305 | 10.971497515124295 | 0.4230769230769231 | 0.3516483516483517 | 0.22527472527472528 | 15.724284543080632 | 91 |
| 4 | BTC | 20000.0 | 10.971497515124305 | 10.971497515124295 | 0.4230769230769231 | 0.3516483516483517 | 0.22527472527472528 | 15.724284543080632 | 91 |
| 5 | BTC | 50000.0 | 10.971497515124305 | 10.971497515124295 | 0.4230769230769231 | 0.3516483516483517 | 0.22527472527472528 | 15.724284543080632 | 91 |
| 6 | BTC | 100000.0 | 10.971497515124305 | 10.971497515124295 | 0.4230769230769231 | 0.3516483516483517 | 0.22527472527472528 | 15.724284543080632 | 91 |
| 7 | BTC | 200000.0 | 10.971497515124305 | 10.971497515124295 | 0.4230769230769231 | 0.3516483516483517 | 0.22527472527472528 | 15.724284543080632 | 91 |
| 8 | BTC | 320000.0 | 10.971497515124305 | 10.971497515124295 | 0.4230769230769231 | 0.3516483516483517 | 0.22527472527472528 | 15.724284543080632 | 91 |
| 9 | BTC | 530000.0 | 10.908448857487189 | 10.971497515124295 | 0.4214204503001539 | 0.3524912405185926 | 0.22608830918125347 | 15.641274735676083 | 91 |
| 10 | BTC | 1000000.0 | 10.690710190313572 | 10.971497515124295 | 0.41456048099090254 | 0.35467750033199696 | 0.23076201867710053 | 15.36403490298731 | 91 |
| 11 | ETH | 5000.0 | 15.336810540229132 | 15.336810540229127 | 0.4722222222222222 | 0.3253968253968254 | 0.20238095238095238 | 21.90346054757228 | 126 |
| 12 | ETH | 10000.0 | 15.336810540229132 | 15.336810540229127 | 0.4722222222222222 | 0.3253968253968254 | 0.20238095238095238 | 21.90346054757228 | 126 |
| 13 | ETH | 20000.0 | 15.336810540229132 | 15.336810540229127 | 0.4722222222222222 | 0.3253968253968254 | 0.20238095238095238 | 21.90346054757228 | 126 |
| 14 | ETH | 50000.0 | 15.336810540229132 | 15.336810540229127 | 0.4722222222222222 | 0.3253968253968254 | 0.20238095238095238 | 21.90346054757228 | 126 |
| 15 | ETH | 100000.0 | 15.336810540229132 | 15.336810540229127 | 0.4722222222222222 | 0.3253968253968254 | 0.20238095238095238 | 21.90346054757228 | 126 |
| 16 | ETH | 200000.0 | 15.336810540229132 | 15.336810540229127 | 0.4722222222222222 | 0.3253968253968254 | 0.20238095238095238 | 21.90346054757228 | 126 |
| 17 | ETH | 320000.0 | 15.336810540229132 | 15.336810540229127 | 0.4722222222222222 | 0.3253968253968254 | 0.20238095238095238 | 21.90346054757228 | 126 |
| 18 | ETH | 530000.0 | 15.336810540229132 | 15.336810540229127 | 0.4722222222222222 | 0.3253968253968254 | 0.20238095238095238 | 21.90346054757228 | 126 |
| 19 | ETH | 1000000.0 | 15.19839735083419 | 15.336810540229127 | 0.46778822061185865 | 0.3266775971833763 | 0.20553418220476508 | 21.75495166938152 | 126 |
| 20 | SOL | 5000.0 | 17.20729581305582 | 17.207295813055815 | 0.49310344827586206 | 0.2655172413793103 | 0.2413793103448276 | 24.42271817346687 | 145 |
| 21 | SOL | 10000.0 | 17.20729581305582 | 17.207295813055815 | 0.49310344827586206 | 0.2655172413793103 | 0.2413793103448276 | 24.42271817346687 | 145 |
| 22 | SOL | 20000.0 | 17.20729581305582 | 17.207295813055815 | 0.49310344827586206 | 0.2655172413793103 | 0.2413793103448276 | 24.42271817346687 | 145 |
| 23 | SOL | 50000.0 | 17.12169148018871 | 17.207295813055815 | 0.49112524587410755 | 0.26723407222095347 | 0.24164068190493895 | 24.325613268263233 | 145 |
| 24 | SOL | 100000.0 | 17.024617862994077 | 17.207295813055815 | 0.4874068783573466 | 0.2680997947311664 | 0.24449332691148706 | 24.238726756516837 | 145 |
| 25 | SOL | 200000.0 | 16.83524812354264 | 17.207295813055815 | 0.4813611824188418 | 0.26935037627246794 | 0.24928844130869035 | 24.048022486441045 | 145 |
| 26 | SOL | 320000.0 | 16.524586307202075 | 17.207295813055815 | 0.4732031722818229 | 0.27277272324336915 | 0.254024104474808 | 23.702889125473174 | 145 |
| 27 | SOL | 530000.0 | 16.275686387067427 | 17.207295813055815 | 0.4660589094844057 | 0.2753631016069268 | 0.2585779889086674 | 23.432003034952427 | 145 |
| 28 | SOL | 1000000.0 | 15.829170691791866 | 17.207295813055815 | 0.4547125585779213 | 0.27881565544002057 | 0.2664717859820582 | 22.915331236730324 | 145 |