Stratégie quantitative de suivi de tendance basée sur les indicateurs Stoch et EMA


Date de création: 2024-02-05 15:27:03 Dernière modification: 2024-02-05 15:27:03
Copier: 0 Nombre de clics: 590
1
Suivre
1617
Abonnés

Stratégie quantitative de suivi de tendance basée sur les indicateurs Stoch et EMA

Aperçu

Cette stratégie utilise principalement l’indicateur Stoch qui se produit dans la zone de survente comme signal d’entrée, en combinaison avec l’indicateur EMA pour juger de la direction de la tendance actuelle, effectuer des opérations multiples uniquement dans la tendance à la hausse continue de l’EMA, effectuer des opérations de dépréciation dans la tendance à la baisse continue de l’EMA, appartient à la stratégie de suivi de tendance typique.

Principe de stratégie

La stratégie se compose de trois volets principaux:

  1. Les indicateurs de l’EMA ont déterminé la direction de la tendance

En utilisant rapidement et lentement deux paramètres EMA différents, l’EMA rapide est jugée comme une tendance à la hausse lorsque l’EMA est au-dessus de l’EMA lente et une tendance à la baisse lorsque l’EMA rapide est en dessous de l’EMA lente.

  1. L’indicateur Stoch détermine les signaux d’achat et de vente

L’indicateur Stoch est composé de la ligne %K et de la ligne %D. La ligne %K génère un signal d’achat lorsque l’or se croise avec la ligne %D au-dessus de la zone de surachat, et la ligne %K génère un signal de vente lorsque la ligne %D se croise avec la zone de survente en dessous de la zone de survente.

  1. Le mécanisme de gestion des risques

La stratégie impose à la fois un arrêt de perte et un arrêt de rupture. Lorsqu’un trader détient plusieurs positions, il arrête la rupture si le prix dépasse le seuil de rupture. Il arrête la rupture si le prix dépasse le seuil de rupture.

Dans l’ensemble, cette stratégie est une stratégie de trading quantitative typique, qui utilise une combinaison d’indicateurs pour déterminer la direction de la tendance et les signaux de trading, tout en s’appuyant sur des règles strictes de gestion des risques, ce qui réduit efficacement les risques de trading.

Analyse des avantages

Les principaux avantages de cette stratégie sont les suivants:

  1. L’EMA utilise les tendances des niveaux principaux et inférieurs pour éviter d’être piégé dans un marché qui n’est pas sur la bonne voie.

  2. La particularité de l’indicateur Stoch est qu’il peut très bien refléter si l’on se trouve actuellement dans une zone de surachat ou de survente, de sorte que la production de signaux croisés peut être utilisée pour effectuer des transactions dans une zone de surachat ou de survente.

  3. La stratégie définit les environnements possibles de sur- et de sous-traitance, ce qui permet de filtrer davantage les signaux générés, réduisant la probabilité de faux signaux, tout en évitant les positions aveugles dans des marchés complexes.

  4. Un mécanisme de gestion des risques rigoureux aide à contrôler les pertes d’une seule transaction, à la fois en contrôlant les retraits maximaux dans l’ensemble et en laissant suffisamment de place pour des transactions rentables.

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. Les EMA, les Stoch, etc. ont un certain retard, ce qui rend la stratégie difficile et permet de saisir les opportunités de retournement du marché.

  2. Le simple fait de se fier à des indicateurs peut facilement conduire à des jugements préconçus sur le marché, ce qui peut entraîner la perte d’opportunités de négociation.

  3. Les mécanismes de gestion des risques eux-mêmes peuvent également être des limites à la marge de profit de la stratégie. Les paramètres de suspension des pertes et d’arrêt des positions dans les grandes tendances doivent être particulièrement prudents.

  4. Cette stratégie comporte également des risques en termes de sélection des paramètres, car l’impact des différents paramètres sur les résultats nécessite un grand nombre de retours d’expérience et d’optimisations pour obtenir la meilleure combinaison de paramètres.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Essayez différents types d’EMA, tels que les moyennes mobiles pondérées, les MA de Hull, etc. pour déterminer les tendances et effectuer une analyse comparative.

  2. Essayez de combiner d’autres indicateurs pour générer des signaux de négociation, tels que MACD, KDJ, etc., et construisez un système de négociation multi-indicateurs.

  3. Optimiser les paramètres des arrêts et des arrêts pour les adapter davantage aux fluctuations réelles du marché. Des arrêts plus souples et des arrêts plus stricts peuvent être définis.

  4. Tester la variabilité de la performance de la stratégie selon les variétés et les cycles pour trouver la meilleure combinaison de variétés et de cycles.

  5. Envisagez d’inclure des modèles d’apprentissage automatique ou de réseaux neuronaux pour aider à déterminer la direction des tendances et des signaux de négociation, afin de rendre la stratégie plus intelligente.

Résumer

Dans l’ensemble, la stratégie utilise des indicateurs communs pour créer un ensemble de stratégies de trading de suivi de tendance relativement mature. Elle prend en compte à la fois le jugement de la tendance et la génération de signaux de trading spécifiques, ainsi que le mécanisme de gestion des risques.

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

//@version=2
//by Wugamlo
//Strategy combining Stochastic Crosses in the Overbought/Oversold Area with a trend determined by two EMAs
//Default setup seems to work best on 4HR timeframe for BTC 

strategy(title = "Strategy Stoch/EMA Cross", shorttitle = "Strategy Stoch/EMA Cross", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD, commission_value=0.01,commission_type=strategy.commission.percent, initial_capital=1000)

// === GENERAL INPUTS ===
SectionInd      = input(defval = true ,title = "════════════ INDICATORS ════════════")
maFastLength    = input(defval = 55,   title = "Fast MA Period", minval = 1)
maSlowLength    = input(defval = 89,   title = "Slow MA Period", minval = 1)
StochLength     = input(defval = 14,   title = "Stochastic Length", minval=1)
smoothK         = input(defval = 6,    title = "%K Smooth", minval=1)
smoothD         = input(defval = 3,    title = "%D Smooth", minval=1)
overbought      = 80
oversold        = 20
HighlightOBOS   = input(defval = true, title = "Highlight Stoch Cross?")
HighlightTrend  = input(defval = true, title = "Highlight Trend?")

//DATE AND TIME
SectionFrom     = input(defval = true ,title = "═══════════════ FROM ═══════════════")
fromDay         = input(defval = 01,   title = "From day", minval=1)
fromMonth       = input(defval = 1,    title = "From month", minval=1)
fromYear        = input(defval = 2019, title = "From year", minval=2014)
SectionTo       = input(defval = true, title = "════════════════ TO ════════════════")
toDay           = input(defval = 31,   title = "To day", minval=1)
toMonth         = input(defval = 12,    title = "To month", minval=1)
toYear          = input(defval = 2020, title = "To year", minval=2014)

// === STRATEGY RELATED INPUTS ===
SectionStra     = input(defval = true ,title = "═════════════ STRATEGY ═════════════")

// Include Shorts or only trade Long Positions?
includeShorts   = input(defval = true, title = "Include Short Positions?")


// Risk Management inputs
useTakeProfit   = input(defval = true,  title = "User Take Profit?")
inpTakeProfit   = input(defval = 8,     title = "Take Profit (%)", minval = 0)
useStopLoss     = input(defval = false, title = "User Stop Loss?")
inpStopLoss     = input(defval = 2,     title = "Stop Loss (%)", minval = 0)

StopLossPerc    = inpStopLoss * 0.01
TakeProfitPerc  = inpTakeProfit * 0.01


// === EMA SERIES SETUP ===
maFast = ema(close, maFastLength)
maSlow = ema(close, maSlowLength)
diff   = maFast - maSlow

// === STOCHASTIC SETUP ===
k      = sma(stoch(close, high, low, StochLength), smoothK)
d      = sma(k, smoothD)

// Stochastic Long/Short Entry determination
stochLong  = crossover(k,d)  and (k < oversold)
stochShort = crossunder(k,d) and (k > overbought)

// Stochastic Long/Short Exit determination
stochLongEx  = crossover (k, overbought)
stochShortEx = crossunder(k, oversold)


// === PLOTTING EMAs ===
fast = plot(maFast, title = "Fast MA", color = yellow, linewidth = 1, style = line, transp = 10)
slow = plot(maSlow, title = "Slow MA", color = white,  linewidth = 1, style = line, transp = 10)


// === Vertical Coloring for Crosses in Overbought/Oversold zone and for MA Trend Zones ===
b_color = stochLong ? green : stochShort ? red : na
bgcolor(HighlightOBOS ? b_color : na, title="Overbought / Oversold", transp=65)   //Highlight the Overbought/Oversold Stoch Crossings
t_color = diff>=0 ? green : diff<0 ? red : na
bgcolor(HighlightTrend ? t_color : na, title="Trend up / Trend down", transp=75)  //Highlight the EMA Trend


// === STRATEGY LOGIC ===
// Time Restriction
timeInRange = true


// === STRATEGY - LONG POSITION EXECUTION ===
if stochLong and (diff >=0) and timeInRange    //Open Long when Stoch crossing in Oversold area and EMATrend is up
    strategy.entry(id = "Long", long = true)
if stochLong and (diff <0) and timeInRange     //Close Long when another Long Stoch cross signal is given after Trend has changed to down (avoid fake signals)
    strategy.close(id = "Long")
if stochLongEx and timeInRange                 //Close Long when Stoch is getting Overbought 
    strategy.close(id = "Long")


// === STRATEGY - SHORT POSITION EXECUTION ===
if stochShort and (diff <0) and timeInRange and includeShorts  //Open Short when Stoch crossing in Overbought area and EMA Trend is down
    strategy.entry(id = "Short", long = false)
if stochShort and (diff >=0) and timeInRange                   //Close Short when another Short Stoch cross signal is given after Trend has changed to up (avoid fake signals)
    strategy.close(id = "Short")
if stochShortEx and timeInRange                                //Close Short when Stoch is getting Oversold 
    strategy.close(id = "Short")

        
// === STRATEGY RISK MANAGEMENT EXECUTION ===
//Stop Loss
if useStopLoss    //Exit when Stop Loss is hit
    strategy.exit("Exit Long SL",   from_entry = "Long",  loss = close * StopLossPerc / syminfo.mintick )
    strategy.exit("Exit Short SL",  from_entry = "Short", loss = close * StopLossPerc / syminfo.mintick )

//Take Profit
if useTakeProfit  //Exit when Take Profit Limit is hit
    strategy.exit("Exit Long TP",   from_entry = "Long",  profit = close * TakeProfitPerc / syminfo.mintick)
    strategy.exit("Exit Short TP",  from_entry = "Short", profit = close * TakeProfitPerc / syminfo.mintick)