Cette stratégie calcule les différences de pression d'achat et de vente dans le volume des transactions à travers différentes fenêtres de temps, combinées avec les signaux MACD, pour concevoir une stratégie de trading d'inversion de tendance.
La logique de base de cette stratégie repose sur les points suivants:
Calculer la pression d'achat et la pression de vente du volume des transactions dans différentes fenêtres de temps (fenêtres courtes et longues).
Utilisez la valeur de différence du MACD (la différence entre la ligne MACD et la ligne de signal) pour déterminer l'état long et court. Combinez avec les signaux de pression d'achat et de vente dans le volume de transaction pour vérifier les inversions de tendance.
Lorsque l'anomalie de la pression d'achat du volume des transactions s'amplifie et que la ligne MACD est franchie, il est déterminé que le marché peut avoir un renversement de tendance de la vente à l'achat.
Lorsque l'anomalie de la pression de vente du volume des transactions s'amplifie et que la ligne MACD est franchie, il est déterminé que le marché peut avoir un renversement de tendance d'achat à vente.
Après avoir saisi le signal d'inversion, utilisez des stratégies de prise de profit et de stop-loss pour contrôler les risques.
Les avantages de cette stratégie sont les suivants:
L'utilisation des différences longues/courtes dans le volume des transactions pour déterminer les points d'inversion de tendance évite de se fier uniquement à des indicateurs de détermination des tendances tels que les moyennes mobiles tout en négligeant le rôle du volume des transactions.
La combinaison des signaux MACD pour vérifier les renversements peut améliorer la précision du jugement.
L'utilisation de fenêtres de temps longues et courtes pour déterminer les anomalies dans le volume des transactions rend les signaux d'inversion plus fiables.
Les stratégies d'inversion ont tendance à avoir des taux de profit moyens plus élevés.
Les risques de cette stratégie comprennent:
Le volume des transactions et les signaux MACD peuvent donner de faux signaux, ce qui conduit à des jugements erronés sur les renversements.
Après le déclenchement des signaux d'inversion, le marché peut s'ajuster à nouveau et ne pas inverser directement immédiatement.
L'imposition incorrecte des bénéfices et des arrêts de perte peut entraîner une augmentation des pertes.
Des retraits plus élevés, peu adaptés aux investisseurs qui recherchent des rendements stables.
L'optimisation de cette stratégie comprend:
Optimiser les fenêtres de temps longues et courtes pour rendre les jugements d'inversion plus précis.
Optimiser les paramètres MACD pour améliorer la précision long/short.
Optimiser les algorithmes de prise de profit et de stop loss pour réduire les risques de perte.
Ajouter plus d'indicateurs de jugement des anomalies pour améliorer le taux de réussite de l'inversion.
Ajouter des modules de dimensionnement des positions et de gestion de l'argent.
En résumé, il s'agit d'une stratégie de trading algorithmique de renversement de tendance typique. Elle repose principalement sur des amplifications des anomalies du volume des transactions et des vérifications du signal MACD pour déterminer et capturer les renversements de prix des positions longues aux positions courtes ou vice versa.
/*backtest start: 2024-01-26 00:00:00 end: 2024-02-25 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("3 10 Oscillator Profile Flagging", shorttitle="3 10 Oscillator Profile Flagging", overlay=false) signalBiasValue = input(title="Signal Bias", defval=0.26) macdBiasValue = input(title="MACD Bias", defval=0.8) shortLookBack = input( title="Short LookBack", defval=3) longLookBack = input( title="Long LookBack", defval=10) takeProfit = input( title="Take Profit", defval=0.75) stopLoss = input( title="Stop Loss", defval=0.5) 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") intrabarRange = high - low getLookBackSlope(lookBack) => signal - signal[lookBack] 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 float s = 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 - signalBiasValue ) j += 1 j getSignalNoBias(lookBack) => j = 0 for i = 1 to lookBack if signal[i] < signalBiasValue and signal[i] > ( 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 and signalSlope[1] > 0 bool isNegativeMacdReversal = macdSlope < 0 and macdSlope[1] > 0 bool isPositiveSignalReversal = signalSlope > 0 and signalSlope[1] < 0 bool isPositiveMacdReversal = macdSlope > 0 and macdSlope[1] < 0 bool hasBearInversion = signalSlope > 0 and macdSlope < 0 bool hasBullInversion = signalSlope < 0 and macdSlope > 0 bool hasSignalBias = math.abs(signal) >= signalBiasValue bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0 - signalBiasValue ) bool hasSignalBuyerBias = hasSignalBias and signal > 0 bool hasSignalSellerBias = hasSignalBias and signal < 0 bool hasPositiveMACDBias = macd > macdBiasValue bool hasNegativeMACDBias = macd < ( 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 ) // 7.48 Profit 52.5% if ( hasSignificantBuyerVolBias and getPriceRising(shortLookBack) == shortLookBack and getBuyerVolBias(shortLookBack) == shortLookBack and hasPositiveMACDBias and hasBullInversion) strategy.entry("Short1", strategy.short, qty=10) strategy.exit("TPS", "Short1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss) // 32.53 Profit 47.91% if ( getPriceFalling(shortLookBack) and (getVolBias(shortLookBack) == false) and signalSlope < 0 and hasSignalSellerBias) strategy.entry("Long1", strategy.long, qty=10) strategy.exit("TPS", "Long1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)