Stratégie de suivi de tendance intelligente ADX

Auteur:ChaoZhang est là., Date: 2023-11-28 14h04
Les étiquettes:

img

Résumé

La stratégie ADX Intelligent Trend Tracking utilise l'indice directionnel moyen (ADX) pour juger de la force des tendances et capturer les tendances lorsqu'elles sont faibles et suivre les tendances fortes pour le profit.

Principe de stratégie

Le noyau de cette stratégie est principalement basé sur l'indice directionnel moyen (ADX) pour juger de la force de la tendance actuelle. ADX calcule la valeur moyenne de l'indicateur directionnel des fluctuations de prix sur une certaine période pour représenter la force de la tendance. Lorsque la valeur ADX est inférieure au seuil fixé, nous pensons que le marché se consolide. À ce moment-là, la fourchette est déterminée. Si le prix traverse les rails supérieur et inférieur de la boîte, un signal de trading est généré.

Plus précisément, la stratégie calcule d'abord la valeur ADX de 14 cycles. Lorsqu'elle est inférieure à 18, on considère que la tendance est plus faible. Elle calcule ensuite la plage de la boîte formée par les prix les plus élevés et les plus bas des 20 dernières lignes K. Lorsque le prix franchit cette boîte, des signaux d'achat et de vente sont générés. La distance de stop loss est de 50% de la taille de la boîte et la distance de prise de profit est de 100% de la taille de la boîte.

Cette stratégie combine le jugement de la force de la tendance et les signaux de percée pour capturer les tendances lorsqu'elles sont plus faibles et entrent dans une consolidation, évitant ainsi les transactions fréquentes sur des marchés désordonnés.

Les avantages de la stratégie

  1. La combinaison d'un jugement sur la force de la tendance peut éviter des transactions fréquentes sur des marchés désordonnés.
  2. La percée de la boîte augmente le filtrage pour éviter d'être pris au piège sur les marchés volatils.
  3. Dans les marchés tendance, des objectifs de profit plus élevés peuvent être obtenus.
  4. Paramètres ADX personnalisables, paramètres de boîte, coefficients de stop loss, etc. pour s'adapter à différentes variétés.

Risques liés à la stratégie

  1. Des paramètres ADX incorrects peuvent manquer les tendances ou faire de mauvais jugements.
  2. Des plages de cases trop grandes ou trop petites peuvent affecter les résultats.
  3. Les coefficients d'arrêt des pertes et de prise de bénéfices inappropriés peuvent entraîner un arrêt des pertes insuffisant ou une prise de bénéfices trop précoce.

Les paramètres tels que l'ADX, la plage de boîtes, les coefficients de stop loss peuvent être optimisés pour le rendre plus adapté à différents produits et environnements de marché.

Directions pour l'optimisation de la stratégie

  1. Les paramètres ADX peuvent tester les résultats de différents cycles.
  2. Les paramètres de la boîte peuvent tester différentes longueurs pour déterminer les tailles optimales de gamme.
  3. Optimisez les coefficients stop-loss et profit pour optimiser les ratios risque-rendement.
  4. Testez uniquement les effets d'une négociation unilatérale longue/courte.
  5. Ajouter d'autres indicateurs pour les combinaisons, comme les indicateurs de volume.

Résumé

La stratégie de suivi de tendance intelligente ADX est généralement une stratégie de suivi de tendance relativement stable. Elle combine le jugement de la force de la tendance et les signaux de percée des prix pour éviter les problèmes tels que la poursuite de sommets et la destruction de creux qui sont courants dans les stratégies de suivi de tendance typiques. Grâce à l'optimisation des paramètres et à une gestion stricte de l'argent, la stratégie peut réaliser des profits régulièrement.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Developer: Andrew Palladino. 
//Creator: Rob Booker.
//Date: 9/29/2017
//@version=5
//Date: 08/10/2022
//Updated to V5 from V1, default cash settings added and indicators made more easily visible by:
// @ Powerscooter

strategy("Rob Booker - ADX Breakout", shorttitle="ADX Breakout V5", overlay=true, default_qty_type = strategy.cash, default_qty_value = 100000, initial_capital = 100000)

adxSmoothPeriod = input(14, title="ADX Smoothing Period", group = "ADX Settings")
adxPeriod = input(14, title="ADX Period", group = "ADX Settings")
adxLowerLevel = input(18, title="ADX Lower Level", group = "ADX Settings")
boxLookBack = input(20, title="BreakoutBox Lookback Period", group = "BreakoutBox")
profitTargetMultiple = input(1.0, title="Profit Target Box Width Multiple", group = "Take Profit and Stop Loss")
stopLossMultiple = input(0.5, title="Stop Loss Box Width Multiple", group = "Take Profit and Stop Loss")
enableDirection = input(0, title="Both(0), Long(1), Short(-1)", group = "Trade Direction")


// When the ADX drops below threshold limit, then we consider the pair in consolidation. 
// Set Box around highs and lows of the last 20 candles. with upper and lower boundaries. 
// When price breaks outside of box, a trade is taken. (on close or on touch?)
// Stop is placed, default 50%, of the size of the box. So if box is 200 pips, stop is at 100 pips. 
// Profit target is 100% of the size of the box. Default. User can set a profit target of 0.5, 1 full size, 2 or 3. 


dirmov(len) =>
	up = ta.change(high)
	down = -ta.change(low)
	truerange = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)

adxHigh(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	plus
	
adxLow(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	minus
	
sig = adx(adxSmoothPeriod, adxPeriod)
//sigHigh = adxHigh(dilen, adxlen)
//sigLow = adxLow(dilen, adxlen)

isADXLow = sig < adxLowerLevel

//boxUpperLevel = ta.highest(high, boxLookBack)[1]
//boxLowerLevel = ta.lowest(low, boxLookBack)[1]

var float boxUpperLevelCarry = 0
var float boxLowerLevelCarry = 0

boxUpperLevel = strategy.position_size == 0 ? ta.highest(high, boxLookBack)[1] : boxUpperLevelCarry
boxUpperLevelCarry := boxUpperLevel
boxLowerLevel = strategy.position_size == 0 ? ta.lowest(low, boxLookBack)[1] : boxLowerLevelCarry
boxLowerLevelCarry := boxLowerLevel

boxWidth = boxUpperLevel - boxLowerLevel

profitTarget = strategy.position_size > 0  ? strategy.position_avg_price + profitTargetMultiple*boxWidth : strategy.position_size < 0 ?  strategy.position_avg_price - profitTargetMultiple*boxWidth : na
stopLoss = strategy.position_size > 0 ? strategy.position_avg_price - stopLossMultiple*boxWidth : strategy.position_size < 0 ? strategy.position_avg_price + stopLossMultiple*boxWidth : na

plot(strategy.position_size == 0 ? boxUpperLevel : na, color=color.white, style = plot.style_linebr)
plot(strategy.position_size == 0 ? boxLowerLevel : na, color=color.white, style = plot.style_linebr)


bgcolor(isADXLow ? color.purple : na, transp=72, title = "ADX limit")
plot(stopLoss, color=color.red, linewidth=2, style = plot.style_linebr, title="StopLossLine")
plot(profitTarget, color=color.blue, linewidth=2, style = plot.style_linebr, title="ProfitTargetLine")

isBuyValid = strategy.position_size == 0 and ta.cross(close, boxUpperLevel) and isADXLow

//Long Entry Condition
strategy.exit("close_long", from_entry="open_long", limit = profitTarget, stop = stopLoss)
if isBuyValid and strategy.opentrades == 0 and (enableDirection == -1 or enableDirection == 0)
    strategy.entry("open_long", strategy.long)

isSellValid = strategy.position_size == 0 and ta.cross(close, boxLowerLevel) and isADXLow

//Short Entry condition
strategy.exit(id="close_short", from_entry="open_short", limit = profitTarget, stop = stopLoss)
if isSellValid and strategy.opentrades == 0 and (enableDirection == 1 or enableDirection == 0)
    strategy.entry("open_short", strategy.short)

Plus de