Эта стратегия генерирует сигналы покупки и продажи на основе золотого креста и смертного креста скользящих средних. В частности, она использует 5-дневную экспоненциальную скользящую среднюю (EMA) и 34-дневную двойную экспоненциальную скользящую среднюю (DEMA). Когда краткосрочная 5-дневная EMA пересекает длинную 34-дневную DEMA, генерируется сигнал покупки. Когда краткосрочная 5-дневная EMA пересекает длинную 34-дневную DEMA, генерируется сигнал продажи.
Эта стратегия сочетает в себе как следующие за трендом, так и скользящие средние перекрестные факторы для стабильной производительности. Кользящие средние как следующий за трендом индикатор могут эффективно идентифицировать рыночные тенденции; Сочетание EMA и DEMA может эффективно сглаживать ценовые данные для генерирования торговых сигналов; Кроссоверы между краткосрочными и долгосрочными скользящими средними могут обеспечить ранние торговые сигналы при значительных изменениях тренда.
Эти риски могут быть уменьшены путем корректировки длины скользящей средней, оптимизации часов торговли и установки разумной стоп-лосс.
Эта стратегия генерирует торговые сигналы с помощью двойных перекресток скользящих средних, в сочетании с методами слежения за трендом и сглаживания данных. Это простая и практичная стратегия слежения за трендом. Благодаря настройке параметров и уточнению логики она может адаптироваться к различным продуктам и временным рамкам, обеспечивать ранние сигналы при основных изменениях тренда и избегать ложных сигналов. Стоит рекомендовать и применять.
/*backtest start: 2023-11-01 00:00:00 end: 2023-11-30 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] args: [["v_input_1",false]] */ //@version=2 strategy(title='[STRATEGY][RS]MicuRobert EMA cross V2', shorttitle='S', overlay=true) USE_TRADESESSION = input(title='Use Trading Session?', type=bool, defval=true) USE_TRAILINGSTOP = input(title='Use Trailing Stop?', type=bool, defval=true) trade_session = input(title='Trade Session:', defval='0400-1500', confirm=false) istradingsession = not USE_TRADESESSION ? false : not na(time('1', trade_session)) bgcolor(istradingsession?gray:na) trade_size = input(title='Trade Size:', type=float, defval=1) tp = input(title='Take profit in pips:', type=float, defval=55.0) * (syminfo.mintick*10) sl = input(title='Stop loss in pips:', type=float, defval=22.0) * (syminfo.mintick*10) ma_length00 = input(title='EMA length:', defval=5) ma_length01 = input(title='DEMA length:', defval=34) price = input(title='Price source:', defval=open) // ||--- NO LAG EMA, Credit LazyBear: ---|| f_LB_zlema(_src, _length)=> _ema1=ema(_src, _length) _ema2=ema(_ema1, _length) _d=_ema1-_ema2 _zlema=_ema1+_d // ||-------------------------------------|| ma00 = f_LB_zlema(price, ma_length00) ma01 = f_LB_zlema(price, ma_length01) plot(title='M0', series=ma00, color=black) plot(title='M1', series=ma01, color=black) isnewbuy = change(strategy.position_size)>0 and change(strategy.opentrades)>0 isnewsel = change(strategy.position_size)<0 and change(strategy.opentrades)>0 buy_entry_price = isnewbuy ? price : buy_entry_price[1] sel_entry_price = isnewsel ? price : sel_entry_price[1] plot(title='BE', series=buy_entry_price, style=circles, color=strategy.position_size <= 0 ? na : aqua) plot(title='SE', series=sel_entry_price, style=circles, color=strategy.position_size >= 0 ? na : aqua) buy_appex = na(buy_appex[1]) ? price : isnewbuy ? high : high >= buy_appex[1] ? high : buy_appex[1] sel_appex = na(sel_appex[1]) ? price : isnewsel ? low : low <= sel_appex[1] ? low : sel_appex[1] plot(title='BA', series=buy_appex, style=circles, color=strategy.position_size <= 0 ? na : teal) plot(title='SA', series=sel_appex, style=circles, color=strategy.position_size >= 0 ? na : teal) buy_ts = buy_appex - sl sel_ts = sel_appex + sl plot(title='Bts', series=buy_ts, style=circles, color=strategy.position_size <= 0 ? na : red) plot(title='Sts', series=sel_ts, style=circles, color=strategy.position_size >= 0 ? na : red) buy_cond1 = crossover(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true) buy_cond0 = crossover(price, ma00) and ma00 > ma01 and (USE_TRADESESSION ? istradingsession : true) buy_entry = buy_cond1 or buy_cond0 buy_close = (not USE_TRAILINGSTOP ? low <= buy_entry_price - sl: low <= buy_ts) or high>=buy_entry_price+tp//high>=last_traded_price + tp or low<=last_traded_price - sl //high >= hh or sel_cond1 = crossunder(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true) sel_cond0 = crossunder(price, ma00) and ma00 < ma01 and (USE_TRADESESSION ? istradingsession : true) sel_entry = sel_cond1 or sel_cond0 sel_close = (not USE_TRAILINGSTOP ? high >= sel_entry_price + sl : high >= sel_ts) or low<=sel_entry_price-tp//low<=last_traded_price - tp or high>=last_traded_price + sl //low <= ll or strategy.entry('buy', long=strategy.long, qty=trade_size, comment='buy', when=buy_entry) strategy.close('buy', when=buy_close) strategy.entry('sell', long=strategy.short, qty=trade_size, comment='sell', when=sel_entry) strategy.close('sell', when=sel_close)