Stratégie d'inversion du MACD à zéro sur plusieurs périodes


Date de création: 2024-02-18 15:27:21 Dernière modification: 2024-02-18 15:27:21
Copier: 0 Nombre de clics: 548
1
Suivre
1617
Abonnés

Stratégie d’inversion du MACD à zéro sur plusieurs périodes

Aperçu

La stratégie d’inversion croisée de zéro axe MACD à périodes multiples permet de calculer les indicateurs MACD à différentes périodes, d’identifier les signaux de revers possible des prix, d’adopter une méthode de suivi des tendances et de suivre les pertes, et de rechercher une plus grande efficacité d’utilisation des fonds.

Principe de stratégie

La stratégie calcule simultanément les moyennes mobiles SMA à 3 et 10 cycles, construit une ligne rapide et lente, puis calcule l’indicateur MACD et la ligne de signal. Lorsque la ligne rapide et la ligne de signal se croisent vers le haut ou vers le bas sur l’axe zéro, cela indique que le prix a atteint un point critique et qu’il est possible de faire un revirement.

Plus précisément, la stratégie détermine les inversions de prix de la manière suivante:

  1. Le croisement de l’axe zéro du MACD indique que le prix a atteint un point critique
  2. La pression sur les ventes et les achats pour juger de l’excédent de places
  3. L’indicateur RSI est plus pessimiste, combiné à une variation de la courbe MACD, pour juger de l’intensité du signal de revers
  4. Les lignes rapides et les lignes de signal se croisent en sens inverse, formant un signal de retour

Lorsque la fiabilité du signal de revers est élevée, la stratégie utilise la méthode de suivi de la tendance pour arrêter les pertes et rechercher un gain plus élevé.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. Les signaux de retournement sont plus fiables grâce à des jugements multiconducteurs
  2. Le point de retournement est déterminé à l’aide d’une croix zéro-axe MACD, avec une plus grande précision
  3. Indicateur RSI et jugement auxiliaire de volume de transactions, haute fiabilité
  4. Suivre les tendances pour arrêter les pertes et améliorer l’efficacité de l’investissement

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. Les indices MACD sont plus susceptibles d’émettre de faux signaux et de se faire piéger
  2. Le stop loss est plus susceptible d’être dépassé lors d’un échange multi-espaces.
  3. Une mauvaise configuration des paramètres peut entraîner des transactions trop fréquentes, des coûts de transaction accrus et des pertes de points de glissement

Le risque peut être réduit par:

  1. Laissez la marge de freinage appropriée pour éviter d’être piégé.
  2. Optimiser les paramètres et réduire la fréquence des transactions
  3. Considérez l’entrée seulement à proximité des points de résistance de soutien critiques

Direction d’optimisation

La stratégie peut être optimisée de différentes manières:

  1. Ajout d’algorithmes d’apprentissage automatique pour aider à déterminer la fiabilité des signaux de retour
  2. Augmentation des indicateurs émotionnels pour juger de la psychopathie
  3. Combiné avec des points de résistance de support critique, améliore la précision d’entrée
  4. Optimiser les méthodes de prévention des pertes et améliorer encore l’efficacité de l’utilisation des fonds
  5. Test de la combinaison optimale de paramètres pour réduire la fréquence des transactions

Résumer

La stratégie d’inversion croisée de zéro axe MACD à période pluriannuelle, qui prend en compte des informations de plusieurs dimensions telles que le prix, le volume de transactions et les indicateurs de fluctuation, détermine le moment de l’inversion, arrête les pertes en temps opportun après une profitabilité suffisante, et obtient de meilleurs rendements dans des conditions d’inversion. La stratégie est susceptible d’être améliorée par l’apprentissage automatique et l’optimisation des positions clés, etc., afin de réduire la fréquence et le risque de négociation et d’augmenter l’espace de profit.

Code source de la stratégie
/*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)