Эта стратегия использует 255-периодный индикатор EMA и MACD для выявления возможностей для реверсионной торговли.
Для определения направления среднесрочной и долгосрочной тенденции используется 255-периодный EMA.
Верхняя и нижняя полосы устанавливаются на основе EMA, при этом ширина полосы динамически регулируется индикатором ATR.
Когда цена выше верхней полосы, она находится в регионе перекупленности. Когда она ниже нижней полосы, она находится в регионе перепроданности. Это ситуации, чтобы предвидеть переломы.
Индикатор MACD использует стандартные параметры (12, 26, 9).
В сочетании с сигналами EMA о перекупе/перепродаже и MACD, обратные позиции принимаются, когда цена далеко от EMA и происходит перелом MACD.
255-периодный EMA достаточно хорошо определяет средне- и долгосрочные тенденции.
Кроссоверы MACD могут с большой чувствительностью отслеживать краткосрочные возможности реверсии.
Полосы EMA помогают определить регионы с перекупленными/перепроданными рынками, чтобы избежать преследования трендов.
Обратная торговля позволяет начать раннее вхождение до изменения цены, с некоторыми особенностями, основанными на плане.
Динамическая ATR стоп-потеря может эффективно контролировать риски.
Сигналы MACD могут иметь ложные переломы, что приводит к ненужным потерям.
В случае сильных тенденций, вероятнее всего, не будет реверсий, поэтому следует избегать слепых реверсий.
Слишком жесткая установка стоп-лосса может привести к преждевременной остановке, в то время как слишком широкая может привести к недостаточному контролю риска.
Неправильная настройка параметров также может повлиять на производительность стратегии, требуя итеративной оптимизации.
Стоимость торговли также может влиять на конечную рентабельность, и ее следует учитывать.
Проверьте различные периоды EMA, чтобы найти лучший средне- и долгосрочный индикатор тренда.
Попробуйте комбинировать другие показатели с EMA для выявления перекупленных/перепроданных, например, полосы Боллинджера, KD, RSI.
Оптимизировать параметры MACD для повышения чувствительности или стабильности.
Испытайте другие методы остановки потерь, например, остановку, чтобы зафиксировать прибыль.
Оптимизировать параметры для различных продуктов и временных рамок для надежности.
Включить фильтр силы тренда, чтобы избежать отмены сильных тенденций.
Эта стратегия сочетает в себе средне-долгосрочные тенденции 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")