Tendance croisée des moyennes stochastiques et mobiles suivant une stratégie quantitative

Auteur:ChaoZhang est là., Date: 2024-02-05 15h27
Les étiquettes:

img

Résumé

Cette stratégie utilise principalement les croisements de l'indicateur Stoch dans la zone suracheté/survendu comme signaux d'entrée, tout en jugeant la direction de la tendance actuelle avec l'indicateur EMA. Elle ne va long dans une tendance haussière déterminée par l'EMA et court dans une tendance baissière, ce qui est une stratégie typique de tendance suivante.

Principaux

La stratégie est composée de trois parties principales:

  1. EMA pour déterminer la direction de la tendance

    En utilisant une EMA rapide et une EMA lente, lorsque l'EMA rapide est au-dessus de l'EMA lente, elle est déterminée comme une tendance à la hausse.

  2. Stock pour générer des signaux de négociation

    L'indicateur Stoch se compose de lignes %K et %D. Lorsque %K franchit le niveau supérieur à %D dans la zone de surachat, il génère un signal d'achat. Lorsque %K franchit le niveau inférieur à %D dans la zone de survente, il génère un signal de vente. Cette stratégie ne prend les signaux de croisement de Stoch que lorsqu'ils se produisent dans les zones de surachat/survente.

  3. Mécanisme de gestion des risques

    La stratégie définit également les niveaux de stop loss et de take profit. Lors de la tenue d'une position longue, si le prix dépasse le niveau de stop loss, il sortira du commerce. Si le prix dépasse le niveau de take profit, il fermera la position pour le profit. La même logique s'applique aux positions courtes.

En général, il s'agit d'une stratégie de négociation quantitative typique qui utilise une combinaison d'indicateurs pour déterminer l'orientation de la tendance et les signaux de négociation, complétée par des règles strictes de gestion des risques visant à réduire le risque de négociation.

Analyse des avantages

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

  1. L'utilisation de l'EMA pour déterminer les tendances majeures et mineures évite d'être pris au piège d'un marché latéral.

  2. La force de l'indicateur Stoch réside dans sa capacité à refléter avec précision les niveaux de surachat/survente.

  3. La stratégie spécifie clairement les scénarios longs et courts possibles, ce qui filtre davantage les signaux et évite d'ouvrir aveuglément des positions sur un marché complexe.

  4. La gestion stricte des risques aide à contrôler la perte des transactions individuelles, limite le tirage maximal tout en laissant encore une marge de manœuvre rentable.

Analyse des risques

Cette stratégie comporte également certains risques:

  1. Des indicateurs tels que l'EMA et le Stoch sont de nature à retarder, ce qui rend difficile pour cette stratégie de détecter en temps opportun les retours en arrière du marché.

  2. Se fier uniquement à des indicateurs peut facilement établir un biais, manquant ainsi les opportunités de négociation effectivement offertes par le marché.

  3. Le mécanisme de gestion des risques lui-même peut également limiter le potentiel de profit en fixant un stop-loss et un take profit prématurés.

  4. Il existe des risques associés à la sélection des paramètres.

Directions d'optimisation

La stratégie peut être optimisée dans les aspects suivants:

  1. Essayez différents types d'EMA pour la détermination de la tendance, comme WMA, Hull MA, etc. et comparez les résultats.

  2. Combiner d'autres indicateurs pour générer des signaux de négociation, par exemple MACD, KDJ pour créer un système multi-indicateur.

  3. Optimiser les paramètres de stop loss et de profit pour mieux s'adapter à la volatilité du marché.

  4. Testez la variance des performances entre différents produits et périodes pour trouver la combinaison optimale.

  5. Considérez l'introduction de modèles d'apprentissage automatique pour aider à la tendance et le jugement de signal pour rendre la stratégie plus intelligente.

Conclusion

En conclusion, cette stratégie combine des indicateurs couramment utilisés pour former un système de suivi de tendance relativement mature, en tenant compte de la détermination de la tendance, des signaux de trading et de la gestion des risques. Avec une optimisation supplémentaire, je crois que cette stratégie peut obtenir de meilleurs résultats de trading en direct.


/*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)




Plus de