Стратегия системы отмены колебаний EMA

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

img

Обзор

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

Принцип

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

В частности, логика торговли выглядит следующим образом:

  1. Расчет быстрого MA (неопределенный 20-дневный) и медленного MA (неопределенный 50-дневный).

  2. Вычислить скорость изменения ширины полосы Боллинджера (по умолчанию 40 дней, 2 стандартных отклонения).

  3. Продолжительность сделки должна быть длинной, когда быстрая MA превышает медленную MA, а скорость изменения ширины BB превышает по умолчанию порог в 9%.

  4. Пройти короткий путь, когда быстрый MA пересекается ниже медленного MA, а скорость изменения ширины BB превышает по умолчанию порог в 9%.

  5. Вычислите длинные и короткие остановки.

  6. Долгая остановка - это самый высокий - ATR * множитель.

Преимущества

  1. Система MA эффективно отслеживает тенденции.

  2. Изменение ширины BB фильтрует колебания, уменьшая ненужные сделки.

  3. Люстра выходит вовремя, чтобы избежать потерь.

  4. Многочисленные регулируемые параметры для оптимизации.

  5. Ясная логика, легкая для понимания и реализации.

Риски

  1. Магнитное замедление может пропустить быстрые изменения.

  2. Неправильные параметры BB могут фильтровать действительные сигналы.

  3. Чрезмерные выходы из люстры приводят к переоценке.

  4. Недостаточная оптимизация параметров приводит к рискам.

  5. Не в состоянии адаптироваться к экстремальным изменениям рынка от крупных событий.

Оптимизация

  1. Испытывать различные комбинации MA для поиска оптимальных параметров.

  2. Испытывать различные периоды BB для лучшего фильтра волатильности.

  3. Добавить другие показатели для подтверждения въезда.

  4. Ввести динамические остановки для лучшего отслеживания рынков.

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

Резюме

Эта стратегия объединяет систему MA, индикатор BB и выходы люстры, чтобы сформировать относительно стабильную следующую систему тренда. Правильная оптимизация параметров может достичь хороших результатов. Но риски обратного тренда и колебания остаются. Машинное обучение может еще больше повысить надежность. В целом хорошая стратегия для обучения.


/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 00:00:00
period: 1d
basePeriod: 1h
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/
// © juanchez

//@version=4
strategy("CHI", overlay = true, close_entries_rule = "ANY")

n = input(title= "highest high o lowest low period", defval= 22)
f= input(title= "multiplicador", defval= 4)
long = highest(high, n) - atr(n)*f
short= lowest(low, n) + atr(n)*f
plot(long, color= color.red)
plot(short, color= color.green)

//moving averages
period= input(title= "moving averages period", defval= 50)
period2= input(title= "moving averages period2", defval= 20)
type= input(title= "moving averages type", options= ["sma", "ema"], defval= "ema")

//moving average function
mo(p, t) =>
    if t == "sma"
        sma(close[barstate.islast ? 1: 0], p)
    else  if t== "ema"
        ema(close[barstate.islast ? 1: 0], p)

m= mo(period, type)
m2= mo(period2, type)

trend= m2 > m 

plot(m, color = color.maroon, linewidth = 3)
plot(m2, linewidth= 3)


//BOLLINGER BANDS ENTRIES
bb1_period= input(title= "Bollinger bands 1 period", defval=40, minval=1)
bb1_source=input(title="Bollinger band 1 source", defval=close)
bb1_multi=input(title="Bollinger Bands 1 factor", defval=2, minval=1, step=0.1)
show_bb1= input(title="Show Bollinger bands 1", defval=false)
//BOLLINGER BANDS
_bb(src, lenght, multi)=>
    float moving_avg= sma(src[barstate.islast? 1: 0], lenght)
    float deviation= stdev(src[barstate.islast? 1: 0], lenght)
    float lowerband = moving_avg - deviation*multi
    float upperband = moving_avg + deviation*multi
    
    [moving_avg, lowerband, upperband]
    
[bb1, lowerband1, upperband1]= _bb(bb1_source,  bb1_period, bb1_multi)

//FIRST BAND    
plot(show_bb1? bb1 : na, title="BB1 Moving average", linewidth= 3, color= color.fuchsia)
plot(show_bb1? upperband1 : na, title="BB1 Upper Band", linewidth= 3, color= color.green)
plot(show_bb1? lowerband1 : na, title="BB1 Lower Band", linewidth= 3, color= color.red)

//BB's Width threshold 
thresh= input(title= "widen %", defval= 9, minval = 0, step = 1, maxval= 100)

widht= (upperband1 - lowerband1)/bb1
roc= change(widht)/widht[1]*100
cross=crossover(roc, thresh)

// entry
//long
elong= input(true, title= "enable long")
longcondition= m2 > m and cross and elong

//short
eshort= input(true, title= "enable short")
shortcondition= m2 < m and cross and eshort


plotshape(longcondition? true: false , location= location.belowbar, style= shape.labelup, size= size.small, color= color.green, text= "Buy", textcolor= color.white)
plotshape(shortcondition? true: false , location= location.abovebar, style= shape.labeldown, size= size.small, color= color.red, text= "Sell", textcolor= color.white)

out= crossunder(close, long)
outt= crossover(close, short)

strategy.entry("long", strategy.long, when = longcondition)
strategy.close("long", when = out)

strategy.entry("short", strategy.short, when = shortcondition)
strategy.close("short", when = outt)

Больше