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


Дата создания: 2023-12-18 12:29:19 Последнее изменение: 2023-12-18 12:29:19
Копировать: 1 Количество просмотров: 807
1
Подписаться
1621
Подписчики

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

Обзор

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

Стратегический принцип

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

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

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

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

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

  2. Механизм последовательного прорыва эффективно фильтрует ложные прорывы. При этом требуется большая часть быстрых средних прорывов, чтобы обеспечить изменение тренда.

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

  4. Сочетание трендового отслеживания и перепродажи. Сам по себе движущийся средний имеет функцию отслеживания тренда, а в сочетании с индикатором перепродажи и перепродажи устанавливается точка остановки, риск контролируется.

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

Основные риски этой стратегии:

  1. Риск неудачи в прорыве. Когда происходит ложный прорыв цены, стратегия не может полностью избежать потери.

  2. Риск потери при шокирующем тренде. При длительном колебании рынка стоп-стоп может быть часто достигнут, что приводит к увеличению потерь.

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

Решение проблемы:

  1. Стойки должны быть расслаблены, чтобы дать цене достаточно места для движения. Стойки могут быть сделаны с помощью Ljetrail, чтобы остановить ценовую линию.

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

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

Направление оптимизации

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

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

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

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

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

  5. Оптимизация стратегии стоп-лосса, чтобы стоп-лосса лучше отслеживали цены. Например, traillig stop loss или автоматический стоп-лосс, чтобы стоп-линия была более умной.

Подвести итог

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

Исходный код стратегии
//@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)