本策略基于布林带指标,结合动量指标,实现布林带回归和动量突破的组合交易策略。当价格从布林带下方突破中线时做多,当价格从布林带上方突破中线时做空,并追踪止损止盈情况,在达到目标盈亏比后平仓。
本策略使用布林带中线sma作为均线指标,带宽通过参数mult*stdev动态调整。当价格从下方突破中线时,说明价格获取上行动量,这时做多;当价格从上方突破中线时,说明价格获取下行动量,这时做空。做多做空后设置止盈止损参数,用于追踪利润和控制风险。
具体来说,布林带的计算通过length和mult两个参数完成,长度length决定中线的周期,mult决定带宽的大小。enterLong和enterShort判断突破的时机,exitLong和exitShort根据入场价格和目标止盈止损比例计算止损止盈价格。
本策略结合了均线回归和动量指标,能够在趋势开始阶段顺势捕捉较大行情。与简单跟踪均线相比,增加了基于布林带宽度的动量判断,可以过滤掉部分假突破。止盈止损设置直接基于入场价格计算,无需人工干预。
可以通过调整布林中线周期、带宽参数以及止损范围来优化,使得策略更加适应不同市场情况。
本策略整合布林带回归和动量指标的优点,可以在趋势开始的时候顺势捕捉部分行情,通过参数调整可以适应不同阶段市场,是一种较为通用的突破系统。止盈止损设置直接从价格计算可以减少人工干预。本策略也存在一些改进空间,例如加入更多辅助判决指标等,这些将在后续的研究和优化中进一步完善。
/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("BURATINO", overlay=true)
// Входные параметры
length = input(20, minval=1, title="Length")
mult = input(2.0, minval=0.1, maxval=5, title="Multiplier")
target_percent = input(0.5, minval=0.1, title="Target Percent")
stop_loss_percent = input(95, minval=0.1, title="Stop Loss Percent")
// Расчет полос Боллинджера
basis = sma(close, length)
dev = mult * stdev(close, length)
upper = basis + dev
lower = basis - dev
// Переворот снизу вверх через среднюю линию Боллинджера для открытия лонга
enterLong = cross(close, basis) and close[1] < basis[1]
// Переворот сверху вниз через среднюю линию Боллинджера для открытия шорта
enterShort = cross(basis, close) and close[1] > basis[1]
// Закрытие лонга после роста цены на указанный процент или падения на указанный процент
exitLong = close >= strategy.position_avg_price * (1 + (target_percent / 100)) or close <= strategy.position_avg_price * (1 - (stop_loss_percent / 100))
// Закрытие шорта после падения цены на указанный процент или роста на указанный процент
exitShort = close <= strategy.position_avg_price * (1 - (target_percent / 100)) or close >= strategy.position_avg_price * (1 + (stop_loss_percent / 100))
// Управление позициями и ограничениями на открытие противоположных позиций
strategy.entry("Long", strategy.long, when = enterLong and strategy.position_size == 0)
strategy.entry("Short", strategy.short, when = enterShort and strategy.position_size == 0)
strategy.close("Long", when = exitLong)
strategy.close("Short", when = exitShort)
// Визуализация полос Боллинджера
plot(basis, color=color.blue, title="Basis")
plot(upper, color=color.red, title="Upper")
plot(lower, color=color.green, title="Lower")