Les ressources ont été chargées... Je charge...

stratégie d'inversion de profil basée sur le croisement zéro du MACD sur plusieurs délais

Auteur:ChaoZhang est là., Date: 2024-02-18 15h27 et 21h
Les étiquettes:

img

Résumé

La stratégie de renversement du profil des oscillateurs 3 10.0 identifie les renversements de prix potentiels en calculant les indicateurs MACD sur différentes périodes.

La logique de la stratégie

La stratégie calcule les moyennes mobiles SMA de 3 et 10 périodes pour construire des lignes rapides et lentes et l'indicateur MACD et la ligne de signal. Lorsque la ligne rapide et la ligne de signal traversent la ligne zéro vers le haut ou vers le bas, elle indique que le prix a atteint un point critique et qu'un renversement peut se produire. En outre, elle intègre également le jugement de la pression du volume, l'indice RSI, etc. pour identifier la fiabilité des signaux de renversement.

Plus précisément, la stratégie évalue les renversements de prix à travers:

  1. Le passage à zéro du MACD indique que le prix atteint un point critique
  2. La pression du volume détermine le sentiment haussier ou baissier
  3. L'indice RSI avec changement de pente MACD détermine la force des signaux d'inversion
  4. Les lignes rapides et les lignes de signalisation qui se croisent en sens inverse forment un signal de renversement

Lorsque la fiabilité du signal d'inversion est élevée, la stratégie adopte un stop loss suivant la tendance pour poursuivre un profit plus élevé.

Analyse des avantages

La stratégie présente les avantages suivants:

  1. Plusieurs indicateurs rendent les signaux d'inversion plus fiables
  2. Le passage à zéro du MACD détermine avec précision les points de renversement
  3. RSI et volume aident le jugement pour améliorer la fiabilité
  4. L'amélioration de l'efficacité des capitaux résultant de l'arrêt des pertes en fonction de la tendance

Analyse des risques

Il y a aussi des risques:

  1. Probabilité élevée de faux signaux du MACD et d'être pris au piège
  2. Une probabilité élevée d'obtention d'un stop loss lors de tendances alternatives
  3. Un mauvais réglage des paramètres peut augmenter la fréquence et le coût des transactions

Les risques peuvent être réduits par:

  1. Permettre un stop loss plus large pour éviter d'être pris au piège
  2. Optimiser les paramètres pour réduire la fréquence des transactions
  3. Considérez uniquement une entrée près des niveaux de support/résistance clés

Directions d'optimisation

La stratégie peut être encore optimisée par:

  1. Ajouter des algorithmes d'apprentissage automatique pour aider à la fiabilité du signal d'inversion
  2. Ajouter des indices de sentiment pour déterminer la mentalité taureau/ours
  3. Combiner les principaux niveaux de support/résistance pour améliorer la précision d'entrée
  4. Optimiser le stop loss pour une plus grande efficacité du capital
  5. Tester des combinaisons optimales de paramètres pour réduire la fréquence de négociation

Conclusion

La stratégie d'inversion MACD multi-temporelle de passage à zéro prend en compte de manière exhaustive les indicateurs de prix, de volume et de volatilité pour déterminer le moment de l'entrée grâce à une évaluation multi-indicateurs. Elle définit un stop-loss opportun sur une rentabilité suffisante. Elle peut obtenir de bons rendements pendant les marchés d'inversion.


/*backtest
start: 2023-02-11 00:00:00
end: 2024-02-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("3 10.0 Oscillator Profile Flagging", shorttitle="3 10.0 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.0)
takeProfit = input( title="Take Profit", defval=0.8)
stopLoss = input( title="Stop Loss", defval=0.75)

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
rsi = ta.rsi(close, 14)
rsiSlope = rsi - rsi[1]

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 )

// 393.60 Profit 52.26% 15m
if ( hasBullInversion and rsiSlope > 1.5 and volume > 300000.0 )
    strategy.entry("15C1", strategy.long, qty=10.0)
strategy.exit("TPS", "15C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 356.10 Profit 51,45% 15m
if ( getVolBias(shortLookBack) == false and rsiSlope > 3.0 and signalSlope > 0)
    strategy.entry("15C2", strategy.long, qty=10.0)
strategy.exit("TPS", "15C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 124 Profit 52% 15m
if ( rsiSlope < -11.25 and macdSlope < 0.0 and signalSlope < 0.0)
    strategy.entry("15P1", strategy.short, qty=10.0)
strategy.exit("TPS", "15P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

// 455.40 Profit 49% 15m
if ( math.abs(math.abs(macd) - math.abs(signal)) < .1 and buyVolume > sellVolume and hasBullInversion)
    strategy.entry("15P2", strategy.short, qty=10.0)
strategy.exit("TPS", "15P2", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

Plus de