Deux canaux de moyenne mobile avec stratégie de suivi des tendances

Auteur:ChaoZhang est là., Date: 2023-11-06 15:41:23 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie utilise des moyennes mobiles rapides et lentes pour construire un système à double voie, combinée à l'indice de tendance ADX pour le jugement de la tendance et à l'indice directionnel DMI pour déterminer la direction de la tendance, pour suivre la tendance après son établissement et sortir à temps lorsque la tendance s'inverse, en évitant de poursuivre les sommets et de vendre les fonds.

Logique de négociation

  1. Les moyennes mobiles rapides et lentes construisent un système de canal à double voie. Lorsque le MA rapide traverse le MA lent, c'est un signal d'entrée en croix d'or pour longtemps. Lorsque le MA rapide traverse en dessous du MA lent, c'est un signal de sortie en croix de mort.

  2. L'ADX juge l'existence et la force d'une tendance. Lorsque l'ADX est au-dessus du niveau clé, il indique qu'une tendance existe et est forte. Les signaux de trading ne sont générés que lorsque la tendance est forte.

  3. Le DI+ du DMI détermine la direction de la tendance. Lorsque le DI+ est positif, il indique une tendance à la hausse. Lorsque le DI+ est négatif, il indique une tendance à la baisse. Les signaux de trading ne sont générés que lorsque la direction de la tendance correspond.

  4. Les essais sur les intervalles de temps permettent de vérifier l'efficacité de la stratégie sur différentes périodes.

Analyse des avantages

  1. Le système à deux rails filtre les fuites pour éviter les faux signaux.

  2. L'ADX évite une négociation excessive lors de la consolidation en exigeant une tendance.

  3. Le DMI assure que les transactions correspondent à la direction de la tendance, ce qui empêche les transactions contraires à la tendance.

  4. Le test de la plage de temps vérifie les paramètres et optimise les paramètres.

Analyse des risques

  1. Les canaux peuvent former des pièges, nécessitant des arrêts pour éviter les fouets.

  2. Les délais d'ADX peuvent manquer les premières opportunités, ce qui nécessite un niveau clé inférieur.

  3. Les délais de direction du DMI peuvent également manquer les tendances précoces, nécessitant des périodes plus courtes.

  4. Les paramètres peuvent nécessiter un ajustement dans des intervalles de temps différents.

Optimisation

  1. Les combinaisons de paramètres doivent être testées pour trouver les paramètres optimaux.

  2. Ajoutez des filtres comme les bandes de Bollinger pour la qualité du signal.

  3. Incorporer le stop loss pour limiter les pertes.

  4. Optimisez automatiquement les paramètres avec l'apprentissage automatique.

  5. Incorporer plus de facteurs comme le sentiment et les nouvelles.

Conclusion

Cette stratégie combine les forces des moyennes mobiles, des indices de tendance et des indices directionnels pour identifier et suivre les tendances. Tout en vérifiant la validité des paramètres, une optimisation continue est nécessaire pour s'adapter à plus de conditions de marché en ajustant les paramètres, en ajoutant des arrêts, en synthétisant plus de facteurs, etc., afin d'améliorer la robustesse et la rentabilité.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// author: codachang0726
strategy(title = "(S)MA+ADX+DI+time", shorttitle = "(S)MA+ADX+DI+time", overlay = true)

// === INPUT MA LENGTHS ===
fastMA    = input(defval = 7,   title = "FastMA",          minval = 1, step = 1)
slowMA    = input(defval = 14,   title = "SlowMA",          minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 9,    title = "From Month",      minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        minval = 1, maxval = 31)
thruYear  = input(defval = 2022, title = "Thru Year",       minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

// === MA LOGIC ===
crossOv   =  sma(close, fastMA) > sma(close, slowMA)     // true when fastMA over slowMA
crossUn   =  sma(close, fastMA) < sma(close, slowMA)     // true when fastMA under slowMA

// DI+ADX
adxlen      = input(14, title="ADX Smoothing")
dilen       = input(14, title="DI Period")
keyLevel    = input(20, title="Keylevel for ADX")
[diplus, diminus, adx] = dmi(dilen, adxlen)
di = (diplus - diminus)

buy = di > 0 and crossOv and adx > keyLevel
sell = di < 0 and crossUn and adx > keyLevel

buy_time = buy and not buy[1]
sell_time = sell and not sell[1]

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy_time)    // enter long when "within window of time" AND crossover
strategy.close("L", when = window() and sell_time)                   // exit long when "within window of time" AND crossunder         

// === PLOTTING ===
bgcolor(color = showDate and window() ? color.gray : na, transp = 90)                                     // plot "within window of time"
plot(sma(close, fastMA), title = 'FastMA', color = color.yellow, linewidth = 2, style = plot.style_line)  // plot FastMA
plot(sma(close, slowMA), title = 'SlowMA', color = color.aqua,   linewidth = 2, style = plot.style_line)  // plot SlowMA


Plus de