Stratégie de suivi des tendances

Auteur:ChaoZhang est là., Date: 2024-03-11 10:53:50 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie combine l'indicateur Aroon et l'histogramme de force absolue (ASH) pour identifier les tendances du marché et les opportunités de trading potentielles.

La logique de la stratégie

La stratégie utilise deux ensembles de paramètres pour l'indicateur Aroon:

  • Les positions longues: les périodes d'arrêt sont de 56 (supérieure) et de 20 (inférieure)
  • Positions courtes: les périodes d'arrêt sont de 17 (supérieure) et 55 (inférieure)

L'ASH est calculé avec une longueur de 9 barres en utilisant le prix de clôture comme source de données.

La stratégie comprend des règles spécifiques d'entrée et de sortie:

  1. Entrée longue: Une position longue est initiée lorsque l'indicateur Aroon franchit le seuil inférieur, signalant une tendance haussière potentielle.
  2. Longue sortie: une position longue est fermée lorsque l'Aroon traverse le seuil inférieur.
  3. Entrée courte: Une position courte est initiée lorsque l'Aroon franchit le seuil supérieur, signalant une tendance à la baisse potentielle.
  4. Sortie courte: Une position courte est fermée lorsque l'Aroon franchit le seuil supérieur.

Analyse des avantages

Le principal avantage de cette stratégie est la synergie de la combinaison des deux indicateurs. Aroon mesure efficacement la direction et la force de la tendance. ASH fournit des informations supplémentaires sur l'élan pour aider à synchroniser les signaux d'entrée et de sortie.

L'utilisation de deux paramètres Aroon permet une flexibilité dans l'adaptation aux conditions changeantes du marché.

Analyse des risques

Les principales limitations proviennent des indicateurs eux-mêmes. Aroon a des difficultés lors des marchés à plage et peut générer de faux signaux.

Des paramètres inappropriés pourraient également avoir une incidence sur les performances.

Directions d'amélioration

Des filtres supplémentaires pourraient être ajoutés, tels que des écarts de prix ou des volumes en hausse, pour éviter de faux signaux dans des conditions instables.

D'autres indicateurs comme le RSI ou le KD pourraient également compléter la stratégie.

Conclusion

La stratégie combine efficacement les forces d'Aroon et d'ASH pour une double confirmation des tendances et des points tournants.


/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © IkkeOmar

//@version=5
strategy("Aroon and ASH strategy - ETHERIUM [IkkeOmar]", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=1, commission_value=0, slippage=2)


// AROON SETTINGS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

// Inputs for longs 

length_upper_long = input.int(56, minval=15)
length_lower_long = input.int(20, minval=5)

// Inputs for shorts
//Aroon Short Side Inputs
length_upper_short = input.int(17, minval=10)
length_lower_short = input.int(55)

// ABSOLUTE STRENGTH HISTOGRAM SETTINGS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
length = input(title='Length', defval=9)
src = input(title='Source', defval=close)




// CALCULATIONS: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Aroon
upper_long = 100 * (ta.highestbars(high, length_upper_long + 1) + length_upper_long) / length_upper_long
lower_long = 100 * (ta.lowestbars(low, length_lower_long + 1) + length_lower_long) / length_lower_long

upper_short = 100 * (ta.highestbars(high, length_upper_short + 1) + length_upper_short) / length_upper_short
lower_short = 100 * (ta.lowestbars(low, length_lower_short + 1) + length_lower_short) / length_lower_short

// Ahrens Moving Average
ahma = 0.0
ahma := nz(ahma[1]) + (src - (nz(ahma[1]) + nz(ahma[length])) / 2) / length



// CONDITIONS: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


// Options that configure the backtest start date
startDate = input(title='Start Date', defval=timestamp('01 Jan 2018 00:00'))


// Option to select trade directions
tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Long')

// Translate input into trading conditions
longOK = tradeDirection == 'Long' or tradeDirection == 'Both'
shortOK = tradeDirection == 'Short' or tradeDirection == 'Both'


// Check if the close time of the current bar falls inside the date range
inDateRange = true

longCondition = ta.crossover(upper_long, lower_long) and inDateRange and lower_long >= 5 and longOK
longCloseCondition = ta.crossunder(upper_long, lower_long) and inDateRange

shortCondition = ta.crossunder(upper_short, lower_short) and inDateRange and shortOK
shortCloseCondition = ta.crossover(upper_short, lower_short) and inDateRange

// Start off with the initial states for the longs and shorts
var in_short_trade = false
var in_long_trade = false

var long_signal = false
var short_signal = false

if longCondition
    long_signal := true
if longCloseCondition
    long_signal := false
    
if shortCondition
    short_signal := true
if shortCloseCondition
    short_signal := false

// While no trades active and short condition is met, OPEN short
if true and in_short_trade == false and in_long_trade == false and shortCondition
    strategy.entry("short", strategy.short, when = shortCondition)
    in_short_trade := true
    in_long_trade := false

// While no trades and long condition is met, OPEN LONG
if true and in_short_trade == false and in_long_trade == false and longCondition
    strategy.entry("long", strategy.long, when = longCondition)
    in_long_trade := true
    in_short_trade := false

    
// WHILE short trade and long condition is met, CLOSE SHORT and OPEN LONG
if true and in_short_trade == true and in_long_trade == false and longCondition
    // strategy.close("short", when = longCondition)
    strategy.entry("long", strategy.long, when = longCondition)
    in_short_trade := false
    in_long_trade := true
    
    
// WHILE long trade and short condition is met, CLOSE LONG and OPEN SHORT
if true and in_short_trade == false and in_long_trade == true and shortCondition
    // strategy.close("long", when = shortCondition)
    strategy.entry("short", strategy.short, when = shortCondition)
    in_short_trade := true
    in_long_trade := false

// WHILE long trade and exit long condition is met, CLOSE LONG
// if short signal is active, OPEN SHORT
if true and in_short_trade == false and in_long_trade == true and longCloseCondition
    if short_signal
        strategy.entry("short", strategy.short, when = short_signal)
        in_long_trade := false
        in_short_trade := true
    else
        strategy.close("long", when = longCloseCondition)
        in_long_trade := false
        in_short_trade := false

// if in short trade only and exit short condition is met, close the short
// if long signal still active, OPEN LONG
if true and in_short_trade == true and in_long_trade == false and shortCloseCondition
    if long_signal
        strategy.entry("long", strategy.long, when = long_signal)
        in_short_trade := false
        in_long_trade := true
    else
        strategy.close("short", when = shortCloseCondition)
        in_short_trade := false
        in_long_trade := false






Plus de