Stratégie de négociation croisée de la moyenne mobile de l'élan

Auteur:ChaoZhang est là., Date: 2024-01-24 11h09:58
Les étiquettes:

img

Résumé

Cette stratégie génère des signaux de trading basés sur le croisement entre les lignes moyennes mobiles rapides et lentes pour déterminer les tendances et les points d'entrée du marché. Lorsque la EMA rapide traverse au-dessus de la EMA lente, on juge que le marché est en tendance haussière et un signal d'achat est généré. Lorsque la EMA rapide traverse au-dessous de la EMA lente, on juge que le marché est en tendance baissière et un signal de vente est généré.

La logique de la stratégie

La stratégie utilise le croisement entre une EMA rapide (8 jours) et une EMA lente (21 jours) pour déterminer la tendance du marché.

  1. Calcul de l'EMA à 8 jours et de l'EMA à 21 jours
  2. Lorsque l'EMA à 8 jours dépasse l'EMA à 21 jours, il est établi que la tendance du marché s'est inversée et qu'une tendance à la hausse a commencé.
  3. Lorsque l'EMA à 8 jours dépasse l'EMA à 21 jours, il est établi que la tendance du marché s'est inversée et qu'une tendance à la baisse a commencé.
  4. Pendant une tendance haussière, un signal d'achat est généré.
  5. Définir les prix de stop loss et de profit pour gérer les risques pour chaque position

La stratégie combine des indicateurs de dynamique et une analyse de tendance pour capturer efficacement la direction du marché et les points d'inversion.

Analyse des avantages

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

  1. Les croisements rapides et lents de la EMA peuvent déterminer efficacement les tendances du marché et les signaux de négociation
  2. Grande marge d'optimisation pour les paramètres de stratégie où les périodes EMA peuvent être ajustées
  3. Les signaux sonores peuvent être filtrés efficacement en incorporant des indicateurs de momentum
  4. Contrôle actif des risques par la configuration de la logique de stop loss et de prise de profit

En résumé, la stratégie combine des indicateurs de tendance et de dynamique.

Analyse des risques

Cette stratégie comporte également certains risques:

  1. Dans les marchés à courte portée, les signaux croisés fréquents de l'EMA peuvent générer plus de transactions erronées
  2. Le risque d'écart n'est pas géré efficacement
  3. L'orientation de la tendance à long terme n'est pas prise en compte

Pour faire face à ces risques, certaines optimisations peuvent être apportées:

  1. Ajouter d'autres filtres comme les bandes de Bollinger, KDJ pour réduire les faux signaux
  2. Incorporer des indicateurs à plus long terme pour déterminer la tendance à long terme
  3. Optimiser les paramètres tels que les longueurs de la EMA pour s'adapter aux différents marchés
  4. Intervention manuelle pour éviter les pertes énormes de glissement par les écarts

Directions d'optimisation

Il y a encore beaucoup de place pour optimiser cette stratégie:

  1. Optimiser les paramètres de la période EMA basés sur les performances historiques
  2. Ajouter d'autres indicateurs techniques pour le filtrage des signaux, par exemple KDJ, MACD pour améliorer la précision
  3. Optimiser les paramètres de stop loss et de prise de profit pour mieux s'adapter aux caractéristiques du marché
  4. Utiliser des techniques d'apprentissage automatique pour l'optimisation automatisée des paramètres

Ces mesures peuvent améliorer considérablement la stabilité, l'adaptabilité et la rentabilité de la stratégie.

Conclusion

En conclusion, il s'agit d'une stratégie de trading à court terme typique basée sur le suivi des tendances et les croisements des indicateurs de dynamique. Elle combine la logique de croisement EMA et le stop loss/take profit pour saisir rapidement les opportunités de marché directionnelles. Il y a beaucoup de place pour l'optimisation en introduisant d'autres indicateurs d'assistance et des méthodes automatisées de réglage des paramètres, ce qui peut rendre la performance de la stratégie plus stable et exceptionnelle.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
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/
// © TradersPostInc

//@version=5
strategy('TradersPost Example MOMO Strategy', overlay=true)

startTime = input(defval = timestamp('01 Jan 2021 00:00 +0000'), title = 'Start Time', group = 'Date Range')
endTime = input(defval = timestamp('31 Dec 2023 23:59 +0000'), title = 'End Time', group = 'Date Range')
timeCondition = true
timeConditionEnd = timeCondition[1] and not timeCondition

fastEmaLength = input.int(defval = 8, title = 'Fast EMA Length')
slowEmaLength = input.int(defval = 21, title = 'Slow EMA Length')
sides = input.string(defval = 'Both', title = 'Sides', options = ['Long', 'Short', 'Both', 'None'])

fastEma = ta.ema(close, fastEmaLength)
slowEma = ta.ema(close, slowEmaLength)

isUptrend = fastEma >= slowEma
isDowntrend = fastEma <= slowEma
trendChanging = ta.cross(fastEma, slowEma)

ema105 = request.security(syminfo.tickerid, '30', ta.ema(close, 105)[1], barmerge.gaps_off, barmerge.lookahead_on)
ema205 = request.security(syminfo.tickerid, '30', ta.ema(close, 20)[1], barmerge.gaps_off, barmerge.lookahead_on)
plot(ema105, linewidth=4, color=color.new(color.purple, 0), editable=true)
plot(ema205, linewidth=2, color=color.new(color.purple, 0), editable=true)

aa = plot(fastEma, linewidth=3, color=color.new(color.green, 0), editable=true)
bb = plot(slowEma, linewidth=3, color=color.new(color.red, 0), editable=true)
fill(aa, bb, color=isUptrend ? color.green : color.red, transp=90)

tradersPostBuy = trendChanging and isUptrend and timeCondition
tradersPostSell = trendChanging and isDowntrend and timeCondition

pips = syminfo.pointvalue / syminfo.mintick

percentOrPipsInput = input.string('Percent', title='Percent or Pips', options=['Percent', 'Pips'])

stopLossLongInput = input.float(defval=0, step=0.01, title='Stop Loss Long', minval=0)
stopLossShortInput = input.float(defval=0, step=0.01, title='Stop Loss Short', minval=0)

takeProfitLongInput = input.float(defval=0, step=0.01, title='Target Profit Long', minval=0)
takeProfitShortInput = input.float(defval=0, step=0.01, title='Target Profit Short', minval=0)

stopLossPriceLong = ta.valuewhen(tradersPostBuy, close, 0) * (stopLossLongInput / 100) * pips
stopLossPriceShort = ta.valuewhen(tradersPostSell, close, 0) * (stopLossShortInput / 100) * pips

takeProfitPriceLong = ta.valuewhen(tradersPostBuy, close, 0) * (takeProfitLongInput / 100) * pips
takeProfitPriceShort = ta.valuewhen(tradersPostSell, close, 0) * (takeProfitShortInput / 100) * pips

takeProfitALong = takeProfitLongInput > 0 ? takeProfitLongInput : na
takeProfitBLong = takeProfitPriceLong > 0 ? takeProfitPriceLong : na

takeProfitAShort = takeProfitShortInput > 0 ? takeProfitShortInput : na
takeProfitBShort = takeProfitPriceShort > 0 ? takeProfitPriceShort : na

stopLossALong = stopLossLongInput > 0 ? stopLossLongInput : na
stopLossBLong = stopLossPriceLong > 0 ? stopLossPriceLong : na

stopLossAShort = stopLossShortInput > 0 ? stopLossShortInput : na
stopLossBShort = stopLossPriceShort > 0 ? stopLossPriceShort : na

takeProfitLong = percentOrPipsInput == 'Pips' ? takeProfitALong : takeProfitBLong
stopLossLong = percentOrPipsInput == 'Pips' ? stopLossALong : stopLossBLong
takeProfitShort = percentOrPipsInput == 'Pips' ? takeProfitAShort : takeProfitBShort
stopLossShort = percentOrPipsInput == 'Pips' ? stopLossAShort : stopLossBShort

buyAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "buy", "price": ' + str.tostring(close) + '}'
sellAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "sell", "price": ' + str.tostring(close) + '}'

exitLongAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit", "price": ' + str.tostring(close) + '}'
exitShortAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit", "price": ' + str.tostring(close) + '}'

if (sides != "None")
    if tradersPostBuy
        strategy.entry('Long', strategy.long, when = sides != 'Short', alert_message = buyAlertMessage)
        strategy.close('Short', when = sides == "Short" and timeCondition, alert_message = exitShortAlertMessage)

    if tradersPostSell
        strategy.entry('Short', strategy.short, when = sides != 'Long', alert_message = sellAlertMessage)
        strategy.close('Long', when = sides == 'Long', alert_message = exitLongAlertMessage)

exitAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit"}'

strategy.exit('Exit Long', from_entry = "Long", profit = takeProfitLong, loss = stopLossLong, alert_message = exitAlertMessage)
strategy.exit('Exit Short', from_entry = "Short", profit = takeProfitShort, loss = stopLossShort, alert_message = exitAlertMessage)

strategy.close_all(when = timeConditionEnd)

Plus de