
Эта стратегия представляет собой динамическую комбинацию сдвигающихся средних линий с несколькими временными периодами. Она использует индикаторные сдвигающиеся средние ((EMA) разной длины для определения тренда и выхода из рынка. В названии стратегии MAX означает использование нескольких EMA, а Динамическая означает, что длина EMA может быть изменена.
Эта стратегия использует 7 различных скоростей ЭМА, от самых быстрых до самых медленных: 3 цикла, 15 циклов, 19 циклов, 50 циклов, 100 циклов, 150 циклов и 200 циклов. Эти 7 ЭМА образуют диапазон, который определяет сигналы для длинных и коротких позиций.
Кроме того, стратегия также сочетает в себе два условия: новое высокое значение цены и историческое превышение цены закрытия для подтверждения сигнала длинной позиции, используя новое низкое значение и историческое превышение цены закрытия для подтверждения сигнала короткой позиции, что позволяет избежать ложного прорыва.
Условия близкого положения требуют, чтобы цена закрытия последовательно пробивалась от быстрого EMA к медленному EMA, что указывает на обратную тенденцию; или минимальная или максимальная цена последней K-линии пробивает 4 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)