Стратегия перемещающейся средней ленты

Автор:Чао Чжан, Дата: 2023-12-18 12:29:19
Тэги:

img

Обзор

Стратегия скользящей средней ленты (англ. Moving Average Ribbon strategy) - это стратегия, основанная на нескольких скользящих средних. Она одновременно отслеживает быстрые и медленные скользящие средние, и генерирует торговые сигналы, когда цены проходят через скользящую среднюю ленту. Стратегия сочетает в себе определение тренда и показатели перекупленности/перепроданности, которые могут эффективно улавливать среднесрочные и долгосрочные тенденции.

Логика стратегии

Стратегия использует 5 быстрых скользящих средних (5-, 8-, 13-, 20- и 30-дневных линий) и 4 медленно скользящих средних (45, 70-, 105 и 150-дневных линий). Быстрые линии образуют внутреннюю скользящую среднюю ленту, а медленные линии образуют внешнюю скользящую среднюю ленту. Сигнал покупки генерируется, когда цены превышают внутреннюю ленту, а сигнал продажи генерируется, когда цены превышают внутреннюю ленту. Чтобы отфильтровать ложные перерывы, необходимо, чтобы цены пробивались через внутреннюю ленту в течение 3 последовательных свечей, и большинство быстрых скользящих средних также пробиваются синхронно, прежде чем генерировать торговые сигналы.

Кроме того, стратегия также рассматривает долгосрочные тенденции. Она рассматривает только генерацию сигналов покупки, когда цены выше 200-дневной скользящей средней. Наоборот, она рассматривает только генерацию сигналов продажи, когда цены опускаются ниже 200-дневной скользящей средней. Определяя долгосрочные тенденции, она предотвращает попадание в ловушку во время консолидации.

Анализ преимуществ

Стратегия имеет следующие преимущества:

  1. Сочетание внутренней и внешней скользящей средней ленты с быстрыми и медленными линиями хорошо работает при определении средне- и долгосрочных тенденций.

  2. Механизм последовательного перерыва может эффективно отфильтровать ложные перерывы.

  3. Использование 200-дневной линии для определения позволяет открывать позиции только тогда, когда тенденции начинают меняться.

  4. Условия перепродажи/перекупки: передвижные средние сами по себе имеют тенденцию, а сочетание показателей перепродажи/перекупки для установки точек остановки обеспечивает хорошее управление рисками.

Анализ рисков

К основным рискам этой стратегии относятся:

  1. Риск неудачного прорыва.

  2. Риск потери во время колебания трендов. Когда рынок колеблется в течение длительных периодов, точки остановки могут часто достигаться, что приводит к большим потерям.

  3. Риск оптимизации параметров. Неправильное настройка параметров скользящей средней также может привести к ошибкам в торговых сигналах, что приводит к большим потерям.

Соответствующие решения:

  1. Соответственно расширить точки остановки потери, чтобы дать ценам достаточно пространства для движения.

  2. Добавить индикаторы оценки тренда, чтобы избежать установления позиций без направления во время консолидации, таких как фильтрация с помощью DMI, MACD и других индикаторов.

  3. Используйте методы обратного тестирования и оптимизации параметров для выбора лучших комбинаций параметров.

Руководство по оптимизации

Стратегия может быть оптимизирована в следующих аспектах:

  1. Оптимизировать скользящие средние параметры для выбора наилучших циклов. Запустить обратные тесты скользящих средних с различными циклами, чтобы найти оптимальную комбинацию параметров.

  2. Добавьте индикаторы оценки тренда для фильтрации, такие как RSI для перекупа / перепродажи, полосы Боллинджера для прорывов канала и т. Д. Избегайте установления позиций слепо, когда тенденции неясны.

  3. Принять адаптивные скользящие средние показатели. оптимизировать динамически скользящие средние параметры в соответствии с изменяющимися условиями рынка и волатильностью, чтобы они лучше соответствовали текущему состоянию рынка.

  4. Сочетать модели машинного обучения для оценки вероятности тренда. Создать модели вероятности для оценки шансов успешного прорыва, помогая системе принятия решений в оценке идеального времени входа.

  5. Оптимизируйте стратегии стоп-лосса для лучшего отслеживания цен, такие как отслеживание стоп-лосса или динамическое размещение позиции стоп-лосса, чтобы сделать линию стоп-лосса более интеллектуальной.

Резюме

Стратегия перемещающейся средней ленты является одной из наиболее распространенных стратегий следования трендам. Она сочетает в себе быстрые и медленные линии для оценки среднесрочных и долгосрочных тенденций и устанавливает последовательные механизмы прорыва для принятия решений о входах.


//@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)



Больше