跳至正文

查看原文

FilAggressorBurstContinuation

假设数

FIL主动方突破延续策略,多空双向(FILUSDT.BINANCE USD-M 1小时:跟随一个>=4-sigma、>=5x倍成交量、极端收盘位置的小时,固定持仓4小时,约98%的时间空仓)

假设数

改编自小草在FMZ Quant上发布的一篇摘要,《5天赚80倍,高频策略的威力》(2020-11-04,https://www.fmz.com/digest-topic/6228).)。原文在币安FIL永续合约上运行一个亚秒级做市机器人。它根据近期主动成交推断短期方向,并在成交量激增时加仓。作者表示,该策略只有在市场高度活跃、多空争夺激烈时才有效,其余时间基本处于空闲状态。这里无法测试亚秒级做市版本:我们的回测以吃单成交,在100毫秒的持仓周期下,捕获的收益远低于约0.10%的往返成本。我们6个月的taker_ratio历史数据也太短。本假设保留了作者的两个论点:激进的单边流可预测下一步走势,且该优势仅存在于罕见的高活跃度突破中。它将两者迁移到一个能覆盖手续费的时间尺度上。这是一个单腿、多空双向、纯OHLCV策略,交易FILUSDT.BINANCE(作者自己使用的品种,1小时历史数据可追溯至2020-10-16,约52k根K线)。策略在出现一小时主动方突破之前保持空仓。突破需要满足三个条件:绝对1小时对数收益率>=过去30天小时收益率标准差的4x倍,成交额>=过去30天小时成交额中位数的5x倍,且收盘价位于该K线区间外四分之一处、与行情方向一致(收盘位置值|CLV| > 0.5,符号与收益率相同)。CLV是我们在K线层面衡量主动方失衡的代理指标。策略在下一根K线上按突破方向入场,并在恰好4小时后离场。在FIL 1小时(不重叠事件)上进行预筛选:共172个事件,平均有符号4小时前瞻变动为+0.64%,在7个日历年中有6年为正(2023年为-0.32%)。诚实的提醒:该单元格是18个筛选单元格(3个品种 x 3种持仓 x 2个阈值)中表现最好的,因此已披露该选择过程。相邻单元格表现较弱:FIL 12小时+1.06%,但按年份表现不一;FIL z3/v3在4小时下仅+0.05%。收缩校正步骤应将此计入。同一规则在DOGE上得到+0.37%,在LINK上得到+0.06%,因此我们预计该优势具有FIL特异性且较为脆弱。

假设数

迭代2实现了分析师的这一改动。新增的布尔参数allow_short(默认False)会阻止SELL入场:在上一次回测中,空头在72笔交易中亏损-$60.6k,而多头在91笔交易中盈利+$157.5k。信号和阈值保持不变(z 4,成交量5x,CLV 0.5,持仓4小时,回看720根K线)。仓位设置现在将名义敞口上限设为1.0x时的position_fraction*权益。杠杆乘数已移除,配置杠杆为1.0。在信号K线收盘价上施加8% fill_buffer的折扣,以吸收从信号收盘到下一根K线成交之间的价格变动。正是这一变动将avg_position_pct推高至112%。披露:舍弃空头是在看到回测结果后做出的选择,应将其计为在18个预筛选单元格之外的又一次试验。预期:交易笔数约90笔,PF约为1.5,平均每笔交易约1.2%。若仅多头PF仍低于1.4,则应放弃该前提。

实现

在1小时K线上交易FIL USD-M永续合约。它会等待满足三个条件的突破小时:绝对1小时对数收益率至少为过去30天标准差的4x倍,成交额至少为过去30天中位数的5x倍,且收盘位置值在行情方向一侧超过0.5。随后在下一根K线上按突破方向入场,并在恰好4小时后离场。默认仅做多(allow_short=False)。优化器可以重新启用空头。

验证结果

在运行元数据中记录本次测试的变体为仅做多,在收缩校正步骤中将其计为一次额外试验,并让分析师将其与预筛选中仅做多的子集进行对比评判。

验证结果

假设的标题和描述中写的是多空双向,但allow_short默认设置为False,因此本轮迭代只做多头交易。分析师的迭代结论要求了这一改动,开发人员也将其披露为一次额外的试验,且空头路径仍以参数形式保留在代码中。因此我将其视为一次刻意的、有记录的偏离,而非实现错误。不过,预先登记的假设仍然是多空双向的。

验证结果

可以考虑增加一个可选的灾难性止损,例如设置一个stop_loss_pct约为8-10%的止损括号,或在1.0以下设置position_fraction,这样单次反转造成的损失就不会超过权益的百分之几。

验证结果

每笔仓位的规模最高可达1.0x权益,且没有硬止损;只有4小时的时间止损会将其平仓。该假设本身没有提出止损要求,因此这并不算不匹配。但在突破之后出现剧烈反转——FIL曾出现过这种情况(数小时内波动15-25%)——可能会在单笔交易中损失很大一部分权益。

验证结果

可接受。也可以选择从position.ts_opened中推导入场时间。

验证结果

_entry_ts只存在于内存中。若在有持仓的情况下重启,_entry_ts会变为0,因此should_exit会返回True,仓位将在下一根K线被平掉。这样做是安全的,但持仓时间会与重放结果不同。

验证结果

无需任何操作。

验证结果

min_bars_required()被重写以返回2。预热在内部处理,因为在720根K线的双端队列填满之前,信号会一直保持0,因此这个重写是正确的。

验证结果

冒烟测试在834天内进行了25笔多头交易,账目内部一致:2.80% x 25约为+70%,与报告的+71.9%相符,PF 3.13。有三点对此不利。该单元格是至少19次试验中最好的(18个预筛选单元格,加上在看到回测结果后舍弃空头)。最大单笔盈利($35.5k)约占总盈亏的一半。收益偏度为3.1。在优化之前应检查逐年盈亏和单笔交易集中度。在完整时间跨度上,预计约有90笔多头交易,这为前向验证和留出集划分留下的空间很小。

回测评审

交易与机制相符:95笔仅做多入场,每笔均恰好持仓4小时,且均在突破后的下一根K线入场。已按要求应用了来自迭代1的allow_short=false改动。

回测评审

单笔交易收益为1.26%,约为0.15%下限的8x。PF为1.69,佣金占总额的4.2%,冲击成本为11.6%。容量约为$7.5M。

回测评审

按交易盈亏计算,7年中有6年为正;只有2022年亏损(-$13.3k)。

回测评审

最大回撤为19.1%,低于20%期货默认水平,且期末无持仓。

回测评审

QA的集中度担忧在一定程度上得到了印证。最大盈利($49.2k)占$124.8k净PnL的39%,前3笔交易占74%。仅十一月的2025就占+39.8%。

回测评审

夏普比率为0.58,其置信区间[-0.20, 1.19]跨越了0,PSR为0.64。仓位约有99%的时间处于空仓状态,因此夏普比率在机制上偏低。经收缩校正后不太可能超过1.0。

回测评审

该单元格是18个预筛选单元格中表现最好的,另外还在看到回测结果后舍弃了空头。

回测评审

该优势仅存在于高压波动机制中。常规机制亏损17.6%,回撤用了1457天才恢复。

回测评审

疑似测量异常,尚未核实:恰好相互抵消的每日收益率成对出现(例如-3.059%/+3.1555%),且反复出现在没有交易的日子里。它们只增加了方差,却不改变收益。标记以供引擎审查。

分析

ONE变化,一个预期指标变动。空头端在摧毁价值:多头91笔交易净赚+$157.5k,空头72笔交易净亏-$60.6k(空头胜率36%,多头为46%)。这回答了QA的问题:空头端不仅没有增益,反而在拖累。改动:新增一个布尔参数allow_short(默认False)。在should_enter中,仅当allow_short为真时才返回SELL,以便优化器仍可对其进行测试。其余保持不变:z_thresh 4,vol_mult 5,clv_thresh 0.5,持仓4小时,回看期720。预期:profit_factor从1.28升至约1.5或更高,avg_trade_return_pct从0.75%升至约1.2%,交易笔数约90笔。若仅多头PF仍低于1.4,则突破延续的前提过于薄弱,该轮应予放弃,而非继续迭代。用于收缩校正的披露:舍弃空头是在看到本次回测结果后做出的选择,应将其计为在18个预筛选单元格之外的又一次试验。另外将名义敞口上限设为position_fraction*权益。目前avg_position_pct为112%(杠杆漂移至1.05-1.06x)。将其保持在1.0x,以免回撤(34%)被放大。ENGINE/METRICS NOTE,而非开发人员修复:报告中的daily_returns序列存在虚假的成对天数,大约-6%后接+6.5%,以17天为周期从2021-10-20重复到2022-09-09(例如2021-10-20/21、2021-11-06/07、2022-06-15/16、2022-08-22/23)。这些日期不存在任何交易,权益曲线是平的。夏普比率0.39、索提诺比率、波动率、VaR/CVaR、最大DD持续时间以及压力/机制表都被这些行污染了。交易层面的盈亏恰好对账至total_return(+$96,856)。该机制尚未核实;在优化器将夏普比率作为目标函数之前,应上报引擎审查。
策略报告

Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。