Анализ двойной стратегии EMA

Автор:Чао Чжан, Дата: 2024-02-28 18:07:59
Тэги:

img

Обзор

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

Логика стратегии

Стратегия основана на двух индикаторах EMA, краткосрочной 9-дневной EMA и более длительной 21-дневной EMA.

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

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

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

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

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

Риски

Эта стратегия также сопряжена с некоторыми рисками:

  1. Отставание EMA может увеличить потери при изменении тенденции.
  2. Неправильные параметры EMA увеличивают частоту ложных сигналов.
  3. Стратегия более подходит для рынков с сильным трендом и уязвимыми в периоды с ограниченным диапазоном.

Улучшение

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

  1. Включить другие индикаторы для выявления изменения тренда и снижения потерь, например MACD, KDJ и т.д.
  2. Добавьте логику стоп-лосса. Хорошие стратегии стоп-лосса могут значительно уменьшить максимальную вытяжку.
  3. Оптимизировать параметры EMA, чтобы они лучше соответствовали ценовым характеристикам различных продуктов.
  4. Используйте алгоритмы машинного обучения для автоматизации оптимизации параметров EMA.

Резюме

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


/*backtest
start: 2023-02-21 00:00:00
end: 2024-02-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// This can only draw so many lines. Use bar replay to go back further
strategy("Strategy Lines", shorttitle="Strategy Lines", overlay=true, max_lines_count=500)

//###########################################################################################################################################
// Replace your strategy here
//###########################################################################################################################################

shortEMA = ta.ema(close, input(9, title="Short EMA Length"))
longEMA = ta.ema(close, input(21, title="Long EMA Length"))

// Entry conditions for long and short positions
longCondition = ta.crossover(shortEMA, longEMA)
shortCondition = ta.crossunder(shortEMA, longEMA)

//###########################################################################################################################################
// Strategy Lines
//###########################################################################################################################################

var timeLow = bar_index
var line li = na
var openLPrice = 0.0000
var openSPrice = 0.0000

LongWColor = input.color(color.rgb(0,255,0,0),"Long Win Color", group="Strategy Lines")
LongLColor = input.color(color.rgb(0,0,255,0),"Long Loss Color", group="Strategy Lines")
ShortWColor = input.color(color.rgb(255,255,0,0),"Short Win Color", group="Strategy Lines")
ShortLColor = input.color(color.rgb(255,0,0,0),"Short Loss Color", group="Strategy Lines")
WinFontColor = input.color(color.rgb(0,0,0,0),"Win Font Color", group="Strategy Lines")
LossFontColor = input.color(color.rgb(255,255,255,0),"Loss Font Color", group="Strategy Lines")
LinesShowLabel = input(false,"Show Labels?",group = "Strategy Lines")

// // Start new line when we go long
// if strategy.position_size >0
//     line.delete(li)
//     li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close>openLPrice?LongWColor:LongLColor)

// // Start new line when we go short
// if strategy.position_size <0
//     line.delete(li)
//     li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close<openSPrice?ShortWColor:ShortLColor)

// //Delete Lines if we don't have a position open
// if strategy.position_size ==0
//     li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=color.rgb(0,0,0,100))
//     line.delete(li)

if LinesShowLabel
    // Short Label
    if strategy.position_size>=0 and strategy.position_size[1] <0
        label.new(
             timeLow, na, 
             text=str.tostring((openSPrice-close[1])/(syminfo.mintick*10)), 
             color=close[1]<openSPrice?ShortWColor:ShortLColor, 
             textcolor=close[1]<openSPrice?WinFontColor:LossFontColor,
             size=size.small, 
             style=label.style_label_down, yloc=yloc.abovebar)
    // Long Label
    if strategy.position_size<=0 and strategy.position_size[1] >0
        label.new(
             timeLow, na,
             text=str.tostring((close[1]-openLPrice)/(syminfo.mintick*10)), 
             color=close[1]>openLPrice?LongWColor:LongLColor, 
             textcolor=close[1]>openLPrice?WinFontColor:LossFontColor,
             size=size.small, 
             style=label.style_label_down, yloc=yloc.abovebar)

// Open long position and draw line
if (longCondition)
    //strategy.entry("Long", strategy.long)
    // timeLow := bar_index
    // li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close>openLPrice?LongWColor:LongLColor)
    openLPrice := close

// Open short position and draw line
if (shortCondition)
    //strategy.entry("Short", strategy.short)
    // timeLow := bar_index
    // li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close<openSPrice?ShortWColor:ShortLColor)
    openSPrice := close

//###########################################################################################################################################
// Strategy Execution (Replace this as well)
//###########################################################################################################################################

if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.entry("Short", strategy.short)

Больше