Tendance à la suite d'une stratégie basée sur le croisement des moyennes mobiles

Auteur:ChaoZhang est là., Date: 2023-10-24 11:02:52 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie utilise principalement la croix d'or et la croix morte des moyennes mobiles et la percée du chandelier des moyennes mobiles pour prendre des décisions longues et courtes.

Principaux

  1. Calculer deux moyennes mobiles, EMA1 et EMA2, avec des périodes différentes.

  2. Déterminez si l'EMA1 traverse l'EMA2, si oui, passez à long.

  3. Déterminer si l'EMA1 dépasse l'EMA2 et si oui, passer à la courte.

  4. Déterminer si le prix de clôture franchit l'EMA1 en tant que signal d'entrée.

  5. Mécanisme de sortie: régler le stop loss fixe ou utiliser le canal Donchian pour régler le stop loss.

Principales fonctions utilisées

  • ema ((): calculer la moyenne mobile exponentielle
  • croisement ((): déterminer si EMA1 croise EMA2
  • crossunder ((): déterminer si l'EMA1 est inférieure à l'EMA2
  • en hausse (() / en baisse ((): déterminer si le prix augmente ou diminue
  • valuewhen(): renvoie des valeurs différentes basées sur la condition

Les avantages

  1. Une logique simple, facile à comprendre et à mettre en œuvre.

  2. Utilisez la tendance suivante des moyennes mobiles pour suivre efficacement les tendances.

  3. La combinaison de la percée de prix de clôture du chandelier aide à éviter les fausses percées.

  4. Utilisation flexible de différentes combinaisons de moyennes mobiles adaptées à différentes périodes.

  5. Le mécanisme stop-loss contrôle le risque.

Les risques

  1. Les croix d'or et les croix mortes fréquentes pendant la consolidation du marché provoquent des coups de fouet.

  2. Les points de stop loss fixes peuvent être trop rigides pour être ajustés en fonction des changements du marché.

  3. Les moyennes mobiles sont en retard et peuvent manquer les signaux de renversement aux points tournants.

  4. Un jugement précis de la pente moyenne mobile est nécessaire pour filtrer les fausses percées.

  5. La sélection des paramètres doit être prudente, car une fréquence ou un retard inappropriés peuvent affecter les performances de la stratégie.

Optimisation

  1. Le croisement de la ligne zéro du MACD peut aider à déterminer les tendances et à filtrer les consolidations.

  2. Ajouter le canal Donchian pour une ligne de stop-loss dynamique afin d'améliorer les stop-loss fixes.

  3. Ajoutez des bandes de Bollinger pour juger des tendances fortes ou faibles, évitant ainsi des transactions inefficaces lors des consolidations du marché.

  4. Optimiser les combinaisons de paramètres des moyennes mobiles et tester les performances réelles des différentes stratégies de période.

  5. Considérez l'ajout de moyennes mobiles ancrées pour réduire le retard.

Conclusion

La logique générale de cette stratégie est simple et claire, en utilisant des techniques de trading crossover classiques de moyennes mobiles, et en combinant la rupture du chandelier pour l'entrée afin de filtrer efficacement les faux signaux.


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

//@version=2
strategy(title='Mega crypto bot strategy', shorttitle='megacryptobot_Strategy', overlay=true, pyramiding=0, initial_capital=10000, currency=currency.USD)

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance Channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=input(false, title="Bar Channel On/Off")
ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0)
ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0)
//fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel")

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:',  defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)
RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0)
RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0
plot_color = direction > 0  ? lime: direction < 0 ? red : na
plot(ema0, title="EMA", style=line, linewidth=1, color = plot_color)

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0
plot_color2 = direction2 > 0  ? lime: direction2 < 0 ? red : na
plot(ema02, title="EMA Signal 2", style=line, linewidth=1, color = plot_color2)

//=============Hull MA//
show_hma = input(false, title="Display Hull MA Set:")
hma_src = input(close, title="Hull MA's Source:")
hma_base_length = input(8, minval=1, title="Hull MA's Base Length:")
hma_length_scalar = input(5, minval=0, title="Hull MA's Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=2, title="Hull MA")

//============ signal Generator ==================================//
period = input('720')
ch1 = request.security(syminfo.tickerid, period, open)
ch2 = request.security(syminfo.tickerid, period, close)
longCondition = crossover(request.security(syminfo.tickerid, period, close),request.security(syminfo.tickerid, period, open))
if (longCondition)
    strategy.entry("BUY", strategy.long)
shortCondition = crossunder(request.security(syminfo.tickerid, period, close),request.security(syminfo.tickerid, period, open))
if (shortCondition)
    strategy.entry("SELL", strategy.short)

///////////////////////////////////////////////////////////////////////////////////////////

Plus de