Эта стратегия представляет собой комбинацию динамических скользящих средних, которая работает в нескольких временных рамках. Она использует экспоненциальные скользящие средние (EMAs) различной длины для оценки тренда и сигналов входа/выхода.
Стратегия использует 7 EMA, движущихся с разной скоростью, от самой быстрой до самой медленной: 3-периодическая EMA, 15-периодическая EMA, 19-периодическая EMA, 50-периодическая EMA, 100-периодическая EMA, 150-периодическая EMA и 200-периодическая EMA. Эти 7 EMA расположены в трапециальной формации. Чтобы генерировать длинные и короткие сигналы, цена закрытия должна последовательно пробиваться через эти EMA, чтобы обеспечить сильный пост-обратный тренд.
Кроме того, стратегия также включает в себя перерыв цены на недавние максимумы и закрытие цены на пересечение исторических максимумов для подтверждения длинных сигналов, и использует перерыв недавних низких и близких цен на пересечение исторических минимумов для подтверждения коротких сигналов.
Правила выхода требуют, чтобы цена закрытия последовательно прерывала более быстрые EMA в сторону более медленных EMA, что указывает на обратную тенденцию.
Решения:
Стратегия имеет четкую логику использования 7 EMA различной скорости для определения тенденций и двойных правил выхода для обнаружения перемен. Но нет механизма остановки потери, ведущего к огромному риску потери, и он может выйти преждевременно. Улучшения могут быть сделаны в таких аспектах, как добавление остановки потери, настройка параметров, фильтрация индикаторов, чтобы превратить его в прочную торговую систему.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Crypto MAX Trend", shorttitle="Crypto MAX", overlay = true ) Length = input(3, minval=1) Length2 = input(15, minval=1) Length3 = input(19, minval=1) //Length33 = input(25, minval=1) Length4 = input(50, minval=1) Length44 = input(100, minval=1) Length5 = input(150, minval=1) Length6 = input(171, minval=1) Length66 = input(172, minval=1) xPrice = input(close) xEMA1 = ema(xPrice, Length) xEMA2 = ema(xPrice, Length2) xEMA3 = ema(xPrice, Length3) //xEMA33 = ema(xPrice, Length33) xEMA4 = ema(xPrice, Length4) xEMA44 = ema(xPrice, Length44) xEMA5 = ema(xPrice, Length5) xEMA6 = ema(xPrice, Length6) xEMA66 = ema(xPrice, Length66) // plot(xEMA1, color=color.white) // plot(xEMA2, color=color.red) // plot(xEMA3, color=color.green) // plot(xEMA4, color=color.purple) // plot(xEMA44, color=color.gray) // plot(xEMA5, color=color.maroon) // plot(xEMA6, color=color.blue) // plot(xEMA66, color=color.orange) fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2000, title = "From Year", minval = 1970) //monday and session // To Date Inputs toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2020, title = "To Year", minval = 1970) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true long = close > xEMA1 and xEMA1 > xEMA2 and xEMA2 > xEMA3 and xEMA3 > xEMA4 and xEMA4 > xEMA44 and xEMA44 > xEMA5 and xEMA5> xEMA6 and xEMA6> xEMA66 and close > high[1] and high[1] > high[2] and close > high[3] and close > high[4] and close > high[5] and high[5] > high[6] and time_cond short = close < xEMA1 and xEMA1 < xEMA2 and xEMA2 < xEMA3 and xEMA3 < xEMA4 and xEMA4 < xEMA44 and xEMA44 < xEMA5 and xEMA5< xEMA6 and xEMA6< xEMA66 and close < low[1] and low[1] < low[2] and close < low[3] and close < low[4] and close< low[5] and low[5] < low[6] and time_cond notlong = close < xEMA1 strategy.entry("long",1,when=long) strategy.entry("short",0,when=short) exitlong1 = xEMA1 < xEMA2 and xEMA2 < xEMA3 and xEMA3 < xEMA4 exitlong2 = crossunder(low,xEMA1) and crossunder(low,xEMA2) and crossunder(low,xEMA3) and crossunder(low,xEMA4) exitshort1 = xEMA1 > xEMA2 and xEMA2 > xEMA3 and xEMA3 > xEMA4 exitshort2 = crossover(high,xEMA1) and crossover(high,xEMA2) and crossover(high,xEMA3) and crossover(high,xEMA4) strategy.close("long", when = exitlong1 or exitlong2) strategy.close("short", when= exitshort1 or exitshort2)