Le noyau de cette stratégie est basé sur l'indicateur développé dans l'article
La stratégie calcule d'abord la moyenne mobile pondérée de 21 jours de la plage moyenne vraie (ATR) comme plage de volatilité de base. Puis elle calcule les prix les plus élevés et les plus bas au cours des 21 derniers jours. En comparant le prix de clôture actuel avec les limites supérieures et inférieures de la plage de base, elle juge si le prix sort du canal pour déterminer la direction de la tendance.
Plus précisément, la limite supérieure du canal est définie comme le prix le plus élevé au cours des 21 derniers jours moins 3 fois l'ATR de base, et la limite inférieure du canal est le prix le plus bas au cours des 21 derniers jours plus 3 fois l'ATR de base. Lorsque le prix de clôture est supérieur à la limite supérieure, cela indique une tendance haussière. Lorsque le prix de clôture est inférieur à la limite inférieure, cela indique une tendance baissière.
Tout en déterminant la direction de la tendance, cette stratégie introduit également un indicateur MACD pour le filtrage.
Cette stratégie combine la détermination des tendances et le filtrage des indicateurs, ce qui permet d'identifier efficacement l'orientation des tendances du marché à moyen et long terme sans être induit en erreur par les fluctuations à court terme.
La stratégie comporte également certains risques, principalement en ce qui concerne les aspects suivants:
Ces risques peuvent être réduits par l'optimisation des paramètres, la taille stricte des positions et un stop loss rapide.
La stratégie peut être optimisée dans les principaux aspects suivants:
Testez différentes combinaisons de longueur ou de multiplicateur pour trouver la combinaison de paramètres qui donne le meilleur rendement basé sur le backtest.
Test intégrant RSI, KDJ et autres indicateurs pour filtrer les signaux et améliorer la rentabilité.
Adapter dynamiquement les paramètres en fonction des conditions du marché, par exemple en élargissant de manière appropriée la plage de canaux lorsque la tendance est forte ou en resserrant la plage lorsque le marché est plus limité.
En résumé, il s'agit d'une stratégie globale de suivi de tendance robuste. En combinant la détermination de la tendance du canal de prix et le filtrage MACD, il peut identifier efficacement les tendances à moyen et long terme et générer des rendements stables. Avec l'optimisation des paramètres, la gestion des risques et les ajustements appropriés, cette stratégie peut devenir une partie intégrante d'un système de trading.
/*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)