255 Стратегия реверсионной торговли EMA и MACD

Автор:Чао Чжан, Дата: 2023-09-20 15:08:14
Тэги:

Обзор

Эта стратегия использует 255-периодный индикатор EMA и MACD для выявления возможностей для реверсионной торговли.

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

  1. Для определения направления среднесрочной и долгосрочной тенденции используется 255-периодный EMA.

  2. Верхняя и нижняя полосы устанавливаются на основе EMA, при этом ширина полосы динамически регулируется индикатором ATR.

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

  4. Индикатор MACD использует стандартные параметры (12, 26, 9).

  5. В сочетании с сигналами EMA о перекупе/перепродаже и MACD, обратные позиции принимаются, когда цена далеко от EMA и происходит перелом MACD.

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

  1. 255-периодный EMA достаточно хорошо определяет средне- и долгосрочные тенденции.

  2. Кроссоверы MACD могут с большой чувствительностью отслеживать краткосрочные возможности реверсии.

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

  4. Обратная торговля позволяет начать раннее вхождение до изменения цены, с некоторыми особенностями, основанными на плане.

  5. Динамическая ATR стоп-потеря может эффективно контролировать риски.

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

  1. Сигналы MACD могут иметь ложные переломы, что приводит к ненужным потерям.

  2. В случае сильных тенденций, вероятнее всего, не будет реверсий, поэтому следует избегать слепых реверсий.

  3. Слишком жесткая установка стоп-лосса может привести к преждевременной остановке, в то время как слишком широкая может привести к недостаточному контролю риска.

  4. Неправильная настройка параметров также может повлиять на производительность стратегии, требуя итеративной оптимизации.

  5. Стоимость торговли также может влиять на конечную рентабельность, и ее следует учитывать.

Руководство по оптимизации

  1. Проверьте различные периоды EMA, чтобы найти лучший средне- и долгосрочный индикатор тренда.

  2. Попробуйте комбинировать другие показатели с EMA для выявления перекупленных/перепроданных, например, полосы Боллинджера, KD, RSI.

  3. Оптимизировать параметры MACD для повышения чувствительности или стабильности.

  4. Испытайте другие методы остановки потерь, например, остановку, чтобы зафиксировать прибыль.

  5. Оптимизировать параметры для различных продуктов и временных рамок для надежности.

  6. Включить фильтр силы тренда, чтобы избежать отмены сильных тенденций.

Заключение

Эта стратегия сочетает в себе средне-долгосрочные тенденции EMA и краткосрочные реверсии MACD, торгуя обратным образом в регионах перекупленности/перепроданности. Это основная стратегия реверсии с плюсами и минусами. Дальнейшая настройка параметров и контроль рисков могут превратить ее в эффективную торговую систему. Но любая стратегия требует адаптивных корректировок в зависимости от рыночной среды, а не механических сигналов.


/*backtest
start: 2023-09-12 00:00:00
end: 2023-09-19 00:00:00
period: 15m
basePeriod: 5m
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/
// © bufirolas

//--- From 15 Trading Examples by Trader Alyx ---
// Seems like this strategy works better if we reverse the EMA filter logic.

// "Description: This basic scalping strategy allows you to enter the market based upon sentiment
// provided by the EMA, set at 255 periods. When price is trading below the 255 EMA, you would
// look to enter a LONG BUY positions, and when price is trading above the 255 EMA, you would
// look to enter a SELL SHORT position. The MACD lagging indicator will show you clear signals for
// when to do this. When the MACD lines cross in a bullish manner and price is below the 255
// EMA, buy. When the MACD lines cross in a bearish manner and price is above the 255 EMA,
// sell.
// NOTE: Make sure that price is trading away from the 255EMA before entering a LONG or SHORT
// position. As you can see in the chart below, the clearest signs for trade entry were presented
// when price was trading AWAY from the 255EMA"

//@version=4
// strategy("255 EMA Strategy", overlay=true, pyramiding=1, default_qty_type=strategy.cash, default_qty_value=100, commission_value = 0.04, initial_capital=100)

//Inputs
i_reverse=input(false, title="Trade Reverse")
i_EMAreverse=input(true, title="EMA Reverse Entry")
i_EMAlength=input(defval=255, title="EMA Length")
i_EMAexpander=input(defval=5, title="EMA Expander")
i_MACDmult=input(defval=1, minval=1, title="MACD Mult")

//SL & TP Calculations
i_SL=input(true, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(20, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=0, step=.2, title="SL Expander")*.01
i_TPExpander=input(defval=0, step=.2, title="TP Expander")*.01


//Strategy Variables
EMA=ema(close,i_EMAlength)
[macdLine, signalLine, histLine]=macd(close, 12*i_MACDmult, 26*i_MACDmult, 9*i_MACDmult)
EMAupper=EMA+((atr(100))*i_EMAexpander)
EMAlower=EMA-((atr(100))*i_EMAexpander)

//SL & TP Variables
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)

//Calculations
EMAbuy=i_EMAreverse ? close > EMAupper : close < EMAlower
EMAsell=i_EMAreverse ? close < EMAlower : close > EMAupper
MACDbuy=crossover(macdLine, signalLine)
MACDsell=crossunder(macdLine, signalLine)

//SL & TP Calculations
bought=strategy.position_size != strategy.position_size[1]
lSL=valuewhen(bought, SwingLow, 0)*(1-i_SLExpander)
sSL=valuewhen(bought, SwingHigh, 0)*(1+i_SLExpander)
lTP=strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0))*(1-i_TPExpander))
sTP=strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0) - strategy.position_avg_price)*(1+i_TPExpander*100)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0
SL= islong ? lSL : isshort ? sSL : na
TP= islong ? lTP : isshort ? sTP : na


//Entries
strategy.entry("long", long=not i_reverse?true:false, when=EMAbuy and MACDbuy)
strategy.entry("short", long=not i_reverse?false:true, when=EMAsell and MACDsell)

//Exits
if i_SL
    strategy.exit("longexit", "long", stop=SL, limit=TP)
    strategy.exit("shortexit", "short", stop=SL, limit=TP)

//Plots
plot(EMA, "EMA", color=color.white, linewidth=2)
plot(EMAupper, "EMA Upper Band")
plot(EMAlower, "EMA Lower Band")
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross, title="SL")
plot(i_SL ? TP : na, color=color.green, style=plot.style_cross, title="TP")





Больше