Cette stratégie est une stratégie de négociation de crypto-monnaie basée sur l’indicateur de différence de prix aggloméré en moyenne mobile (MACD) et l’indicateur de force relative (RSI). Elle fournit des signaux pour la décision de négociation en calculant la différence entre les moyennes mobiles à court et à long terme, combinée au RSI pour juger de la tendance du marché et des situations de survente et de survente.
Les EMA de 12 jours et les EMA de 26 jours sont calculées comme des moyennes mobiles à court terme et à long terme, respectivement.
Calcul de la différence entre les EMA à court et à long terme, sous forme de colonne MACD
Calculer l’EMA de 9 jours du MACD comme ligne de signal
Calculer le RSI à 14 jours pour détecter les surachats
Un signal d’achat est affiché lorsque le MACD traverse la ligne de signal et que le RSI est supérieur à 81
Un signal de vente est affiché lorsque le MACD est en dessous de la ligne de signal et que le RSI est inférieur à 27
Entrée et sortie avec le module de stratégie intégré
L’indicateur MACD permet d’identifier les tendances et les changements de tendance, l’indicateur RSI peut montrer les sur-achats et les sur-vente, les deux combinés peuvent améliorer la précision des signaux de négociation
Les variations de la MACD vers le haut et vers le bas sur l’axe zéro représentent la direction et la force des tendances à court et à long terme, et servent de base pour déterminer la direction du marché.
Les zones élevées du RSI représentent la probabilité d’un surchauffe et d’un surachat, tandis que les zones faibles du RSI représentent la probabilité d’une survente et fournissent une base pour la recherche de points de vente et de vente
Les signaux de transaction sont simples et clairs, et les transactions sont faciles à exécuter selon les règles
Paramètres configurables optimisés pour s’adapter à différents environnements de marché
Les données sur lesquelles se basent le MACD et le RSI sont vulnérables aux fausses percées et aux anomalies de données qui peuvent émettre de faux signaux
Les paramètres fixes peuvent ne pas s’adapter aux changements du marché et doivent être optimisés
Les signaux d’achat et de vente peuvent être retardés et ne pas permettre de faire des achats et des ventes aux points de basculement
Les positions sont vides et ne peuvent pas profiter de la conjoncture
Tester différentes combinaisons de paramètres pour trouver le meilleur
Ajout de conditions de filtrage supplémentaires pour éviter les fausses percées
Augmenter les stratégies de coupe-perte et réduire les pertes de transactions unilatérales
Augmenter la gestion de position, augmenter la position dans une tendance et réduire la position dans une perturbation
En combinant avec d’autres indicateurs, nous cherchons des points de vente et de vente plus précis
Test de l’efficacité sur différentes variétés et périodes
La stratégie utilise les avantages complémentaires des deux indicateurs MACD et RSI pour identifier la direction de la tendance et les points d’achat et de vente. La stabilité et le facteur de profit de la stratégie peuvent être améliorés en optimisant les paramètres et en ajoutant des conditions de filtrage. Un ajustement approprié de la gestion des arrêts de perte et des positions peut également aider à améliorer les niveaux de profit et à réduire les risques.
/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-12 04:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
// Revision: 5
// Author: @Hugo_Moriceau
//study("Thesis_EMLYON_Withdate-strategies-Daily_Crypto_Moriceau_indicator",overlay=true)
// Pyramide 10 order size 100, every tick
strategy("Daily_Crypto_Moriceau_indicator",overlay=true)
// === GENERAL INPUTS ===
fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)
macd = fastMA - slowMA
signal = sma(macd, 9)
rsi = rsi(close,14)
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// === LOGIC ===
// is fast ma above slow ma?
aboveBelow = fastMA >= slowMA ? true : false
// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false
// === Plot Setting ===
//plot(fastMA,color=red)
//plot(slowMA,color=blue)
//barcolor(color=iff(fastMA > slowMA, yellow, na))
//barcolor(color=iff(fastMA < slowMA, black, na))
barcolor(color=iff(macd > 0.12*close , fuchsia, na))
barcolor(color=iff(macd < -0.1*close , lime, na))
dataS= macd > 0.125 and rsi>81 and fastMA > slowMA
dataB= macd < -0.1 and rsi<27 and fastMA< slowMA
plotchar(dataB, char='B',color=black,size = size.tiny,location = location.belowbar,transp= 0)
plotchar(dataS, char='S',color=black,size = size.tiny,location = location.abovebar,transp= 0)
// === BACKTEST RANGE ===
FromMonth = input(defval = 01, title = "From Month", minval = 1)
FromDay = input(defval = 01, title = "From Day", minval = 1)
FromYear = input(defval = 2017, title = "From Year", minval = 2014)
ToMonth = input(defval = 2, title = "To Month", minval = 1)
ToDay = input(defval = 10, title = "To Day", minval = 1)
ToYear = input(defval = 2019, title = "To Year", minval = 2018)
// === STRATEGY RELATED INPUTS ===+
// the risk management inputs
inpTakeProfit = input(defval = 20000, title = "Take Profit", minval = 0)
inpStopLoss = input(defval = 1500, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 100, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na
// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => not tradeDirection[1] and tradeDirection
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())
// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)