Stratégie de synchronisation à double indicateur de volatilité et de momentum de super tendance


Date de création: 2024-02-04 15:53:48 Dernière modification: 2024-02-04 15:53:48
Copier: 0 Nombre de clics: 598
1
Suivre
1617
Abonnés

Stratégie de synchronisation à double indicateur de volatilité et de momentum de super tendance

Aperçu

Cette stratégie combine les indicateurs hypertrend et la théorie des ondes d’Elliot pour construire un outil de trading technique robuste. Elle utilise une analyse de tendance à plusieurs niveaux pour fournir une perspective plus complète du marché, permettant de capturer les revirements de tendance potentiels et les fluctuations de prix importantes du marché.

Principe de stratégie

L’idée centrale réside dans sa méthode à plusieurs niveaux:

  1. Utilisation de 4 indicateurs hypertrend, chacun utilisant une longueur et un multiplicateur ATR différents, pour juger des tendances à court et à long terme
  2. La fusion des indicateurs permet de trouver des signaux de plus ou moins robustes.
  3. Reportez-vous à la méthode d’identification des modèles des ondes d’Elliot pour identifier des modèles similaires de comportement du marché et confirmer les signaux de transaction

Ainsi, en plus d’utiliser de multiples indicateurs, la reconnaissance des modèles a été ajoutée, rendant la stratégie plus robuste.

Analyse des avantages

  1. Une conception multi-indicateurs pour une prise de conscience globale
  2. La théorie des vagues est une source d’inspiration, la reconnaissance des modèles est une source de stabilité.
  3. Adaptation en temps réel aux évolutions du marché
  4. Paramètres configurables pour différentes variétés et périodes de temps

Analyse des risques

  1. Les paramètres sont tributaires de l’expérience et doivent être ajustés pour déterminer la meilleure combinaison de paramètres
  2. La conception multi-indicateurs est plus compliquée et augmente la charge de calcul
  3. La production de signaux erronés ne peut être évitée complètement

L’optimisation des paramètres permet de déterminer progressivement les paramètres optimaux; l’adoption du cloud computing pour améliorer la performance du calcul; le paramètre stop-loss pour contrôler les risques.

Direction d’optimisation

L’optimisation peut être réalisée dans les domaines suivants:

  1. Ajout d’un module d’ajustement des paramètres d’adaptation pour ajuster dynamiquement les paramètres en fonction des conditions du marché
  2. Ajout de modèles d’apprentissage automatique pour aider à juger de la fiabilité des signaux de transaction
  3. Déterminer les modèles de marché en combinant des facteurs externes tels que les indicateurs d’humeur et les événements de presse
  4. Prise en charge de modèles de paramètres multivariés pour réduire le travail de test

Cela rendra les paramètres de stratégie plus intelligents, les jugements plus précis et les applications plus pratiques.

Résumer

La stratégie intégrée prend en compte les deux dimensions de la tendance et du modèle, garantissant à la fois la solidité des jugements et la flexibilité des stratégies. La mise en place de plusieurs indicateurs et paramètres garantit l’applicabilité à l’ensemble du marché.

Code source de la stratégie
/*backtest
start: 2024-01-27 00:00:00
end: 2024-02-03 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Elliott's Quadratic Momentum - Strategy [presentTrading]",shorttitle = "EQM Strategy [presentTrading]", overlay=true )

// Inputs for selecting trading direction
tradingDirection = input.string("Both", "Select Trading Direction", options=["Long", "Short", "Both"])


// SuperTrend Function
supertrend(src, atrLength, multiplier) =>
    atr = ta.atr(atrLength)
    up = hl2 - (multiplier * atr)
    dn = hl2 + (multiplier * atr)
    trend = 1
    trend := nz(trend[1], 1)
    up := src > nz(up[1], 0) and src[1] > nz(up[1], 0) ?   math.max(up, nz(up[1], 0)) : up
    dn := src < nz(dn[1], 0) and src[1] < nz(dn[1], 0) ? math.min(dn, nz(dn[1], 0)) : dn
    trend := src > nz(dn[1], 0) ?  1 : src < nz(up[1], 0)? -1 : nz(trend[1], 1)
    [up, dn, trend]

// Inputs for SuperTrend settings
atrLength1 = input(7, title="ATR Length for SuperTrend 1")
multiplier1 = input(4.0, title="Multiplier for SuperTrend 1")
atrLength2 = input(14, title="ATR Length for SuperTrend 2")
multiplier2 = input(3.618, title="Multiplier for SuperTrend 2")
atrLength3 = input(21, title="ATR Length for SuperTrend 3")
multiplier3 = input(3.5, title="Multiplier for SuperTrend 3")
atrLength4 = input(28, title="ATR Length for SuperTrend 3")
multiplier4 = input(3.382, title="Multiplier for SuperTrend 3")

// Calculate SuperTrend
[up1, dn1, trend1] = supertrend(close, atrLength1, multiplier1)
[up2, dn2, trend2] = supertrend(close, atrLength2, multiplier2)
[up3, dn3, trend3] = supertrend(close, atrLength3, multiplier3)
[up4, dn4, trend4] = supertrend(close, atrLength4, multiplier4)


// Entry Conditions based on SuperTrend and Elliott Wave-like patterns
longCondition = trend1 == 1 and trend2 == 1 and trend3 == 1 and trend4 == 1
shortCondition = trend1 == -1 and trend2 == -1 and trend3 == -1 and trend4 == - 1

// Strategy Entry logic based on selected trading direction
if tradingDirection == "Long" or tradingDirection == "Both"
    if longCondition
        strategy.entry("Long", strategy.long)
        // [Any additional logic for long entry]

if tradingDirection == "Short" or tradingDirection == "Both"
    if shortCondition
        strategy.entry("Short", strategy.short)
        // [Any additional logic for short entry]


// Exit conditions - Define your own exit strategy
// Example: Exit when any SuperTrend flips
if trend1 != trend1[1] or trend2 != trend2[1] or trend3 != trend3[1] or trend4 != trend4[1] 
    strategy.close_all()

// Function to apply gradient effect
gradientColor(baseColor, length, currentBar) =>
    var color res = color.new(baseColor, 100)
    if currentBar <= length
        res := color.new(baseColor, int(100 * currentBar / length))
    res

// Apply gradient effect
color1 = gradientColor(color.blue, atrLength1, bar_index % atrLength1)
color4 = gradientColor(color.blue, atrLength4, bar_index % atrLength3)


// Plot SuperTrend with gradient for upward trend
plot1Up = plot(trend1 == 1 ? up1 : na, color=color1, linewidth=1, title="SuperTrend 1 Up")
plot4Up = plot(trend4 == 1 ? up4 : na, color=color4, linewidth=1, title="SuperTrend 3 Up")

// Plot SuperTrend with gradient for downward trend
plot1Down = plot(trend1 == -1 ? dn1 : na, color=color1, linewidth=1, title="SuperTrend 1 Down")
plot4Down = plot(trend4 == -1 ? dn4 : na, color=color4, linewidth=1, title="SuperTrend 3 Down")

// Filling the area between the first and third SuperTrend lines for upward trend
fill(plot1Up, plot4Up, color=color.new(color.green, 80), title="SuperTrend Upward Band")

// Filling the area between the first and third SuperTrend lines for downward trend
fill(plot1Down, plot4Down, color=color.new(color.red, 80), title="SuperTrend Downward Band")