
В основе этой стратегии лежит индикатор, разработанный Эндрю Абрахамом в статье, опубликованной в сентябрьском выпуске журнала “TASC” в журнале “Тренды торговли криптовалютами”. Индикатор использует средний реальный диапазон колебаний и ценовые каналы для определения направления рыночных тенденций и фильтрует торговые сигналы в сочетании с индикатором MACD, который предназначен для захвата средне-длинных тенденций.
Сначала стратегия рассчитывает весомое скользящее среднее 21-дневного диапазона реальных колебаний (ATR) в качестве базового диапазона колебаний. Затем она рассчитывает максимальные и минимальные цены за последние 21 день, сравнивает текущие цены закрытия линии K с верхней и нижней границами базового диапазона колебаний, чтобы определить, прорвала ли цена канал, и, таким образом, определить направление тенденции.
В частности, определение верхнего предела канала является максимальной ценой за последние 21 день минус 3 раза базовый ATR, а нижнего предела канала - минимальной ценой за последние 21 день плюс 3 раза базовый ATR. Когда цена закрытия выше верхнего предела канала, следует рассматривать как тенденцию к повышению; когда цена закрытия ниже нижнего предела канала, следует рассматривать как тенденцию к снижению.
При определении направления тренда стратегия также вводит фильтрацию MACD-индикатора. Сигнал покупки создается только тогда, когда столбик MACD является правильным, чтобы избежать пропущенной точки покупки.
Эта стратегия, в сочетании с определением тенденций и фильтрацией индикаторов, позволяет эффективно определять направление долгосрочных тенденций на рынке и избегать заблуждения по поводу краткосрочных колебаний на рынке. Конкретные преимущества:
В этой стратегии есть определенные риски, которые проявляются в следующих аспектах:
Для этого можно снизить риск путем оптимизации параметров, строгого размещения позиций и своевременного остановки убытков.
Эта стратегия может быть оптимизирована в следующих аспектах:
Можно тестировать комбинации различных параметров Length или Multiplier, чтобы найти оптимальную комбинацию параметров, которая дает наилучшую отдачу на основе данных обратной связи.
Можно проверить фильтрационный сигнал в сочетании с другими показателями, такими как RSI, KDJ и т. Д., чтобы увидеть, можно ли повысить доходность.
Параметры могут быть динамически изменены в зависимости от рыночных условий, например, следует расширять диапазон каналов при наличии явных тенденций, а при колебаниях - соответственно ужесточать его.
Эта стратегия в целом представляет собой относительно надежную стратегию отслеживания тенденций. Она в сочетании с методом определения направления тенденции ценового канала и методом фильтрации сигналов MACD-индекса позволяет эффективно определять долгосрочные тенденции на рынке и получать стабильную прибыль. С помощью оптимизации параметров, управления рисками и соответствующей коррекции эта стратегия может стать важной частью системы количественной торговли.
/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
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/
// © melihtuna
//@version=1
strategy("Trend Trader Strategy with MACD", overlay=true)
// === Trend Trader Strategy ===
Length = input(21),
Multiplier = input(3, minval=1)
MacdControl = input(true, title="Control 'MACD Histogram is positive?' when Buy condition")
avgTR = wma(atr(1), Length)
highestC = highest(Length)
lowestC = lowest(Length)
hiLimit = highestC[1]-(avgTR[1] * Multiplier)
loLimit = lowestC[1]+(avgTR[1] * Multiplier)
ret = iff(close > hiLimit and close > loLimit, hiLimit,
iff(close < loLimit and close < hiLimit, loLimit, nz(ret[1], 0)))
pos = iff(close > ret, 1,
iff(close < ret, -1, nz(pos[1], 0)))
barcolor(pos == -1 ? red: pos == 1 ? green : blue )
plot(ret, color= blue , title="Trend Trader Strategy with MACD")
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, 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 = 2017)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2017)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true
// === MACD ===
[macdLine, signalLine, histLine] = macd(close, 12, 26, 9)
macdCond= MacdControl ? histLine[0] > 0 ? true : false : true
strategy.entry("BUY", strategy.long, when = window() and pos == 1 and macdCond)
strategy.entry("SELL", strategy.short, when = window() and pos == -1)