Stratégie de trading de volatilité spécifique à l'inversion de tendance sur plusieurs périodes


Date de création: 2024-02-26 17:15:54 Dernière modification: 2024-02-26 17:15:54
Copier: 0 Nombre de clics: 669
1
Suivre
1617
Abonnés

Stratégie de trading de volatilité spécifique à l’inversion de tendance sur plusieurs périodes

Aperçu

Cette stratégie a conçu une stratégie de négociation de retournement de tendance en calculant la différence de pression de vente et de vente des volumes de transactions dans différentes fenêtres de temps, en combinaison avec les signaux de bullish de l’indicateur MACD. Cette stratégie utilise principalement l’anomalie des volumes de transactions comme signal pour déterminer le retournement de tendance, et est vérifiée par le signal bullish du MACD, afin de capturer les opportunités de retournement.

Principe de stratégie

La logique centrale de cette stratégie est basée sur les points suivants:

  1. Calculer le volume des transactions dans les différentes fenêtres de temps (longues et courtes fenêtres) pour calculer les pressions d’achat et les pressions de vente. Déterminer la direction de la tendance future par la différence de pressions d’achat et de vente.

  2. L’utilisation de la différence du MACD (la différence entre la ligne MACD et la ligne de signal) pour déterminer l’état de la pluralité. Le signal de pression d’achat et de vente combiné de la quantité d’échange est utilisé pour vérifier le renversement de la tendance.

  3. Lorsque la dynamique de pression des achats et des transactions augmente et que la ligne MACD est traversée, on pense qu’il peut y avoir un renversement de tendance de zéro à plus.

  4. Lorsque la pression de rupture est amplifiée et que la ligne MACD est traversée, on pense qu’il peut y avoir un renversement de la tendance par un renversement de plus.

  5. Le risque est contrôlé par une stratégie de stop-loss.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. Le point de basculement de la tendance peut être déterminé par la différence de volume d’échange entre les points de basculement et les points de basculement, et le rôle de la quantité d’échange peut être ignoré en se fondant uniquement sur des indicateurs de jugement de tendance tels que la ligne uniforme.

  2. L’inversion de la validation du signal polyvalent associée à l’indicateur MACD peut améliorer l’exactitude du jugement.

  3. L’utilisation d’une fenêtre de temps plus courte pour déterminer la direction de déplacement du trafic rend le signal de renversement plus fiable.

  4. Le taux de profit moyen des stratégies anti-transformation est plus élevé.

Analyse des risques

La stratégie présente également les risques suivants:

  1. Le volume de transaction et le signal MACD peuvent émettre des signaux erronés, ce qui entraîne un risque d’erreur de jugement inversée.

  2. Le risque est qu’après le signal de reprise, la tendance pourrait s’ajuster à nouveau et ne pas pouvoir être inversée immédiatement.

  3. Le risque d’augmentation des pertes peut être dû à une mauvaise définition du point d’arrêt.

  4. Le taux de retrait est élevé et ne convient pas aux investisseurs qui recherchent des gains stables.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Optimiser l’intervalle entre les fenêtres de temps long et court pour rendre les jugements inverse plus précis.

  2. Optimiser les paramètres MACD pour améliorer la précision des jugements de la pluralité des espaces.

  3. Optimiser les algorithmes de stop-loss pour réduire le risque de pertes.

  4. L’augmentation des indicateurs de jugement passif et le taux de réussite de l’inversion.

  5. Ajout d’un module de contrôle de position et de gestion de fonds.

Résumer

Cette stratégie est généralement une stratégie de trading typique de l’algorithme de conversion de tendance inverse. Elle repose principalement sur l’amplification de l’exotérisation de la transaction et la vérification du signal MACD, pour juger et capturer les chances de revirement du prix de plusieurs têtes vers le sommet ou de la tête vide vers le sommet.

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