本策略旨在利用位姆斯特拉平台的追踪止损功能,动态调整止损价格,实现更准确和柔性的止损。策略不用于入场和出场,而是给出不同市场条件下合理的止损范围。建议您通过回测优化不同的参数。本策略也可以集成到现有入场出场策略中,作为止损。
本策略主要运用3个指标:最高价、最低价和收盘价。策略首先定义长仓和短仓的止损范围,即多头追踪止损距离longoffset
和空头追踪止损距离shortoffset
。其中长仓距离默认为228.5点,短仓距离默认为243.5点。
然后策略运用以下逻辑调整追踪止损价格trailstop
:
这样可以根据市场最高价和最低价的变化,实时调整追踪止损价,实现动态止损。
本策略最大的优势在于实现了真正动态和柔性的追踪止损。相比固定的止损价,动态追踪可以根据市场波动情况调整止损范围,避免止损距离过大带来不必要的损失,也避免止损距离过小被价格普通波动击出。这既减少了不必要的亏损,也降低了过早止损的概率。
另一个优势是止损距离是可以自定义和优化的。用户可以根据不同品种的特点和交易风格,选择适合自己的止损范围。这使得策略可以应用于更广泛的场景。
最后,本策略止损逻辑简单清晰,容易理解,也便于二次开发和集成到其他策略中,这也是其优势之一。
本策略的主要风险有以下几点:
动态止损只能减少正常行情下的亏损,无法抵御大的突发事件或者极端行情造成的亏损。这是动态止损本身的局限性。
如果追踪止损距离设置过大,则可能导致亏损扩大。如果距离过小,则可能过早止损。距离的设定需要根据品种特性谨慎测试和优化。
在刚开仓后的几根K线,由于追踪止损机制的原因,止损距离可能会过大,这段时间存在一定的额外风险。
本策略可以从以下几个方向进行优化:
不同品种参数优化:根据不同品种的波动程度、日内波动范围等指标,选择合理的多头和空头追踪止损距离。这是最关键的优化方向。
减少开仓后几根K线的额外风险:可以在开仓后的若干根K线上限制追踪止损距离的调整幅度,避免止损距离过大。
结合交易量指标:比如在交易量放大的阶段降低止损距离,避免被套利的止损。
和其他入场出场策略结合:本策略的主要作用是追踪止损,可以集成到其他策略中,与入场和出场规则配合使用。
本策略实现了根据行情最高价和最低价变化的动态追踪止损功能。这可以有效减少正常行情下不必要的亏损,也较好地解决了固定止损距离过大过小的问题。关键优化方向是测试不同品种合适的参数,以及在开仓后几根K线的风险控制。本策略止损逻辑简单清晰,容易理解和二次开发,可以集成到其他策略中或作为止损工具单独使用。
/*backtest start: 2023-02-20 00:00:00 end: 2024-02-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //By River strategy("BitMex Trailing Stop Strategy", overlay=true) longoffset = input(defval=228.5, title="Long Trailing Stop Size", type=float, minval=0.5, maxval=1000, step=0.5) shortoffset = input(defval=243.5, title="Short Trailing Stop Size ", type=float, minval=0.5, maxval=1000, step=0.5) hiprice = request.security(syminfo.tickerid, "1", high) loprice = request.security(syminfo.tickerid, "1", low) price = request.security(syminfo.tickerid, "1", close) trailstop = price trailstop := (loprice <= trailstop[1] and loprice[1] >= trailstop[2]) ? price + shortoffset : ((hiprice >= trailstop[1] and hiprice[1] <= trailstop[2]) ? price - longoffset : (hiprice > trailstop[1] ? max(hiprice - longoffset, trailstop[1]) : (loprice < trailstop[1] ? min(loprice + shortoffset, trailstop[1]) : price))) trailcol = trailstop > price ? red : green plot(trailstop, color=trailcol) longCondition = trailcol == green alertcondition(longCondition, "Long Stop alert", "BUY") if (longCondition) strategy.entry("Long", strategy.long) shortCondition = trailcol == red alertcondition(shortCondition, "Short alert", "SELL") if (shortCondition) strategy.entry("Short", strategy.short)