Эта стратегия основана на индикаторе динамической скользящей средней, в сочетании с полосами Боллинджера и RSI для фильтрации торговых сигналов. Она реализует тенденцию, следующую только долгой стратегии. Стратегия оценивает тенденцию путем расчета изменения цены закрытия динамической скользящей средней Хайкена Аши и сравнивает ее с полосами Боллинджера для генерации торговых сигналов. С помощью фильтра RSI он может эффективно идентифицировать взрывные точки тренда для отслеживания тренда.
Ядром этой стратегии является вычисление изменения динамической скользящей средней цены закрытия Хайкена Аши. В частности, она вычисляет разницу между текущим MA и MA двух предыдущих баров, а затем умножает ее на коэффициент чувствительности, чтобы получить точное значение изменения MA.
Затем это значение изменения сравнивается с разницей между верхней и нижней полосами Боллинджеров. Если изменение MA больше, чем разница BB, это считается "взрывом тренда". Когда взрыв положительный, то есть изменение MA положительное, он генерирует длинный сигнал и зеленую полоску. Когда взрыв отрицательный, то есть изменение MA отрицательное, он генерирует близкий сигнал и красную полоску.
Кроме того, эта стратегия имеет фильтр RSI, который разрешает длинные сигналы только тогда, когда RSI выше порогового значения, избегая риска перелома тренда.
Методы контроля риска включают: правильную настройку параметров на надежность, сочетание других индикаторов для оценки обратной тенденции, использование только в ясных долгосрочных тенденциях и т.д.
Есть возможность для дальнейшей оптимизации:
Попробуйте различные источники цен, такие как закрытие, скользящие средние и т. Д. Для лучшего сглаживания
Корректировка параметров периода MA и BB для оптимизации различных продуктов
Попробуйте соотношение взаимосвязи вместо коэффициента чувствительности для более интуитивного значения показателя
Добавьте другие фильтры, такие как линии тренда, громкость и т. Д., Чтобы улучшить качество сигнала
Разработка краткосрочной стратегии, основанной на моделях показателей
Включить механизмы стоп-лосса для лучшего контроля рисков
В целом это относительно стабильный тренд, следующий за стратегией. Он использует динамическую скользящую среднюю для определения направления тренда, BB для выявления взрывных точек, RSI для фильтрации ложных сигналов, реализуя длинную только трендовую систему. Но он также имеет некоторые риски, требующие настройки параметров для разных продуктов и временных рамок, и невозможность извлекать выгоду из нисходящих тенденций. Есть место для дальнейших улучшений, таких как улучшение качества сигнала, разработка короткой стратегии, добавление стоп-лосса и т. д. для достижения лучших результатов.
/*backtest start: 2022-11-08 00:00:00 end: 2023-11-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 ///////////Original Script Courtesy of Lazy_Bear.... Absolute Legend\\\\\\\\\\\\\\\ strategy('SmoothedWaddah', overlay=false, initial_capital=1) sensitivity = input(150, title='Sensitivity') fastLength = input(20, title='MacD FastEMA Length') slowLength = input(40, title='MacD SlowEMA Length') channelLength = input(20, title='BB Channel Length') mult = input(1.5, title='BB Stdev Multiplier') RSI14filter = input(40, title='RSI Value trade filter') ////////////MacD Calculation of price////////////////////////////// calc_macd(source, fastLength, slowLength) => fastMA = ta.ema(source, fastLength) slowMA = ta.ema(source, slowLength) fastMA - slowMA /////////BolingerBand Calculation of Price/////////////////////// calc_BBUpper(source, length, mult) => basis = ta.sma(source, length) dev = mult * ta.stdev(source, length) basis + dev calc_BBLower(source, length, mult) => basis = ta.sma(source, length) dev = mult * ta.stdev(source, length) basis - dev //////heinkenashi chart call for closing price "smoothing mechanism"\\\\\\\\\\\\\\\\\\\\\\\\\\\ point = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close) ////////////////////T1 is change in MacD current candle from previous candle Sensitivy amplifies calculation///////////////////// t1 = (calc_macd(point, fastLength, slowLength) - calc_macd(point[1], fastLength, slowLength)) * sensitivity //////////////////////T2 is T1 from two candles prior\\\\\\\\\\\\\\\\\\\\\\\\\\\ t2 = (calc_macd(point[2], fastLength, slowLength) - calc_macd(point[3], fastLength, slowLength)) * sensitivity ////////////////E1 is difference in bolinger band upper and lower...E2 is E1 from one candle prior not needed////////////// e1 = calc_BBUpper(ohlc4, channelLength, mult) - calc_BBLower(ohlc4, channelLength, mult) //e2 = (calc_BBUpper(close[1], channelLength, mult) - calc_BBLower(close[1], channelLength, mult)) //////signal bar printing.. Up if MacD positive .. Down if MacD negative////////// trendUp = t1 >= 0 ? t1 : 0 trendDown = t1 < 0 ? -1 * t1 : 0 ///////plots difference in macD*Sensitivity, color change if increasing or decreasing. //////color is green/lime if explosion is up \ color is red/orange if explosion is down///////// plot(trendUp, style=plot.style_columns, linewidth=1, color=trendUp < trendUp[1] ? color.new(color.lime,45) : color.new(color.green,45), title='UpTrend') plot(trendDown, style=plot.style_columns, linewidth=1, color=trendDown < trendDown[1] ? color.new(color.orange,45) : color.new(color.red,45), title='DownTrend') plot(e1, style=plot.style_line, linewidth=2, color=color.new(#A0522D, 0), title='ExplosionLine') ////////////Entry conditions and Concept///////////////////// ////////////Long Only System. T1 is measuring the distance between MACD EMA's. This is Multiplied ////////////by the sensitivity so that it can be compared to the difference between BollingerBand. /////////////{this could have been a ratio maybe i will work with that in a different script.} /////////////I found that 135-175 sensitivy allows for values to be compared on most charts..... ////////////If the (difference between the EMA)*(Sensitivity) is greater than (BB upper line- BB lower line) ////////////it is considered an explosion in either the downside or the upside.The indicator will print ///////////a bar higher than the trigger line either green or red (up or down respectively)////////////////// longCondition = trendUp > e1 and ta.rsi(close, 14) > RSI14filter if longCondition strategy.entry('up', strategy.long) strategy.close('up', trendDown > e1)