Cette stratégie utilise une moyenne mobile rapide de 3 jours, une moyenne mobile lente de 10 jours et une moyenne mobile fluctuante de 16 jours pour construire l'indicateur MACD, complété par l'indicateur RSI et les caractéristiques de volume, et définit des caractéristiques multidimensionnelles de la ligne K pour déterminer l'extension excessive de la tendance du marché, la formation d'une tendance à l'oscillation de la fourchette et l'inversion des entrées longues ou courtes pour la prise de profit.
La stratégie vise à capturer les renversements rapides des prix à partir des niveaux locaux de surachat ou de survente.
La stratégie utilise principalement la moyenne mobile rapide de 3 jours moins la moyenne mobile lente de 10 jours pour former l'indicateur MACD, avec une ligne de signal de 16 jours pour lisser, constituant une stratégie MACD standard. Elle combine également l'analyse du volume des volumes d'achat et de vente pour déterminer les caractéristiques de l'élan.
Plus précisément, en observant la relation entre la ligne MACD et la ligne de signal, ainsi que les changements de pente, il détermine le reflux et le flux des forces haussières et baissières pour repérer les opportunités d'inversion. Dans le même temps, les changements dans les volumes d'achat et de vente reflètent les changements de dynamique haussière et baissière. Combinés avec les changements dans l'indicateur RSI pour déterminer les conditions de surachat et de survente, ces indicateurs nous permettent de déterminer les caractéristiques du profil de marché localisé et le calendrier de l'inversion potentiel.
La stratégie définit trois signaux d'entrée au total:
Long lorsque le volume d'achat n'a aucun avantage sur le volume de vente, RSI inférieur à 41 tout en augmentant, le signal MACD n'a pas d'écart significatif;
Long lorsque le volume d'achat est plus fort que le volume de vente, RSI dans la plage 45-55 et en hausse, MACD et ligne de signal en hausse à l'unisson;
Short lorsque le MACD est au-dessus du seuil en hausse.
Ces trois scénarios reflètent tous des oscillations localisées dans une surexpansion directionnelle, jugée comme un moment opportun d'inversion pour les entrées en direction opposée.
Les sorties sont définies comme Take profit (ordre limite) et Stop loss, pour contrôler les retraits et réaliser des bénéfices.
La stratégie combine plusieurs indicateurs pour déterminer les conditions de variation et de surachat / survente, avec une logique claire de prise de profit d'inversion.
Plus précisément, les avantages comprennent:
Le MACD, en tant qu'oscillateur de momentum pondéré par volume, évite l'analyse technique simpliste;
Les conditions de volume augmentent la conviction d'entrée;
L'indicateur RSI aide à détecter les éventuels retours en arrière;
Le stop loss et le take profit contrôlent les retraits excessifs et bloquent certains bénéfices.
Malgré la combinaison d'indicateurs visant à améliorer le taux de réussite, toutes les stratégies comportent des risques.
la probabilité de faux signaux, tels que la poursuite après un renversement initial;
Les paramètres inadéquats de stop loss et de prise de bénéfices entraînent des prélèvements trop importants et l'incapacité de verrouiller les bénéfices;
L'ajustement des paramètres tels que les longueurs de MA, les périodes RSI, les ratios de profit peuvent nécessiter une optimisation supplémentaire.
Ces risques peuvent être réduits par une optimisation supplémentaire.
Il reste encore des possibilités d'optimisation, principalement:
Tester différentes combinaisons de paramètres MA pour obtenir les meilleurs résultats;
Tester les périodes de repérage du RSI pour trouver le juge optimal de surachat/survente;
Optimiser les ratios de prise de bénéfices et d'arrêt de perte pour équilibrer les prélèvements et la capture des bénéfices;
Introduire des modèles d'apprentissage automatique, tirer parti de plus de données pour réduire les erreurs de jugement et améliorer le taux de réussite.
Ces méthodes peuvent être mises en œuvre par des backtests plus systématiques. À mesure que les espaces de paramètres s'élargissent et que les tailles d'échantillons augmentent, le taux de réussite de la stratégie et la rentabilité s'amélioreront également.
Cette stratégie combine le MACD, le RSI et l'analyse du volume pour déterminer les caractéristiques de la fourchette du marché, en établissant des entrées dans les zones de renversement pour capturer les mouvements de retracement.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("3 1 Oscillator Profile Flagging", shorttitle="3 1 Oscillator Profile Flagging", overlay=false) signalBiasValue = input(title="Signal Bias", defval=0.26) macdBiasValue = input(title="MACD Bias", defval=0.7) shortLookBack = input( title="Short LookBack", defval=3) longLookBack = input( title="Long LookBack", defval=6) takeProfit = input( title="Take Profit", defval=2) stopLoss = input( title="Stop Loss", defval=0.7) fast_ma = ta.sma(close, 3) slow_ma = ta.sma(close, 10) macd = fast_ma - slow_ma signal = ta.sma(macd, 16) hline(0, "Zero Line", color = color.black) buyVolume = volume*((close-low)/(high-low)) sellVolume = volume*((high-close)/(high-low)) buyVolSlope = buyVolume - buyVolume[1] sellVolSlope = sellVolume - sellVolume[1] signalSlope = ( signal - signal[1] ) macdSlope = ( macd - macd[1] ) plot(macd, color=color.blue, title="Total Volume") plot(signal, color=color.orange, title="Total Volume") plot(macdSlope, color=color.green, title="MACD Slope") plot(signalSlope, color=color.red, title="Signal Slope") intrabarRange = high - low rsi = ta.rsi(close, 14) rsiSlope = rsi - rsi[1] plot(rsiSlope, color=color.black, title="RSI Slope") getRSISlopeChange(lookBack) => j = 0 for i = 0 to lookBack if ( rsi[i] - rsi[ i + 1 ] ) > -5 j += 1 j getBuyerVolBias(lookBack) => j = 0 for i = 1 to lookBack if buyVolume[i] > sellVolume[i] j += 1 j getSellerVolBias(lookBack) => j = 0 for i = 1 to lookBack if sellVolume[i] > buyVolume[i] j += 1 j getVolBias(lookBack) => float b = 0.0 float s = 0.0 for i = 1 to lookBack b += buyVolume[i] s += sellVolume[i] b > s getSignalBuyerBias(lookBack) => j = 0 for i = 1 to lookBack if signal[i] > signalBiasValue j += 1 j getSignalSellerBias(lookBack) => j = 0 for i = 1 to lookBack if signal[i] < ( 0.0 - signalBiasValue ) j += 1 j getSignalNoBias(lookBack) => j = 0 for i = 1 to lookBack if signal[i] < signalBiasValue and signal[i] > ( 0.0 - signalBiasValue ) j += 1 j getPriceRising(lookBack) => j = 0 for i = 1 to lookBack if close[i] > close[i + 1] j += 1 j getPriceFalling(lookBack) => j = 0 for i = 1 to lookBack if close[i] < close[i + 1] j += 1 j getRangeNarrowing(lookBack) => j = 0 for i = 1 to lookBack if intrabarRange[i] < intrabarRange[i + 1] j+= 1 j getRangeBroadening(lookBack) => j = 0 for i = 1 to lookBack if intrabarRange[i] > intrabarRange[i + 1] j+= 1 j bool isNegativeSignalReversal = signalSlope < 0.0 and signalSlope[1] > 0.0 bool isNegativeMacdReversal = macdSlope < 0.0 and macdSlope[1] > 0.0 bool isPositiveSignalReversal = signalSlope > 0.0 and signalSlope[1] < 0.0 bool isPositiveMacdReversal = macdSlope > 0.0 and macdSlope[1] < 0.0 bool hasBearInversion = signalSlope > 0.0 and macdSlope < 0.0 bool hasBullInversion = signalSlope < 0.0 and macdSlope > 0.0 bool hasSignalBias = math.abs(signal) >= signalBiasValue bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0.0 - signalBiasValue ) bool hasSignalBuyerBias = hasSignalBias and signal > 0.0 bool hasSignalSellerBias = hasSignalBias and signal < 0.0 bool hasPositiveMACDBias = macd > macdBiasValue bool hasNegativeMACDBias = macd < ( 0.0 - macdBiasValue ) bool hasBullAntiPattern = ta.crossunder(macd, signal) bool hasBearAntiPattern = ta.crossover(macd, signal) bool hasSignificantBuyerVolBias = buyVolume > ( sellVolume * 1.5 ) bool hasSignificantSellerVolBias = sellVolume > ( buyVolume * 1.5 ) // 202.30 Profit 55.29% 5m if ( ( getVolBias(longLookBack) == false ) and rsi <= 41 and math.abs(rsi - rsi[shortLookBack]) > 1 and hasNoSignalBias and rsiSlope > 1.5 and close > open) strategy.entry("5C1", strategy.long, qty=1) strategy.exit("TPS", "5C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss) // 171.70 Profit 50.22% 5m if ( getVolBias(longLookBack) == true and rsi > 45 and rsi < 55 and macdSlope > 0 and signalSlope > 0) strategy.entry("5C2", strategy.long, qty=1) strategy.exit("TPS", "5C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss) // 309.50 Profit 30.8% 5m 2 tp .7 sl 289 trades if ( macd > macdBiasValue and macdSlope > 0) strategy.entry("5P1", strategy.short, qty=1) strategy.exit("TPS", "5P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)