Stratégie de trading basée sur la moyenne mobile Golden Cross et Dead Cross


Date de création: 2023-12-07 14:56:50 Dernière modification: 2023-12-07 14:56:50
Copier: 0 Nombre de clics: 381
1
Suivre
1166
Abonnés

Stratégie de trading basée sur la moyenne mobile Golden Cross et Dead Cross

Aperçu

Cette stratégie est basée sur les signaux de décalage horaire des moyennes mobiles à 50 jours et des moyennes mobiles à 200 jours de BTC, combinés à des jugements supplémentaires sur les indicateurs techniques pour émettre des signaux d’achat et de vente. La stratégie s’applique principalement à la paire BTC/USDT, qui présente des caractéristiques de tendance évidentes.

Principe de stratégie

Lorsque le 50e jour de la moyenne mobile au-dessus de la rupture de la 200e jour de la moyenne mobile et de la formation de fourchettes de cuivre, indique que le BTC est entré dans le marché à plusieurs têtes, générant un signal d’achat. Et lorsque le 50e jour de la moyenne mobile vers le bas de la rupture de la 200e jour de la moyenne mobile et de la formation de fourchettes de mort-vivant, indique que le BTC est entré dans le marché vide, générant un signal de vente.

En plus des jugements de base sur les signaux de la fourchette d’or et de la fourchette de mort, la stratégie a ajouté des indicateurs techniques supplémentaires pour aider à la décision, notamment:

  1. Indicateur EMA: Calcule l’indicateur EMA d’une longueur + offset, qui indique qu’il est actuellement sur le marché à plusieurs têtes et peut être acheté lorsque sa hausse est marquée.

  2. Comparer la relation numérique entre la moyenne mobile et l’EMA: si la valeur de l’EMA est supérieure à la moyenne mobile à 50 jours, un jugement d’achat est émis.

  3. Vérifiez que le prix est inférieur de plus de 1% au point le plus bas de la ligne K précédente, et si cela est satisfait, un signal de vente est généré.

L’utilisation combinée de ces indicateurs permet de filtrer certains signaux erronés et de rendre les décisions stratégiques plus fiables.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. L’utilisation d’une moyenne mobile comme principal signal de négociation permet de filtrer le bruit du marché et d’identifier la direction de la tendance.

  2. La combinaison d’une variété d’indicateurs techniques auxiliaires tels que l’EMA peut améliorer la fiabilité du signal et filtrer les faux signaux.

  3. Les pertes individuelles peuvent être efficacement maîtrisées grâce à une stratégie de stop-loss appropriée.

  4. La logique de négociation est simple, facile à comprendre et adaptée aux débutants en trading quantitatif.

  5. Les paramètres sont plus nombreux et peuvent être modifiés en fonction de vos préférences.

Analyse des risques

Cette stratégie comporte également des risques à prendre en compte:

  1. Les moyennes mobiles sont elles-mêmes fortement retardées et risquent de manquer une occasion de faire un revirement rapide.

  2. Les indicateurs auxiliaires augmentent le nombre de règles et augmentent la probabilité de générer des signaux erronés.

  3. Un mauvais réglage du stop-loss peut entraîner une augmentation des pertes.

  4. Des paramètres incorrects (comme la longueur d’une moyenne mobile) peuvent également affecter l’efficacité de la stratégie.

La réponse:

  1. Réduire de manière appropriée les cycles de moyenne mobile et augmenter la portée de l’optimisation des paramètres.

  2. Augmentation de la quantité de données de retour et vérification de la qualité du signal.

  3. Laissez votre stop loss s’alléger de manière appropriée tout en fixant un profit limité.

  4. Augmentation de l’optimisation des paramètres et recherche de la meilleure combinaison de paramètres

Direction d’optimisation

La stratégie peut également être optimisée dans les directions suivantes:

  1. Ajout d’algorithmes d’apprentissage automatique pour optimiser automatiquement les paramètres.

  2. Ajouter plus d’indicateurs auxiliaires, construire plusieurs sous-stratégies et générer des décisions via un mécanisme de vote.

  3. L’option de la rupture est une stratégie qui permet de détecter une rupture de prix.

  4. L’utilisation de l’apprentissage en profondeur pour prédire les tendances des prix.

  5. Optimisation des mécanismes d’arrêt des pertes et mise en place d’un suivi dynamique des pertes.

L’optimisation de ces données permet d’améliorer l’exactitude des décisions et de renforcer la rentabilité et la stabilité des stratégies.

Résumer

Cette stratégie est principalement basée sur le croisement des moyennes mobiles de BTC pour la prise de décision de négociation, avec des indicateurs techniques tels que les EMA pour filtrer les signaux. La stratégie a une forte capacité de suivi des tendances, est également hautement configurable et convient comme stratégie d’entrée pour les transactions quantifiées.

Code source de la stratégie
/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('JayJay BTC Signal', overlay=true, initial_capital=100, currency='USD', default_qty_value=100, default_qty_type=strategy.percent_of_equity, commission_value=0, calc_on_every_tick=true)

securityNoRepaint(sym, tf, src) => request.security(sym, tf, src[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]

//200 50 Moving Average
ma50Len = input.int(50, minval=1, title='MA50-Length')
ma50Src = input(close, title='MA50-Source')
ma50Show = input(true, title='Show SMA50 on chart')
ma50Close = ta.sma(ma50Src, ma50Len)
ma50CloseTimeframe = input.timeframe("240", "Ma50 Timeframe", group = "EMA Options")
ma50Open = ta.sma(open, ma50Len)
ma200Len = input.int(200, minval=1, title='MA200-Length')
ma200Src = input(close, title='MA200-Source')
ma200Show = input(true, title='Show SMA200 on chart')
ma200CloseTimeframe = input.timeframe("D", "Ma200 Timeframe", group = "EMA Options")
ma200Close = ta.sma(ma200Src, ma200Len)
ma200Open = ta.sma(open, ma200Len)
//plot(ma200Close, color=color.new(#0b6ce5, 0), title='MA200')
//plot(ma50Close, color=color.new(#00d8ff, 0), title='MA50')

sma50 = securityNoRepaint(syminfo.tickerid, ma50CloseTimeframe, ma50Close)
plot(sma50 and ma50Show ? sma50 : na, color=color.new(#00d8ff, 0), title='SMA50')
sma200 = securityNoRepaint(syminfo.tickerid, ma200CloseTimeframe, ma200Close)
plot(sma200 and ma200Show ? sma200 : na, color=color.new(#00d8ff, 0), title='SMA200')

// Short/Long EMA
// Define the offset value
EMAOffsetValue = input.int(2, title='EMA Offset', minval=0)
emaplot = input(true, title='Show EMA on chart')
len = input.int(20, minval=1, title='ema Length') + EMAOffsetValue
emaCloseTimeframe = input.timeframe("240", "EMA 1 Timeframe", group = "EMA Options")
emaOpen = ta.ema(open, len)
emaClose = ta.ema(close, len)

ema = securityNoRepaint(syminfo.tickerid, emaCloseTimeframe, emaClose)

up = emaClose > ema[1]
down = emaClose < ema[1]
mycolor = up ? color.green : down ? color.red : color.blue

plot(ema and emaplot ? ema : na, title='Signal EMA', color=mycolor, linewidth=3)
//plot(emaClose and emaplot ? emaClose : na, title='Signal 20 EMA', color=color.yellow, linewidth=3)

ma50GreaterThanMa200 = sma50 > sma200

last3BarUp = ema > ema[1]

startLong = up and ema > sma50 and ma50GreaterThanMa200 and (100 - (sma50 / ema * 100) > 1.0)

startFrom = input(timestamp("20 Jan 2000 00:00"), "StartFrom")

yearFilter = true

alertLongPositionMessage = "{\"direction:\": \"long\", \"action\": \"{{strategy.order.action}}\", \"price\": \"{{strategy.order.price}}\", \"qty\": \"{{strategy.position_size}}\", \"symbol\": \"{{ticker}}\", \"date\": \"{{time}}\"}"

if true and startLong and yearFilter
    strategy.entry('Long', strategy.long, comment = "Long", alert_message = alertLongPositionMessage)

longStopLossLevel = open * 0.05
strategy.exit('StopLoss', from_entry='Long',comment = "StopLoss!", loss=longStopLossLevel, profit=close * 0.3, alert_message = alertLongPositionMessage)
longPercentageChange = low / close[1] * 100 - 100
is1PercentLower = longPercentageChange < -0.1
closeLongPositionWhen = (down and is1PercentLower) or (emaClose < sma50)
if closeLongPositionWhen
    strategy.close('Long', comment = "Fuck It!", alert_message =  alertLongPositionMessage)

bgcolor(startLong ? color.green : na, transp=90)