Стратегия пересечения скользящих средних Momentum


Дата создания: 2024-01-23 14:18:26 Последнее изменение: 2024-01-23 14:18:26
Копировать: 1 Количество просмотров: 537
1
Подписаться
1617
Подписчики

Стратегия пересечения скользящих средних Momentum

Обзор

Эта стратегия основана на перекрестке средних линий EMA в разных периодах, чтобы определить направление тренда и создать на основе этого сигнал для многократного короткого курса. В основном используются 2 средних линии, 10-я линия и 20-я линия.

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

Эта стратегия использует 2 средних линии EMA, включая 10-дневную и 20-дневную линии. Средняя линия EMA хорошо отражает направление тренда цены. Когда краткосрочная линия EMA сверху пересекает длинную линию EMA, это означает, что цена движется вверх и вниз.

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

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

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

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

  1. Используя среднюю линию EMA для определения направления тренда, можно эффективно отслеживать движение рынка
  2. Средняя линия EMA в сочетании с различными циклами позволяет уловить торговые возможности на короткой и средней линиях
  3. По крайней мере, это позволяет отфильтровывать часть шума, чтобы избежать упущенных возможностей.
  4. Логика стратегии проста, понятна, легко понятна и изменяется
  5. Параметры могут быть скорректированы в зависимости от разных сортов и торговых предпочтений

Анализ стратегических рисков

Однако эта стратегия также несет в себе некоторые риски:

  1. EMA-средняя линия сама по себе будет задерживаться и может пропустить кратковременный ценовой поворот
  2. Недостаточная фильтрация сигналов шума, возможна некоторая ошибочная транзакция
  3. Необходимость корректировки параметров в соответствии с различными рыночными условиями

Риски можно снизить следующими способами:

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

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

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

  1. Добавление портфеля других технических индикаторов для повышения точности торговых сигналов. Например, MACD, KD и т. Д.
  2. Оптимизация параметров средней линии EMA, чтобы лучше адаптировать ее к конкретным видам.
  3. Оптимизация параметров наименьших и наибольших значений, улучшение оценки колебаний цен.
  4. Добавление стратегии “стоп-лосс” для контроля максимальных потерь в одной сделке.
  5. Попробуйте использовать эту стратегию для различных сортов, чтобы оценить их пригодность.

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

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

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

//@version=2
strategy("PierceMAStrat", overlay=true)

lenMA0 = input(title="Length 0",defval=2)
lenMA1=input(title="Length 1",defval=10)
lenMA2=input(title="Length 2", defval=20)
lenMA3 = input(title = "Length3", defval =50)




emaLen0 = ema(close, lenMA0)
emaLen1 = ema(close, lenMA1)
emaLen2 = ema(close, lenMA2)
emaLen3 = ema(close, lenMA3)

    
ascent = if emaLen1[1] < emaLen1[0]
    true
else
    false
    
descent = if emaLen1[1] > emaLen1[0]
    true
else
    false
    
TimeSinceAscensionStart = if ascent == true
    barssince(descent == true)
else
    0
    

StartUp = if TimeSinceAscensionStart < 1
    true
else
    false

StartDown = if TimeSinceAscensionStart < 1
    false
else
    true


AscentBarCounter = barssince(StartUp == true)

DescentBarCounter = barssince(StartDown == true)

MaxAscent = if AscentBarCounter[1] > AscentBarCounter[0] and AscentBarCounter[1] > 10
    true
else
    false
    
MaxDescent = if DescentBarCounter[1] > DescentBarCounter[0] and DescentBarCounter[1] > 5
    true
else
    false
    
longCond = if crossover(emaLen1, emaLen2) and barssince(MaxDescent == true) > 3
    true
else
    false
shortCond = if crossunder(emaLen1, emaLen2) and barssince(MaxAscent == true) > 3
    true
else
    false


//longCond = (crossover(emaLen1, emaLen2) and (emaLen2 > emaLen3))
//shortCond = crossunder(emaLen1, emaLen2) and (emaLen2 < emaLen3)



if longCond == true
    strategy.entry("LONG", strategy.long)

if shortCond == true
    strategy.entry("SHORT", strategy.short)
    


plotshape(series=MaxAscent, title="MaximaReached", style=shape.triangledown, location=location.abovebar, color=green, text="MaximaReached", size=size.small)
plotshape(series=MaxDescent, title="MinimaReached", style=shape.triangleup, location=location.belowbar, color=red, text="MinimaReached", size=size.small)
//plotshape(series=StartUp, title="StartUp", style=shape.triangleup, location=location.belowbar, color=red, text="StartUp", size=size.tiny)
//plotshape(series=StartDown, title="StartDown", style=shape.triangleup, location=location.belowbar, color=green, text="StartDown", size=size.tiny)

//plotshape(series=(crossover(emaLen1, emaLen3)), title="GBXOVER", style=shape.triangleup, location=location.belowbar, color=green, text="GBXO", size=size.small)
//plotshape(series=(crossover(emaLen2, emaLen3)), title="RBXOVER", style=shape.triangledown, location=location.abovebar, color=orange, text="RBXO", size=size.small)
//plotshape(series=(crossover(emaLen1, emaLen2)), title="GRXOVER", style=shape.triangledown, location=location.abovebar, color=teal, text="GRXO", size=size.small)
//plotshape(series=(crossunder(emaLen1, emaLen2)), title="GRXUNDER", style=shape.triangledown, location=location.abovebar, color=purple, text="GRXU", size=size.small)
//plotshape(series=(crossunder(emaLen1, emaLen3)), title="GBXOVER", style=shape.triangleup, location=location.belowbar, color=yellow, text="GBXU", size=size.small)
//plotshape(series=(crossunder(emaLen2, emaLen3)), title="RBXOVER", style=shape.triangledown, location=location.abovebar, color=yellow, text="RBXU", size=size.small)
    
//plotshape(convergence, color=lime, style=shape.arrowup, text="CROSS")
plot(emaLen1, color=green, transp=0, linewidth=2)
plot(emaLen2, color=red, transp=30, linewidth=2)
plot(emaLen3, color=blue, transp=30, linewidth=2)