Stratégie de suivi bidirectionnelle de la rupture de l'élan

Auteur:ChaoZhang est là., Date: 2023-12-18 10h47 et 46 min
Les étiquettes:

img

Résumé

Cette stratégie combine des indicateurs de dynamique et des indicateurs de suivi bidirectionnels pour capturer les signaux de rupture dans des tendances fortes pour le suivi des tendances.

La logique de la stratégie

  1. L'indicateur HiLo Activator calcule le prix du point médian en utilisant le point médian du plus haut et du plus bas. Lorsque les prix dépassent le point médian, un signal d'achat est généré. Lorsque les prix dépassent le point médian, un signal de vente est généré.

  2. L'indice directionnel moyen (ADX) est utilisé pour mesurer la force de la tendance. Plus la valeur ADX est élevée, plus la tendance est forte.

  3. Les indicateurs directionnels DI+ et DI- représentent respectivement la force de la tendance haussière et de la tendance baissière.

  4. Les signaux d'achat sont générés lorsque les prix dépassent le point médian, ADX est supérieur au seuil et DI+ est supérieur au seuil. Les signaux de vente sont générés lorsque les prix dépassent le point médian, ADX est supérieur au seuil et DI- est supérieur au seuil.

Analyse des avantages

Cette stratégie combine les avantages des indicateurs de dynamique et de suivi des tendances pour capturer les ruptures précoces et suivre de près les tendances.

Comparée à l'utilisation d'indicateurs de dynamique seuls, cette stratégie ajoute une évaluation de la force de la tendance pour filtrer les signaux et améliorer la rentabilité.

Dans l'ensemble, la stratégie permet de suivre les tendances en douceur, d'entrer et de sortir en temps opportun et d'éviter de rester coincé dans des consolidations tout en réduisant les pertes liées aux renversements de tendance.

Analyse des risques

Cette stratégie comporte certains risques liés à des renversements temporaires des prix générant des signaux erronés.

Pour réduire les risques, modifiez les paramètres de l'activateur HiLo pour augmenter la portée de rupture. Pour capturer plus d'opportunités, abaissez les seuils ADX et DI aux dépens de la qualité du signal.

Les utilisateurs doivent également noter les différences entre les produits et les environnements de marché.

Directions d'optimisation

Les principaux moyens d'optimiser cette stratégie sont les suivants:

  1. Ajustez la période de l'activateur HiLo et les niveaux de déclenchement pour équilibrer les risques et le timing.

  2. Modifier la période et le seuil ADX pour équilibrer la qualité et la fréquence du signal.

  3. Définir des seuils distincts pour DI+ et DI- pour tenir compte des différences entre les tendances haussières et les tendances baissières.

  4. Ajouter des stratégies de stop loss avec des niveaux de stop loss pour contrôler les pertes d'une seule transaction.

  5. Combiner avec d'autres indicateurs auxiliaires pour améliorer la stabilité globale.

Conclusion

Cette stratégie prend en compte à la fois l'élan et les indicateurs de suivi de tendance pour générer des signaux pendant les fortes tendances. Elle a l'avantage de suivre les tendances en douceur et de près, adaptée à la capture des opportunités de tendance précoces. Elle a également des capacités raisonnables de contrôle des risques pour réduire les pertes dues à de mauvais signaux et à des coups de fouet. Avec le réglage des paramètres et les ajouts de stop loss, elle peut obtenir une performance stable. En tant que stratégie de suivi de tendance polyvalente adaptée à différents produits et marchés, elle mérite une bonne attention et une bonne application des traders quant.


/*backtest
start: 2022-12-11 00:00:00
end: 2023-12-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("HiLo Activator with ADX", shorttitle="HASB_ADX", overlay=true)

// Parameters for the HiLo Activator
length_ha = input(14, title="HiLo Activator Period")
offset_ha = input(0, title="Offset")
trigger_ha = input(1, title="Trigger for Buy/Sell")

// Parameters for ADX
adx_length = input(14, title="ADX Period", minval=1)
adx_threshold = input(25, title="ADX Threshold")
di_threshold = input(50, title="DI Threshold")

// Parameter for choosing the number of candles for backtest
backtest_candles = input(1000, title="Number of Candles for Backtest", minval=1)

// Function to get backtest data
getBacktestData() =>
    var float data = na
    if bar_index >= backtest_candles
        data := security(syminfo.tickerid, "D", close[backtest_candles])
    data

// HiLo Activator calculations
ha = (highest(high, length_ha) + lowest(low, length_ha)) / 2

// ADX calculations
trh = high - high[1]
trl = low[1] - low
tr = max(trh, trl)
atr = sma(tr, adx_length)
plus_dm = high - high[1] > low[1] - low ? max(high - high[1], 0) : 0
minus_dm = low[1] - low > high - high[1] ? max(low[1] - low, 0) : 0
smoothed_plus_dm = sma(plus_dm, adx_length)
smoothed_minus_dm = sma(minus_dm, adx_length)
di_plus = 100 * (smoothed_plus_dm / atr)
di_minus = 100 * (smoothed_minus_dm / atr)
dx = 100 * abs(di_plus - di_minus) / (di_plus + di_minus)
adx = sma(dx, adx_length)

// Buy and Sell signals based on HiLo Activator and ADX
signalLong = crossover(close, ha) and adx > adx_threshold and di_plus > di_threshold
signalShort = crossunder(close, ha) and adx > adx_threshold and di_minus > di_threshold

// Plot HiLo Activator and ADX
plot(ha, color=color.blue, title="HiLo Activator")
plot(offset_ha, color=color.red, style=plot.style_histogram, title="Offset")
plot(adx, color=color.purple, title="ADX")

// Backtest strategy
strategy.entry("Buy", strategy.long, when = signalLong)
strategy.entry("Sell", strategy.short, when = signalShort)
strategy.close("Buy", when = signalShort)
strategy.close("Sell", when = signalLong)

// Accuracy percentage
var accuracy = 0.0
var totalTrades = 0
var winningTrades = 0

if (signalLong or signalShort)
    totalTrades := totalTrades + 1

if (signalLong and (not na(signalLong[1]) and (not signalLong[1])))
    winningTrades := winningTrades + 1

if (signalShort and (not na(signalShort[1]) and (not signalShort[1])))
    winningTrades := winningTrades + 1

accuracy := totalTrades > 0 ? (winningTrades / totalTrades) * 100 : 0

// Plot accuracy percentage on the chart
plot(accuracy, title="Accuracy Percentage", color=color.purple, style=plot.style_histogram)


Plus de