La stratégie de suivi de l'élan et de la tendance

Auteur:ChaoZhang est là., Date: 2024-02-22 17:27:18
Les étiquettes:

img

Résumé

L'idée de base de cette stratégie est de combiner l'indicateur Super Trend et l'indice de mouvement directionnel moyen (ADX) pour juger et suivre les tendances. L'indicateur Super Trend est utilisé pour identifier la direction actuelle de la tendance des prix et l'ADX est utilisé pour déterminer la force de la tendance. Les transactions ne sont effectuées que dans des conditions de tendance forte.

Dans l'ensemble, cette stratégie appartient à la stratégie de suivi des tendances, qui vise à capturer des tendances claires à moyen et à long terme tout en évitant les interférences des périodes de consolidation et d'oscillation.

Principes de stratégie

  1. Utilisez l'indicateur Super Trend pour déterminer la direction de la tendance des prix. Lorsque le prix se trouve au-dessus de la Super Trend, c'est un signal long, et lorsqu'il se trouve en dessous de la Super Trend, c'est un signal court.

  2. Utilisez l'ADX pour juger de la force de la tendance. Les signaux de trading ne sont générés que lorsque l'ADX est supérieur au seuil, de sorte que les périodes avec une consolidation peu claire puissent être filtrées.

  3. La couleur du corps du chandelier est utilisée pour juger s'il est actuellement dans une tendance haussière ou descendante, combinée à l'indicateur Super Trend pour former une confirmation.

  4. L'augmentation du volume des transactions sert de signal de confirmation et les positions ne sont établies que lorsque le volume des transactions augmente.

  5. Mettez un stop loss et un profit pour bloquer les profits et contrôler les risques.

  6. Fermez toutes les positions avant la fin de la journée.

Les avantages de la stratégie

  1. Suivre les tendances claires à moyen et long terme, éviter les oscillations et obtenir une rentabilité élevée.

  2. La stratégie comporte peu de paramètres et est facile à comprendre et à mettre en œuvre.

  3. Les risques sont bien contrôlés avec le stop loss et le profit.

  4. L'utilisation de plusieurs indicateurs de confirmation peut réduire les faux signaux.

Risques liés à la stratégie

  1. Peut subir des pertes importantes lors de corrections majeures à l'échelle du marché.

  2. Les stocks individuels peuvent connaître des retours brusques en raison de changements dans les fondamentaux.

  3. Les événements du cygne noir sont liés à des changements majeurs de politique.

Les solutions:

  1. Ajuster les paramètres ADX de manière appropriée pour garantir que les transactions ne se déroulent que dans des conditions de forte tendance.

  2. Augmenter le pourcentage de stop loss pour contrôler le montant de la perte unique.

  3. Surveillez de près les politiques et les événements importants, coupez activement les pertes si nécessaire.

Conseils pour optimiser

  1. Testez différentes combinaisons de paramètres de Super Trend pour trouver celui qui génère les signaux les plus stables.

  2. Testez différentes combinaisons de paramètres ADX pour déterminer les réglages optimaux.

  3. Ajoutez d'autres indicateurs de confirmation comme la volatilité et les bandes de Bollinger pour réduire davantage les faux signaux.

  4. Combinez avec des stratégies de rupture pour réduire les pertes en temps opportun lorsque les tendances se détériorent.

Résumé

La logique générale de cette stratégie est claire, en utilisant la Super Trend pour juger de la direction de la tendance des prix, l'ADX pour déterminer la force de la tendance et le trading le long des tendances fortes.


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

//Intraday Strategy Template

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © vikris

//@version=4
strategy("[VJ]Hulk Smash Intra", overlay=true, calc_on_every_tick = false, pyramiding=0,default_qty_type=strategy.percent_of_equity, default_qty_value=100,initial_capital=2000)

// ********** Strategy inputs - Start **********

// Used for intraday handling
// Session value should be from market start to the time you want to square-off 
// your intraday strategy
// Important: The end time should be at least 2 minutes before the intraday
// square-off time set by your broker
var i_marketSession = input(title="Market session", type=input.session, 
     defval="0915-1455", confirm=true)

// Make inputs that set the take profit % (optional)
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=1) * 0.01

shortProfitPerc = input(title="Short Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
     
// Set stop loss level with input options (optional)
longLossPerc = input(title="Long Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01

shortLossPerc = input(title="Short Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01    
     
var float i_multiplier = input(title = "ST Multiplier", type = input.float, 
     defval = 2, step = 0.1, confirm=true)

var int i_atrPeriod = input(title = "ST ATR Period", type = input.integer, 
     defval = 10, confirm=true)     
     
len = input(title="ADX Length", type=input.integer, defval=14)
th = input(title="ADX Threshold", type=input.integer, defval=20)
adxval = input(title="ADX Momemtum Value", type=input.integer, defval=25)     



// ********** Strategy inputs - End **********


// ********** Supporting functions - Start **********

// A function to check whether the bar or period is in intraday session
barInSession(sess) => time(timeframe.period, sess) != 0

// ********** Supporting functions - End **********


// ********** Strategy - Start **********

[superTrend, dir] = supertrend(i_multiplier, i_atrPeriod)

colResistance = dir == 1 and dir == dir[1] ? color.new(color.red, 0) : color.new(color.red, 100)
colSupport = dir == -1 and dir == dir[1] ? color.new(color.green, 0) : color.new(color.green, 100)


// Super Trend Long/short condition
stlong = close > superTrend
stshort = close < superTrend



// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)

//Vol Confirmation
vol = volume > volume[1]


//Candles colors
greenCandle = (close > open)
redCandle = (close < open)

// See if intraday session is active
bool intradaySession = barInSession(i_marketSession)

// Trade only if intraday session is active




TrueRange = max(max(high - low, abs(high - nz(close[1]))), abs(low - nz(close[1])))
DirectionalMovementPlus = high - nz(high[1]) > nz(low[1]) - low ? max(high - nz(high[1]), 0) : 0
DirectionalMovementMinus = nz(low[1]) - low > high - nz(high[1]) ? max(nz(low[1]) - low, 0) : 0


SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - nz(SmoothedTrueRange[1]) / len + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - 
   nz(SmoothedDirectionalMovementPlus[1]) / len + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - 
   nz(SmoothedDirectionalMovementMinus[1]) / len + DirectionalMovementMinus

DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus - DIMinus) / (DIPlus + DIMinus) * 100
ADX = sma(DX, len)

// a = plot(DIPlus, color=color.green, title="DI+", transp=100)
// b = plot(DIMinus, color=color.red, title="DI-", transp=100)

//Final Long/Short Condition
longCondition = stlong and redCandle and vol and ADX>adxval
shortCondition = stshort and greenCandle and vol and ADX >adxval



//Long Strategy - buy condition and exits with Take profit and SL
if (longCondition and intradaySession)
    stop_level = longStopPrice
    profit_level = longExitPrice
    strategy.entry("My Long Entry Id", strategy.long)
    strategy.exit("TP/SL", "My Long Entry Id",stop=stop_level, limit=profit_level)
    


//Short Strategy - sell condition and exits with Take profit and SL
if (shortCondition and intradaySession)
    stop_level = shortStopPrice
    profit_level = shortExitPrice
    strategy.entry("My Short Entry Id", strategy.short)
    strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level)
    
 
 
// Square-off position (when session is over and position is open)
squareOff = (not intradaySession) and (strategy.position_size != 0)
strategy.close_all(when = squareOff, comment = "Square-off")

// ********** Strategy - End **********

Plus de