Stratégie de croisement de deux moyennes mobiles avec des moyennes mobiles multifonctions

Auteur:ChaoZhang est là., Date: le 19 septembre 2023
Les étiquettes:

Résumé

Cette stratégie génère des signaux de négociation en calculant le croisement de plusieurs types de moyennes mobiles, en mettant en œuvre un double croisement MA long et court.

La logique de la stratégie

  1. Calculer deux MAs: MA1 et MA2, qui peuvent choisir entre SMA, EMA, VWMA, etc. Les longueurs sont personnalisables.

  2. Déterminer le croisement MA: passer à long lorsque MA1 traverse le MA2, position fermée lorsque MA1 traverse le MA2.

  3. (Facultatif) Calculer un troisième MA - MA3, généralement avec une période plus longue comme 50. Au-dessus de MA3 est tendance haussière, en dessous est tendance baissière. Ne négociez que lorsque le prix dépasse MA3.

  4. Combinez les règles avec les délais de backtest pour générer des signaux de trading.

  5. Remplissez de couleur les zones croisées pour une aide visuelle.

La stratégie combine le suivi de la tendance des MAs et le crossover long/short, avec un troisième MAs pour le contrôle des risques.

Analyse des avantages

  1. Le croisement à double MA suit effectivement la tendance.

  2. Prise en charge de combinaisons multiples de types MA, peut être optimisée pour différentes périodes.

  3. Le troisième MA contrôle les risques et réduit les pertes inutiles.

  4. L'aide visuelle améliore l'expérience de trading de graphiques.

  5. Les paramètres réglables peuvent être optimisés pour différents cycles.

  6. Une logique simple et claire, facile à comprendre et à suivre.

Analyse des risques

  1. Le double MA lutte contre les scénarios de variation et d'inversion de tendance.

  2. Le double MA peut parfois générer de faux signaux ou une réaction excessive.

  3. Le troisième MA peut manquer des opportunités fortement tendance. peut tester le raccourcissement de sa période pour capturer plus de profits.

  4. Je ne peux pas garantir des gains pour chaque transaction, j'ai besoin d'une gestion de stop loss appropriée.

Directions d'optimisation

  1. Testez différents types et périodes d'AM pour la meilleure paire de paramètres.

  2. Optimiser la troisième période d'AM pour équilibrer le contrôle des risques et la capture des bénéfices.

  3. Ajouter une stratégie de stop loss pour contrôler le montant de la perte d'une seule transaction.

  4. Considérez les algorithmes d'apprentissage automatique pour trouver des paramètres optimaux basés sur les données volumineuses.

  5. Combinez avec d'autres indicateurs tels que KD, MACD pour le filtrage et la confirmation du signal.

Résumé

Cette double stratégie de croisement des moyennes mobiles avec des MAs multi-types intègre le suivi des tendances, le contrôle des risques, l'optimisation des paramètres, l'aide visuelle et plus encore. Avec des tests et une optimisation continus, l'introduction d'autres indicateurs ou l'apprentissage automatique, etc., il peut mieux s'adapter au marché et a une grande valeur pratique. En résumé, il s'agit d'une stratégie simple, pratique et facilement optimisable, ce qui en fait un excellent point de départ pour le trading algorithmique.


/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-12 22:00:00
period: 1m
basePeriod: 1m
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/
// © HAMIDBOX

//@version=4
strategy("Multi-X by HAMID-BOX", overlay=true)

maType(source , length, type)   =>
    type    == "SMA"            ? sma(source , length)  :
     type   == "EMA"            ? ema(source , length)  :
     type   == "RMA"            ? rma(source, length)   : 
     type   == "WMA"            ? wma(source, length)   :
     type   == "VWMA"           ? vwma(source, length)  :
     na
     
////////////////////////////////////////////////////////////////////////////////
colorup             = #11ff00
colordn             = #e91e63

/////////////////////////// MOVING AVERAGE №1 INPUTS ///////////////////////////
ma1_show            = input(title="MA №1", defval=true, type=input.bool, inline="ma1")
ma1type             = input(title="", defval="EMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma1")
ma1src              = input(title="", defval=close, type=input.source, inline="ma1")
ma1Len              = input(title="", defval=9, type=input.integer, inline="ma1")
ma1col              = input(colorup, "", type=input.color, inline="ma1")

ma1                 = maType(ma1src, ma1Len, ma1type)

ma1p = plot(ma1_show ? ma1 : na, linewidth=1, color=color.new(ma1col , 50))

/////////////////////////// MOVING AVERAGE №2 INPUTS ///////////////////////////
ma2_show            = input(title="MA №2", defval=true, type=input.bool, inline="ma2")
ma2type             = input(title="", defval="SMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma2")
ma2src              = input(title="", defval=close, type=input.source, inline="ma2")
ma2Len              = input(title="", defval=21, type=input.integer, inline="ma2")
ma2col              = input(colordn, "", type=input.color, inline="ma2")

ma2                 = maType(ma2src, ma2Len, ma2type)

ma2p = plot(ma2_show ? ma2 : na, linewidth=1, color=color.new(ma2col , 50))

/////////////////////////// MOVING AVERAGE №3 INPUTS ///////////////////////////

read                = input(title="For Safe Side = Read This >>>", defval=true, tooltip="If you want to play on the safe side, Check ON Moving Average № 3, MA №3 shows the major trend, its work as a Trend-Zone,\nRule: Do not open trades if the market is below MA № 3, WHY? because Trend is Bearish and it will make more Down, NOTE:: It is possible after adding MA № 3, it will give you a small profit. But the great advantage of that, it will reduce your loss and it will also increase your Profit Factor.\nAnd if you not have any issue with Risk then you can Leave Moving Average No 3")
ma3_show            = input(title="MA №3", defval=false, type=input.bool, inline="ma3")
ma3type             = input(title="", defval="SMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma3")
// ma3srcH          = input(title="", defval=high, type=input.source, inline="ma3")
// ma3srcL          = input(title="", defval=low, type=input.source, inline="ma3")
ma3Len              = input(title="", defval=50, type=input.integer, inline="ma3")
ma3col              = input(colordn, "", type=input.color, inline="ma3")

ma3H                = maType(high, ma3Len, ma3type)
ma3L                = maType(low, ma3Len, ma3type)

ma3p                = plot(ma3_show ? ma3H : na, linewidth=1, color=color.new(ma3col , 50))
ma3p2               = plot(ma3_show ? ma3L : na, linewidth=1, color=color.new(ma3col , 50))

Bigcross_zone_color = if ma3_show and close > ma3H
    color.new(colorup , 90)
else
    if ma3_show and close < ma3L
        color.new(colordn , 90)
fill(ma3p , ma3p2, color=Bigcross_zone_color, title="Cross Background Color")

BigCrossSignal      = close > ma3H
ZoneCrossover       = crossover(close , ma3H)
///////////////////////////// BACK TESTING INPUTS //////////////////////////////
startTime           = input(title="Start Time", type=input.time, defval= timestamp("01 Jan 2021"))
endTime             = input(title="End Time", type=input.time, defval= timestamp("01 Jan 2100"))
inDateRange         = true

//////////////////////////// PLOTING AND COOLORING /////////////////////////////
Cross               = input(true, "Cross Sign ON/OFF") 
maCrossOver         = crossover(ma1 , ma2)
maCrossUnder        = crossunder(ma1 , ma2)
cross_zone_color    = ma1 > ma2 ? color.new(colorup , 85) : color.new(colordn , 85)

plotshape(Cross ? maCrossOver : na, title="CrossUP Sign", style=shape.triangleup, location=location.belowbar, color=color.white, size=size.tiny)
plotshape(Cross ? maCrossUnder : na, title="CrossDN Sign", style=shape.xcross, location=location.abovebar, color=#e91e63, size=size.tiny)

fill(ma1p , ma2p, color=cross_zone_color, title="Cross Background Color")

///////////////////////////////// (CONDITIONS) /////////////////////////////////

if maCrossOver and inDateRange
    if ma3_show
        strategy.entry("BUY", strategy.long, when=BigCrossSignal)
    else    
        strategy.entry("BUY", strategy.long)

if  ma3_show
    strategy.entry("BUY", strategy.long, when=ZoneCrossover)

if maCrossUnder and inDateRange
    strategy.close("BUY", comment="Exit")
if (not inDateRange)
    strategy.close_all()





Plus de