Stratégie de moyenne à mobilité lente

Auteur:ChaoZhang est là., Date: 2023-12-07 15h21h45
Les étiquettes:

img

Résumé

Cette stratégie utilise un canal de Donchian de 24 périodes combiné avec une moyenne mobile de 200 périodes comme principaux signaux de négociation.

La logique de la stratégie

La logique stratégique repose principalement sur les points suivants:

  1. Un canal de Donchian est construit en utilisant le plus haut haut et le plus bas bas au cours des 24 dernières périodes.

  2. La moyenne mobile à 200 périodes agit comme un filtre pour le biais long/court. Si le prix brise le canal de Donchian et se trouve de l'autre côté de la moyenne mobile, un renversement peut être probable.

  3. Les signaux d'entrée sont:

  • Courte: la clôture de la barre précédente est au-dessus de la bande supérieure de la Manche de Donchian et en dessous de la MA de 200 périodes.
  • Longue: la clôture de la barre précédente est en dessous de la bande inférieure de la Manche de Donchian et au-dessus de la MA de 200 périodes.
  1. Le stop loss pour les positions courtes est réglé sur le plus haut niveau au cours des 3 dernières barres. Le take profit est réglé sur le prix d'entrée moins 3 fois la différence entre le stop loss et le prix d'entrée.

  2. L'avantage de cette stratégie est qu'en combinant le canal de Donchian et le filtre de moyenne mobile, elle évite que les faux signaux ne reposent sur un seul indicateur, ce qui améliore considérablement le taux de victoire.

Analyse des avantages

La stratégie présente les avantages suivants:

  1. Taux de gain élevé: En combinant le canal de Donchian et le filtre de moyenne mobile, des pertes inutiles dues à de faux signaux d'un seul indicateur sont évitées.

  2. Risque maîtrisable: l'utilisation du niveau le plus élevé/le plus bas récent comme niveau de stop-loss permet de gérer efficacement la baisse des transactions perdantes.

  3. Simple et facile à mettre en œuvre: la logique utilise des indicateurs simples et intuitifs faciles à comprendre et à exécuter.

  4. Robustesse sur tous les marchés et toutes les périodes: la stratégie est stable sur tous les produits et toutes les périodes car elle comporte relativement peu de paramètres.

Analyse des risques

Les principaux risques auxquels cette stratégie est confrontée sont les suivants:

  1. Les mouvements extrêmes du marché: Des tendances très fortes à sens unique peuvent déclencher des arrêts de pertes entraînant des pertes amplifiées.

  2. Risque de signaux de sortie prématurés: la sortie sur de nouveaux signaux opposés peut entraîner un sur-échange sur des marchés agités en raison d'une entrée et d'une sortie répétées.

  3. Risque d'optimisation des paramètres: un mauvais réglage des paramètres de la période de rétrospective du canal de Donchian ou de la moyenne mobile peut entraîner des signaux retardés ou fréquents. Cela peut être minimisé par une optimisation rigoureuse et des tests combinatoires.

Des possibilités d'amélioration

La stratégie peut être améliorée de la manière suivante:

  1. Optimiser le canal de Donchian et les périodes de rétrospective des moyennes mobiles pour trouver la meilleure combinaison de paramètres.

  2. Testez différents stop loss pour prendre des ratios de profit afin d'équilibrer le taux de gain par rapport à la récompense/risque.

  3. Incorporer des filtres supplémentaires sur les signaux d'entrée en utilisant des indicateurs tels que MACD, RSI, etc. pour améliorer la robustesse.

  4. Optimiser la logique de sortie pour éviter les sorties inutiles dans les marchés agités.

  5. Développer de nouvelles combinaisons en utilisant ce cadre stratégique, par exemple avec d'autres canaux, indicateurs de bande, etc.

Conclusion

La stratégie Slow Moving Average a une logique claire et facile à comprendre en utilisant une combinaison de canal de Donchian et de moyenne mobile pour la génération de signaux. Cette approche hybride améliore considérablement la stabilité et le taux de gain.


/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

//@version=4

strategy("Lagged Donchian Channel + EMA", overlay = true)

//tradePeriod = time(timeframe.period,"0000-0000:1234567")?true:false


// ------------------------------------------ //
// ----------------- Inputs ----------------- //
// ------------------------------------------ //

period = input(24, title="Channel's periods")
Pema = input(200, title="EMA's periods ?")
ratio = input(3, title="Ratio TP", type=input.float)
loss = input(20, title="Risk Loss ($)")
lev = input(5, title="Leverage *...")
chan = input(title="Plot channel ?", type=input.bool, defval=false)
Bpos = input(title="Plot Bull positions ?", type=input.bool, defval=false)
bpos = input(title="Plot Bear positions ?", type=input.bool, defval=false)
labels = input(title="Plot labels of bets ?", type=input.bool, defval=true)
supp = input(title="Delete last labels ?", type=input.bool, defval=true)


// ------------------------------------------ //
// ---------- Canal, EMA and arrow ---------- //
// ------------------------------------------ //

pema = ema(close,Pema)
plot(pema, title="EMA", color=color.blue)

canalhaut = highest(period)[1]
canalbas = lowest(period)[1]

bear = close[1] > canalhaut[1] and close < open and high > pema
bull = close[1] < canalbas[1] and open < close and low < pema

canalhautplot = plot(chan? canalhaut:na, color=color.yellow)
canalbasplot = plot(chan? canalbas:na, color=color.yellow)

plotshape(bear, title='Bear', style=shape.triangledown, location=location.abovebar, color=color.red, offset=0)
plotshape(bull, title='Bull', style=shape.triangleup, location=location.belowbar, color=color.green, offset=0)


// ------------------------------------------ //
// ------------- Position Short ------------- //
// ------------------------------------------ //

SlShort = highest(3)
BidShort = close[1]

TpShort = BidShort-((SlShort-BidShort)*ratio)
deltaShort = (SlShort-BidShort)/BidShort
betShort = round(loss/(lev*deltaShort)*100)/100
cryptShort = round(betShort*lev/BidShort*1000)/1000

// if bear[1] and labels //and low < low[1]
//     Lbear = label.new(bar_index, na, text="SHORT\n\nSL: " + tostring(SlShort) + "\n\nBid: " + tostring(BidShort) + "\n\nTP: " + tostring(TpShort) + "\n\nMise: " + tostring(betShort) + "\n\nCryptos: " + tostring(cryptShort), color=color.red, textcolor=color.white, style=label.style_labeldown, yloc=yloc.abovebar)
//     label.delete(supp ? Lbear[1] : na)

var bentry=0.0
var bsl=0.0
var btp=0.0

if bear[1] and low < low[1]
    bentry:=BidShort
    bsl:=SlShort
    btp:=TpShort
    
pbentry = plot(bpos? bentry:na, color=color.orange)
plot(bpos? (bentry+btp)/2:na, color=color.gray)
pbsl = plot(bpos? bsl:na, color=color.red)
pbtp = plot(bpos? btp:na, color=color.green)

fill(pbentry,pbsl, color.red, transp=70)
fill(pbentry,pbtp, color.green, transp=70)


// ------------------------------------------ //
// ------------- Position Long -------------- //
// ------------------------------------------ //

SlLong = lowest(3)
BidLong = close[1]

TpLong = BidLong + ((BidLong - SlLong) * ratio)
deltaBull = (BidLong - SlLong)/BidLong
betLong = round(loss/(lev*deltaBull)*100)/100
cryptLong = round(betLong*lev/BidLong*1000)/1000

// if bull[1] and labels //and high > high[1]
//     Lbull = label.new(bar_index, na, text="LONG\n\nSL: " + tostring(SlLong) + "\n\nBid: " + tostring(BidLong) + "\n\nTP: " + tostring(TpLong) + "\n\nMise: " + tostring(betLong) + "\n\nCryptos: " + tostring(cryptLong), color=color.green, textcolor=color.white, style=label.style_labelup, yloc=yloc.belowbar)
//     label.delete(supp ? Lbull[1] : na)

var Bentry=0.0
var Bsl=0.0
var Btp=0.0

if bull[1] and high > high[1]
    Bentry:=BidLong
    Bsl:=SlLong
    Btp:=TpLong
    
pBentry = plot(Bpos?Bentry:na, color=color.orange)
plot(Bpos?(Bentry+Btp)/2:na, color=color.gray)
pBsl = plot(Bpos?Bsl:na, color=color.red)
pBtp = plot(Bpos?Btp:na, color=color.green)

fill(pBentry,pBsl, color.red, transp=70)
fill(pBentry,pBtp, color.green, transp=70)


// ------------------------------------------ //
// --------------- Strategie ---------------- //
// ------------------------------------------ //

Bear = bear[1] and low < low[1]
Bull = bull[1] and high > high[1]

if (Bear and strategy.opentrades==0)
    strategy.order("short", false, 1, limit=BidShort)
    strategy.exit("exit", "short", limit = TpShort, stop = SlShort)

strategy.cancel("short", when = high > SlShort or low < (BidShort+TpShort)/2)
strategy.close("short", when=bull)

if (Bull and strategy.opentrades==0)
    strategy.order("long", true, 1, limit=BidLong)
    strategy.exit("exit", "long", limit = TpLong, stop = SlLong)
    
strategy.cancel("long", when = low < SlLong or high > (BidLong+TpLong)/2)
strategy.close("long", when=bear)


Plus de