Стратегия скользящей средней ленты (англ. Moving Average Ribbon strategy) - это стратегия, основанная на нескольких скользящих средних. Она одновременно отслеживает быстрые и медленные скользящие средние, и генерирует торговые сигналы, когда цены проходят через скользящую среднюю ленту. Стратегия сочетает в себе определение тренда и показатели перекупленности/перепроданности, которые могут эффективно улавливать среднесрочные и долгосрочные тенденции.
Стратегия использует 5 быстрых скользящих средних (5-, 8-, 13-, 20- и 30-дневных линий) и 4 медленно скользящих средних (45, 70-, 105 и 150-дневных линий). Быстрые линии образуют внутреннюю скользящую среднюю ленту, а медленные линии образуют внешнюю скользящую среднюю ленту. Сигнал покупки генерируется, когда цены превышают внутреннюю ленту, а сигнал продажи генерируется, когда цены превышают внутреннюю ленту. Чтобы отфильтровать ложные перерывы, необходимо, чтобы цены пробивались через внутреннюю ленту в течение 3 последовательных свечей, и большинство быстрых скользящих средних также пробиваются синхронно, прежде чем генерировать торговые сигналы.
Кроме того, стратегия также рассматривает долгосрочные тенденции. Она рассматривает только генерацию сигналов покупки, когда цены выше 200-дневной скользящей средней. Наоборот, она рассматривает только генерацию сигналов продажи, когда цены опускаются ниже 200-дневной скользящей средней. Определяя долгосрочные тенденции, она предотвращает попадание в ловушку во время консолидации.
Стратегия имеет следующие преимущества:
Сочетание внутренней и внешней скользящей средней ленты с быстрыми и медленными линиями хорошо работает при определении средне- и долгосрочных тенденций.
Механизм последовательного перерыва может эффективно отфильтровать ложные перерывы.
Использование 200-дневной линии для определения позволяет открывать позиции только тогда, когда тенденции начинают меняться.
Условия перепродажи/перекупки: передвижные средние сами по себе имеют тенденцию, а сочетание показателей перепродажи/перекупки для установки точек остановки обеспечивает хорошее управление рисками.
К основным рискам этой стратегии относятся:
Риск неудачного прорыва.
Риск потери во время колебания трендов. Когда рынок колеблется в течение длительных периодов, точки остановки могут часто достигаться, что приводит к большим потерям.
Риск оптимизации параметров. Неправильное настройка параметров скользящей средней также может привести к ошибкам в торговых сигналах, что приводит к большим потерям.
Соответствующие решения:
Соответственно расширить точки остановки потери, чтобы дать ценам достаточно пространства для движения.
Добавить индикаторы оценки тренда, чтобы избежать установления позиций без направления во время консолидации, таких как фильтрация с помощью DMI, MACD и других индикаторов.
Используйте методы обратного тестирования и оптимизации параметров для выбора лучших комбинаций параметров.
Стратегия может быть оптимизирована в следующих аспектах:
Оптимизировать скользящие средние параметры для выбора наилучших циклов. Запустить обратные тесты скользящих средних с различными циклами, чтобы найти оптимальную комбинацию параметров.
Добавьте индикаторы оценки тренда для фильтрации, такие как RSI для перекупа / перепродажи, полосы Боллинджера для прорывов канала и т. Д. Избегайте установления позиций слепо, когда тенденции неясны.
Принять адаптивные скользящие средние показатели. оптимизировать динамически скользящие средние параметры в соответствии с изменяющимися условиями рынка и волатильностью, чтобы они лучше соответствовали текущему состоянию рынка.
Сочетать модели машинного обучения для оценки вероятности тренда. Создать модели вероятности для оценки шансов успешного прорыва, помогая системе принятия решений в оценке идеального времени входа.
Оптимизируйте стратегии стоп-лосса для лучшего отслеживания цен, такие как отслеживание стоп-лосса или динамическое размещение позиции стоп-лосса, чтобы сделать линию стоп-лосса более интеллектуальной.
Стратегия перемещающейся средней ленты является одной из наиболее распространенных стратегий следования трендам. Она сочетает в себе быстрые и медленные линии для оценки среднесрочных и долгосрочных тенденций и устанавливает последовательные механизмы прорыва для принятия решений о входах.
//@version=4 strategy(title="Moving Average Ribbon", shorttitle="MA Ribbon", overlay=true) src = input(close, type=input.source, title="Source") matype = input(title="Input one in lowercase: sma, ema, wma, trima, zlema, dema, tema, or hma", type=input.string, defval="trima") // possible values: sma, ema, wma, trima, zlema, dema, tema, hma (hull ma) trima(_src, _len) => sma(sma(_src, _len), _len) hma(_src, _len) => wma(2 * wma(_src, _len / 2) - wma(_src, _len), round(sqrt(_len))) dema(_src, _len) => 2 * ema(_src, _len) - ema(ema(_src, _len), _len) tema(_src, _len) => 3 * ema(_src, _len) - 3 * ema(ema(_src, _len), _len) + ema(ema(ema(_src, _len), _len), _len) zlema(_src, _len) => ema(_src, _len) + ema(_src, _len) - ema(ema(_src, _len), _len) ma(_src, _len) => hma__1 = hma(_src, _len) ema_1 = ema(_src, _len) sma_1 = sma(_src, _len) wma_1 = wma(_src, _len) trima__1 = trima(_src, _len) zlema__1 = zlema(_src, _len) dema__1 = dema(_src, _len) tema__1 = tema(_src, _len) matype == "hma" ? hma__1 : matype == "ema" ? ema_1 : matype == "sma" ? sma_1 : matype == "wma" ? wma_1 : matype == "trima" ? trima__1 : matype == "zlema" ? zlema__1 : matype == "dema" ? dema__1 : tema__1 ma05 = ma(src, 5) ma08 = ma(src, 8) ma13 = ma(src, 13) ma20 = ma(src, 20) ma30 = ma(src, 30) ma45 = ma(src, 45) ma70 = ma(src, 70) ma105 = ma(src, 105) ma150 = ma(src, 150) ma200 = ma(src, 200) maColor(ma, maRef) => if change(ma) <= 0 and ma05 < maRef color.new(color.red, 20) else if change(ma) >= 0 and ma05 > maRef color.new(color.navy, 20) else if change(ma) < 0 and ma05 > maRef color.new(color.red, 20) else if change(ma) >= 0 and ma05 < maRef color.new(color.navy, 20) else color.gray aboveConfirmed(x,maRef)=> above=true for i=1 to x if close[i]<maRef[i] and not (close[i]>ma200[i]*1.01) and not (ma05[i]>ma105[i]*1.015) above:=false above aboveMost(x,len)=> above=0 boolean=false if close[len]>ma05[len] above:=above+1 if close[len]>ma08[len] above:=above+1 if close[len]>ma13[len] above:=above+1 if close[len]>ma20[len] above:=above+1 if close[len]>ma30[len] above:=above+1 if close[len]>ma45[len] above:=above+1 if close[len]>ma70[len] above:=above+1 if close[len]>ma105[len] above:=above+1 if close[len]>ma150[len] above:=above+1 if close[len]>ma200[len] above:=above+1 if(above>=x) boolean:=true boolean belowMost(x,len)=> above=0 boolean=false if close[len]<ma05[len] above:=above+1 if close[len]<ma08[len] above:=above+1 if close[len]<ma13[len] above:=above+1 if close[len]<ma20[len] above:=above+1 if close[len]<ma30[len] above:=above+1 if close[len]<ma45[len] above:=above+1 if close[len]<ma70[len] above:=above+1 if close[len]<ma105[len] above:=above+1 if close[len]<ma150[len] above:=above+1 if close[len]<ma200[len] above:=above+1 if(above>=x) boolean:=true boolean belowConfirmed(x,maRef)=> below=true for i=1 to x if close[i]>maRef[i] and not (close[i]<maRef[i]*0.99) and not (ma05[i]<ma105[i]*0.985) below:=false below //plotshape(aboveConfirmed(5,ma150),color=color.navy,location=location.abovebar,style=shape.triangleup,size=size.large,title="above",text="above") plot(ma05, color=maColor(ma05, ma150), style=plot.style_line, title="MMA05", linewidth=2) plot(ma08, color=maColor(ma08, ma150), style=plot.style_line, title="MMA08", linewidth=1) plot(ma13, color=maColor(ma13, ma150), style=plot.style_line, title="MMA13", linewidth=1) plot(ma20, color=maColor(ma20, ma150), style=plot.style_line, title="MMA20", linewidth=1) plot(ma30, color=maColor(ma30, ma150), style=plot.style_line, title="MMA30", linewidth=1) plot(ma45, color=maColor(ma45, ma200), style=plot.style_line, title="MMA45", linewidth=1) plot(ma70, color=maColor(ma70, ma200), style=plot.style_line, title="MMA70", linewidth=2) plot(ma105, color=maColor(ma105, ma200), style=plot.style_line, title="MMA105", linewidth=2) plot(ma150, color=maColor(ma150, ma200), style=plot.style_line, title="MMA150", linewidth=3) plot(ma200, color=maColor(ma200, ma200), style=plot.style_line, title="MM200", linewidth=3) closeLong=belowMost(6,1) and belowMost(6,2) and belowMost(6,3) closeShort=aboveMost(6,1) and aboveMost(6,2) and aboveMost(6,3) isAbove=aboveConfirmed(5,ma200) strategy.entry("short", false, when=belowConfirmed(3,ma200) and belowMost(8,1) and belowMost(8,2) and belowMost(8,3)) strategy.entry("long", true, when=aboveConfirmed(3,ma200) and aboveMost(8,1) and aboveMost(8,2) and aboveMost(8,3)) strategy.close("long",when=closeLong) strategy.close("short",when=closeShort)