
Эта стратегия использует быстрые и медленные движущиеся средние, чтобы построить двойную систему, чтобы судить о тренде в сочетании с трендовым индексом ADX и динамическим индексом DMI для определения направления тренда, чтобы отслеживать тренд после установления тренда, вовремя выходить из тренда, чтобы избежать последующего падения. В сочетании с тестированием временного диапазона можно отслеживать эффективность стратегии в разные периоды времени.
Быстрое и медленное движущиеся средние строят двойную систему. Когда быстрое движущееся среднее пересекает медленное движущееся среднее, он делает больше входа, как золотой форк; когда быстрое движущееся среднее пересекает медленное движущееся среднее, как мертвый форк, выходит из поля.
ADX используется для определения наличия и силы тенденции. Когда ADX больше, чем установленное ключевое значение, считается, что тенденция существует и тенденция сильна. Только когда тенденция сильна, создается торговый сигнал.
DI+ в DMI используется для определения направления тренда. Когда DI+ является положительным, то это означает, что тренд идет вверх; когда DI+ является отрицательным, то это означает, что тренд идет вниз.
В сочетании с тестированием временного диапазона можно отслеживать эффективность стратегии в разные периоды времени, чтобы проверить ее.
Используя двойную систему, можно фильтровать прорывы, чтобы избежать потерь, вызванных ложными прорывами.
Используйте ADX, чтобы оценить наличие и силу тенденции, избегайте частого трейдинга в условиях шока.
Используйте DMI, чтобы определить направление тренда, убедитесь, что он соответствует тренду, и избегайте контрастной торговли.
Тестирование временного диапазона позволяет проверить, работают ли параметры стратегии в разных ситуациях, оптимизировать параметры.
Двухколесные системы подвержены возникновению ловушек с головой или многоголовых ловушек, требующих осторожного регулирования цены на отказ от остановки.
ADX считает, что существует отставание, возможно, упущенная возможность в начале тренда, может снизить ключевые значения.
DMI также имеет задержку в определении направления, что также может быть пропущено в начале тренда, что может привести к сокращению параметров цикла.
Параметры в разных временных интервалах могут нуждаться в корректировке и оптимизации.
Можно тестировать комбинации параметров различных длин циклов, чтобы найти оптимальные.
Можно использовать двойную фильтрацию в сочетании с другими показателями, такими как линия буринга, чтобы улучшить качество сигнала.
Можно добавить стратегию “стоп-лосс”, чтобы избежать увеличения убытков.
Параметры могут быть автоматически оптимизированы с помощью методов машинного обучения.
Повышение эффективности стратегии может быть достигнуто с помощью дополнительных факторов, таких как эмоциональные показатели, новостная лента.
Эта стратегия объединяет преимущества движущихся средних, трендовых индексов и динамических индексов, позволяя определять и отслеживать тенденции. В то же время, проверяя эффективность своих параметров, ее необходимо постоянно оптимизировать для адаптации к более широкому кругу рыночных условий, а также для дальнейшего углубления регулирования параметров, стратегии остановки убытков и многофакторного синтеза, что повышает стабильность и прибыльность стратегии. В целом, эта стратегия предоставляет надежный способ отслеживания тенденций для количественной торговли.
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// author: codachang0726
strategy(title = "(S)MA+ADX+DI+time", shorttitle = "(S)MA+ADX+DI+time", overlay = true)
// === INPUT MA LENGTHS ===
fastMA = input(defval = 7, title = "FastMA", minval = 1, step = 1)
slowMA = input(defval = 14, title = "SlowMA", minval = 1, step = 1)
// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
thruMonth = input(defval = 1, title = "Thru Month", minval = 1, maxval = 12)
thruDay = input(defval = 1, title = "Thru Day", minval = 1, maxval = 31)
thruYear = input(defval = 2022, title = "Thru Year", minval = 1970)
// === INPUT SHOW PLOT ===
showDate = input(defval = true, title = "Show Date Range", type = input.bool)
// === FUNCTION EXAMPLE ===
start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"
// === MA LOGIC ===
crossOv = sma(close, fastMA) > sma(close, slowMA) // true when fastMA over slowMA
crossUn = sma(close, fastMA) < sma(close, slowMA) // true when fastMA under slowMA
// DI+ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Period")
keyLevel = input(20, title="Keylevel for ADX")
[diplus, diminus, adx] = dmi(dilen, adxlen)
di = (diplus - diminus)
buy = di > 0 and crossOv and adx > keyLevel
sell = di < 0 and crossUn and adx > keyLevel
buy_time = buy and not buy[1]
sell_time = sell and not sell[1]
// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy_time) // enter long when "within window of time" AND crossover
strategy.close("L", when = window() and sell_time) // exit long when "within window of time" AND crossunder
// === PLOTTING ===
bgcolor(color = showDate and window() ? color.gray : na, transp = 90) // plot "within window of time"
plot(sma(close, fastMA), title = 'FastMA', color = color.yellow, linewidth = 2, style = plot.style_line) // plot FastMA
plot(sma(close, slowMA), title = 'SlowMA', color = color.aqua, linewidth = 2, style = plot.style_line) // plot SlowMA