Ядро этой стратегии основано на индикаторе, разработанном в статье
Стратегия сначала рассчитывает 21-дневную взвешенную скользящую среднюю среднюю среднего истинного диапазона (ATR) в качестве базового диапазона волатильности. Затем она рассчитывает самые высокие и самые низкие цены за последние 21 день. Сравнивая текущую цену закрытия с верхними и нижними границами базового диапазона, она оценивает, выходит ли цена из канала, чтобы определить направление тренда.
В частности, верхний лимит канала определяется как самая высокая цена за последние 21 день минус 3 раза базовый ATR, а нижний лимит канала - самая низкая цена за последние 21 день плюс 3 раза базовый ATR. Когда цена закрытия выше верхнего лимита, это сигнализирует о бычьей тенденции. Когда цена закрытия ниже нижнего лимита, это сигнализирует о медвежьей тенденции.
При определении направления тренда эта стратегия также вводит индикатор MACD для фильтрации. Он генерирует сигналы покупки только тогда, когда гистограмма MACD положительная, чтобы избежать упущенных возможностей покупки.
Эта стратегия сочетает в себе определение тренда и фильтрацию индикаторов, которые могут эффективно определить направление тенденции рынка в среднесрочной и долгосрочной перспективе, не будучи вводимыми в заблуждение краткосрочными колебаниями.
Стратегия также сопряжена с определенными рисками, главным образом в следующих аспектах:
Эти риски могут быть уменьшены путем оптимизации параметров, строгого размещения позиций и своевременного прекращения потерь.
Стратегия может быть оптимизирована в следующих основных аспектах:
Испытайте различные комбинации длины или множителя, чтобы найти комбинацию параметров, которая дает наибольшую отдачу на основе обратного теста.
Испытание, включающее 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)