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


Дата создания: 2023-10-17 17:02:30 Последнее изменение: 2023-10-17 17:02:30
Копировать: 0 Количество просмотров: 848
1
Подписаться
1617
Подписчики

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

Обзор

Эта стратегия использует склонность к перекрестному пересечению двух различных длинных индикаторных скользящих средних ((EMA) для создания сигнала отслеживания тренда. По умолчанию используются длины EMA 130 и 400, и комбинация этих двух параметров хорошо работает.

Сделайте больше, когда скорая линия на склоне EMA пересекает медленную линию на склоне EMA и цена выше 200 циклов EMA; сделайте пробел, когда скорая линия на склоне EMA пересекает медленную линию на склоне EMA и цена ниже 200 циклов EMA.

Склонение в противоположном направлении при пересечении равновесия.

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

В лучшем случае это будет четырехчасовой промежуток.

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

Наслаждайтесь!

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

В основе этой стратегии лежит сравнение скольжения движущихся средних индексов EMA двух различных длин.

Сначала вычислим EMA длины 130 и 400, затем вычислим соответствующий наклон, затем вычислим соответствующий наклон для EMA длины 3 и получим сглаженную кривую наклонности.

Сигнал покупания появляется при прохождении медленной линии по наклонности EMA над скорейшей линией; сигнал продажи - при прохождении медленной линии по наклонности EMA ниже скорейшей линией.

Для фильтрации колебаний можно использовать 200-циклическую ЭМА в качестве фильтра тренда, только если цена выше этой ЭМА, учитывайте более сигнала, а когда она ниже, учитывайте пустой сигнал.

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

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

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

  1. Использование перекрестного скольжения для создания сигнала эффективного отслеживания тренда

  2. Настройка комбинации параметров цикла EMA для различных рыночных условий

  3. Тренд-фильтр поможет избежать ошибочного восприятия колебаний

  4. Фильтр частоты колебаний фильтрует ложные сигналы

  5. Правила простые, понятные и понятные

  6. Используется в нескольких временных рамках

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

  1. Частые открытия и закрытия при сильных толчках

  2. Неправильные циклические параметры EMA могут пропустить поворот тренда

  3. Сочетание параметров должно быть адаптировано к изменению рыночной среды.

  4. Как и в системе MA, в конце большого тренда может быть обращена вспять потеря

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

  1. Попробуйте различные параметры комбинации циклов EMA, чтобы найти оптимальный параметр

  2. Параметры выбора в зависимости от характеристик различных валют и рыночной среды

  3. Можно рассмотреть возможность включения стратегии по контролю за рисками с учетом убытков

  4. Можно рассматривать динамическую корректировку параметров EMA

  5. Попробуйте различные параметры по значению оттенка колебаний

  6. Тестирование эффективности в разные временные рамки

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

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

Исходный код стратегии
/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// strategy(title="Slopes",initial_capital=1000, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.06, slippage = 2, default_qty_value=30, overlay=false)

//definizione input

start = timestamp(input(2018, "start year"), input(1, "start month"), input(1, "start day"), 00, 00)
end = timestamp(input(2020, "end year"), input(1, "end month"), input(1, "end day"), 00, 00)

average = input (title="Source MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])

len1=input(130,title="Fast MA Length")
len2=input(400,title="Slow MA Length")

smoothingavg = input (title="Smoothing MAs Type", type=input.string, defval="EMA",options=["EMA","SMA"])
smoothingavglen = input (3,title="Smoothing MAs Length")

trendfilter=input(true,title="Trend Filter")
trendfilterperiod=input(200,title="Trend Filter MA Period")
trendfiltertype=input (title="Trend Filter MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])

volatilityfilter=input(false,title="Volatility Filter")
volatilitydelta=input(0.0003,step=0.0001,title="Delta Slopes EMA")

//variabili

m1 = if average == "EMA" 
    ema(close,len1)
else
    sma(close,len1)

m2=if average == "EMA" 
    ema(close,len2)
else
    sma(close,len2)

slp1=(m1-m1[1])/m1
slp2=(m2-m2[1])/m2

e1=if smoothingavg == "EMA" 
    ema(slp1,smoothingavglen)
else
    sma(slp1,smoothingavglen)

e2=if smoothingavg == "EMA" 
    ema(slp2,smoothingavglen)
else
    sma(slp2,smoothingavglen)

plot(e1,color=color.yellow)
plot(e2,color=color.red)
//plot (abs(e1-e2),color=color.white)
//plot (ema(e1-e2,9),color=color.yellow)

//variabili accessorie e condizioni

TrendConditionL=if trendfiltertype =="EMA"
    close>ema(close,trendfilterperiod)
else
    close>sma(close,trendfilterperiod)
    
TrendConditionS=if trendfiltertype =="EMA"
    close<ema(close,trendfilterperiod)
else
    close<sma(close,trendfilterperiod)
    
VolatilityCondition = abs(e1-e2) > volatilitydelta

ConditionEntryL= if trendfilter == true
    if volatilityfilter == true
        e1>e2 and TrendConditionL and VolatilityCondition
    else
        e1>e2 and TrendConditionL
else
    if volatilityfilter == true
        e1>e2 and VolatilityCondition
    else 
        e1>e2

ConditionEntryS= if trendfilter == true
    if volatilityfilter == true
        e1<e2 and TrendConditionS and VolatilityCondition
    else 
        e1<e2 and TrendConditionS
else
    if volatilityfilter == true
        e1<e2 and VolatilityCondition
    else
        e1<e2

ConditionExitL=crossunder(e1,e2)
ConditionExitS=crossover(e1,e2)

if true
    if ConditionExitS
        if strategy.position_size < 0
            strategy.close("SLPShort")

if true
    if ConditionExitL
        if strategy.position_size > 0
            strategy.close("SLPLong")

if true
    if ConditionEntryL
        strategy.entry ("SLPLong",long=true)
        
if true
    if ConditionEntryS 
        strategy.entry("SLPShort",long=false)