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

Автор:Чао Чжан, Дата: 2024-01-23 14:18:26
Тэги:

img

Обзор

Эта стратегия определяет направление тренда на основе перекрестки линий EMA с различными периодами и генерирует долгие и короткие сигналы соответственно. Она в основном использует две скользящие средние - 10-дневную EMA и 20-дневную EMA. Когда 10-дневная EMA пересекает 20-дневную EMA, запускается короткий сигнал. Когда 10-дневная EMA пересекает 20-дневную EMA, запускается длинный сигнал. Эта стратегия относится к среднесрочным торговым стратегиям.

Принципы стратегии

Стратегия использует две линии EMA, включая 10-дневную EMA и 20-дневную EMA. Линии EMA могут эффективно отражать тенденцию цен. Когда краткосрочная линия EMA пересекает длинную линию 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)



Больше