Эта стратегия генерирует торговые сигналы, основанные на историческом диапазоне волатильности цены. Она рассчитывает разницу между самыми высокими и самыми низкими ценами за определенный период и формирует диапазон волатильности с использованием скользящих средних. Торговые сигналы запускаются, когда цена прорывается через верхние или нижние полосы диапазона. Это относится к трендосопровождающим стратегиям прорыва.
Основным показателем является историческая волатильность цены.
Вычислить разницу между максимальной и минимальной ценами за последние N баров, называемых HL
Вычислить среднее значение наивысшей и наименьшей цены по N штрих, avg ((H, L)
Волатильность = HL/avg ((H, L)
где N - параметр
После получения волатильности диапазоны рассчитываются как:
Верхняя полоса = текущее закрытие + текущее закрытие * Волатильность
Нижняя полоса = текущее закрытие - текущее закрытие * Волатильность
Затем полосы сглаживаются WMA с периодом, установленным как
Когда цена проходит выше верхней полосы, делайте длинный ход. Когда цена проходит ниже нижней полосы, делайте короткий.
Сигналы выхода определяются
Если тип выхода - Volatility MA, выйти, когда цена снова пересекает WMA.
Если тип выхода - это пересечение диапазона, выйти, когда цена пересекает обратно ниже диапазонов.
Риски могут быть уменьшены:
Стратегия может быть улучшена путем:
Проверьте различные значения длины, чтобы найти оптимальные комбинации.
Например, когда цена превышает верхнюю полосу, проверьте, не пересекается ли и MACD.
Оптимизирую для остановок на задней стороне вместо простых остановок на перерыве диапазона.
Установите правила повторного входа, чтобы снова обнаружить тенденции после остановок.
Динамически корректировать размеры на основе волатильности рынка.
Эта стратегия хорошо работает для трендовых рынков в целом, используя диапазоны, основанные на волатильности, для измерения силы тренда и WMA для формирования надежных торговых диапазонов для сигналов прорыва.
/*backtest start: 2023-09-13 00:00:00 end: 2023-09-20 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © wbburgin //@version=5 strategy("Volatility Range Breakout Strategy [wbburgin]", shorttitle = "VRB Strategy [wbburgin]", overlay=true, pyramiding=20,max_bars_back=2000,initial_capital=10000) wma(float priceType,int length,float weight) => norm = 0.0 sum = 0.0 for i = 0 to length - 1 norm := norm + weight sum := sum + priceType[i] * weight sum / norm // This definition of volatility uses the high-low range divided by the average of that range. volatility(source,length) => h = ta.highest(source,length) l = ta.lowest(source,length) vx = 2 * (h - l) / (h + l) vx vm1 = input.int(100,"Average Length") volLen = input.int(100,"Volatility Length") vsrc = input.source(close,"Volatility Source") cross_type = input.source(close,"Exit Source") exit_type = input.string("Volatility MA",options=["Volatility MA","Range Crossover"],title="Exit Type") volatility = volatility(vsrc,volLen) highband1 = close + (close * volatility) lowband1 = close - (close * volatility) hb1 = wma(highband1,vm1,volatility) lb1 = wma(lowband1,vm1,volatility) hlavg = math.avg(hb1,lb1) upcross = ta.crossover(high,hb1) //Crossing over the high band of historical volatility signifies a bullish breakout dncross = ta.crossunder(low,lb1) //Crossing under the low band of historical volatility signifies a bearish breakout vlong = upcross vshort = dncross vlong_exit = switch exit_type == "Volatility MA" => ta.crossunder(cross_type,hlavg) exit_type == "Range Crossover" => ta.crossunder(cross_type,hb1) vshort_exit = switch exit_type == "Volatility MA" => ta.crossover(cross_type,hlavg) exit_type == "Range Crossover" => ta.crossover(cross_type,lb1) if vlong strategy.entry("Long",strategy.long) if vlong_exit strategy.close("Long") if vshort strategy.entry("Short",strategy.short) if vshort_exit strategy.close("Short") plot(hlavg,color=color.white,title="Weighted Volatility Moving Average") t = plot(hb1,color=color.new(color.red,50),title="Volatility Reversal Band - Top") b = plot(lb1,color=color.new(color.green,50),title="Volatility Reversal Band - Bottom") alertcondition(vlong,"Volatility Long Entry Signal") alertcondition(vlong_exit,"Volatility Long Exit Signal") alertcondition(vshort,"Volatility Short Entry Signal") alertcondition(vshort_exit,"Volatility Short Exit Signal") fill(t,b,color=color.new(color.aqua,90))