渐进止损上移策略是一个简单但非常实用的策略,它可以在价格上涨时提醒您逐步上移止损位。
该策略首先在长仓入场时设置初始止损位为入场价的95%。然后它会定义多个更高的止损位,分别为入场价的100%、105%、110%等。策略会检查过去7天的最低价是否突破上一个止损位,如果突破,则把止损位设置为该更高的止损位。这样随着价格上涨,止损位也会逐步上移。
具体来说,策略会定义8个止损位,分别是入场价的95%、100%、105%、110%、115%、120%、125%、130%。它会检查过去7天的最低价是否高于下一个止损位,如果是,则把止损位设置为该更高的止损位。
举例来说,如果入场价是100美元,则初始止损位是95美元。如果最近7天最低价上涨到了105美元,高于下一个止损位100美元,则把止损位设置为100美元。如果继续上涨到115美元,则将止损位设置为105美元,以此类推。
这样随着价格上涨,止损位也会不断上移,实现渐进止损,保护了部分利润。同时避免了普通跟踪止损在回测中产生的过于乐观的效果。
这种渐进止损策略最大的优势是可以随着价格上涨逐步上移止损位,保护部分利润,避免止损被突破然后直接亏损全部利润。
相比普通的跟踪止损,渐进止损在回测时不会产生过于乐观的结果。因为普通跟踪止损会在价格出现回撤时立即下移止损位,从而跳过了回撤过程直接进入下一次上涨。但实际交易中是无法跳过回撤过程的。这会导致普通跟踪止损策略在实际交易中无法达到回测的效果。
而渐进止损策略因为止损位是逐步上移的,所以在回测中能更真实地反映实际交易时止损位移动的过程,避免产生过于乐观的结果。
此外,该策略提供的是止损修改的时机提示,让交易者自己动手修改止损位。许多交易所不提供跟踪止损功能,所以这种策略更具有通用性,可以广泛应用到不同的交易平台。
该策略最大的风险是止损位上移速度可能跟不上极快的价格上涨。如果价格在很短时间内剧烈上涨,超过多个止损位,则止损位只能缓慢上移,无法及时保护利润。
另一个风险是交易者可能错过或延迟修改止损位的时机。该策略仅提供止损修改的时机提示,具体止损位调整还需交易者自己动手操作。如果交易者疏忽没有及时修改,或者修改操作延迟,都可能导致止损被突破。
该策略可以通过以下方式进行优化:
优化止损位的百分比设置,使其更符合具体交易品种的波动情况。
优化查看最低价周期参数,例如改为查看最近5天或10天的最低价,以适应不同品种的波动频率。
增加止损位数量,使止损位上移更加渐进。
添加移动止盈位的逻辑,让止盈位也能逐步上移。
将止损修改操作自动执行,无需人工参与,减少操作难度和延迟风险。
添加对突破止损的事件提醒,避免交易者疏忽止损被突破的情况。
渐进止损上移策略是一个简单实用的策略思想,它可以随着价格上涨逐步上移止损位,在保护利润的同时避免产生过于乐观的模拟交易结果。与普通跟踪止损相比,它更适合实际交易环境,也更容易在不同交易平台上应用。通过对止损位百分比、最低价参数、止损数量等的优化,可以使该策略更好地适应不同交易品种。结合移动止盈和止损执行自动化,可以进一步降低操作难度和风险。
/*backtest
start: 2023-10-13 00:00:00
end: 2023-11-12 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
///Moving Stops Script///
///by ShanghaiCryto///
///A simple, but very useful, script that reminds you to move up your stop losses as price trends upwards. ///
///The sma entry is just stock code to demonstrate how the stop works.///
///Doesn't throw off your backtesting the way a trailing stop does.///
strategy("Move Up Stops", overlay=true)
longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
first_stop = strategy.position_avg_price * .95
second_stop = strategy.position_avg_price
third_stop = strategy.position_avg_price * 1.05
fourth_stop = strategy.position_avg_price * 1.1
fifth_stop = strategy.position_avg_price * 1.15
sixth_stop = strategy.position_avg_price * 1.2
seventh_stop = strategy.position_avg_price * 1.25
eighth_stop = strategy.position_avg_price * 1.3
move_trigger = lowest(low,7)
first_check = na
first_check := move_trigger > second_stop ? second_stop : first_stop
second_check = na
second_check := move_trigger > third_stop ? third_stop : first_check
third_check = na
third_check := move_trigger > fourth_stop ? fourth_stop : second_check
fourth_check = na
fourth_check := move_trigger > fifth_stop ? fifth_stop : third_check
fifth_check = na
fifth_check := move_trigger > sixth_stop ? sixth_stop : fourth_check
sixth_check = na
sixth_check := move_trigger > seventh_stop ? seventh_stop : fifth_check
stop_level = na
stop_level := move_trigger > eighth_stop ? eighth_stop : sixth_check
strategy.exit("Stop Loss","My Long Entry Id", stop=stop_level)
plot(stop_level, color=red)