Basé sur une stratégie de suivi d'inversion de la moyenne mobile double


Date de création: 2024-02-20 17:08:43 Dernière modification: 2024-02-20 17:08:43
Copier: 1 Nombre de clics: 527
1
Suivre
1617
Abonnés

Basé sur une stratégie de suivi d’inversion de la moyenne mobile double

Aperçu

La stratégie de suivi des inversions de la bi-médianité est une stratégie de trading quantitative qui utilise la croisée des moyennes mobiles comme signal de trading. Cette stratégie combine la différence de la moyenne lente et rapide de l’indicateur MACD et sa ligne de signal, ainsi que le jugement du pourcentage de la quantité de transactions, pour former un signal de trading afin de capturer les occasions de revirement du marché.

Principe de stratégie

Cette stratégie consiste à déterminer la relation entre les lignes rapides et les lignes lentes, en générant des signaux de commutation lorsque la ligne rapide traverse la ligne lente, et des signaux de commutation lorsque la ligne lente traverse la ligne rapide. En outre, elle permet de déterminer l’état de commutation du marché en combinant l’état de commutation des valeurs MACD, la relation entre les valeurs de commutation et les lignes de commutation, l’état de commutation des volumes de transaction, etc.

Plus précisément, la stratégie détermine la taille et la direction de la différence MACD, la croisée de la différence et de la ligne de signal, la correspondance ou l’inverse de la différence et de la direction de la ligne de signal, etc. Ces situations reflètent les caractéristiques de rebond des subidabubbles du marché. En outre, la distribution plus volumineuse du volume de transaction peut également servir d’indicateur de jugement auxiliaire.

Une stratégie de négociation est générée lorsque l’on juge que la différence et la ligne de signal indiquent un renversement du marché et que le volume de transactions correspond à la confirmation du renversement du marché.

Avantages stratégiques

  • La théorie des reptiles est solidement établie en utilisant des croisements biuniversaux pour déterminer les points de retournement du marché.
  • La combinaison de jugements de trafic pour éviter les fausses percées
  • L’indicateur MACD détermine la tendance de la sous-section et identifie les caractéristiques de rebond
  • Paramètres Une flexibilité élevée dans le contrôle partiel des stratégies

Les risques et les solutions

  • Le problème du whipsaw est causé par une intersection de deux lignes égales

    • Ajustez le paramètre de la ligne moyenne et augmentez Threshold
  • Le nombre de transactions n’a pas complètement filtré la fausse percée

    • Combinaison d’indicateurs secondaires tels que OBV pour déterminer la tendance réelle des volumes d’affaires
  • Impossible de juger de la profondeur et de l’intensité de la modification de la sous-section

    • Augmentation des arrêts et évaluation des supports importants

Direction d’optimisation

  • Utiliser des modèles d’apprentissage automatique plutôt que des règles de jugement

    • Améliorer la rigidité des stratégies et réduire la suradaptation
  • Augmentation des techniques de prévention des dommages

    • La répartition des bénéfices et la réduction des risques
  • Les résultats de l’analyse de l’humeur et de l’analyse de l’image

    • Amélioration de l’exactitude des modèles
  • Transplantation vers d’autres variétés et marchés

    • Tester l’évolutivité des stratégies

Résumer

Les stratégies de suivi du renversement de la double ligne de parité prennent en compte l’indicateur de la ligne de parité, l’indicateur MACD et l’indicateur de la quantité de transaction, en capturant leur signal de renversement et en choisissant le point de renversement approprié pour établir une position. Il y a encore beaucoup de place pour l’optimisation de la stratégie, qui peut être renforcée par la stabilité et le rendement de la stratégie grâce à l’apprentissage automatique et au contrôle du vent.

Code source de la stratégie
/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("3 10 Oscillator Profile Flagging", shorttitle="3 10 Oscillator Profile Flagging", overlay=true)

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)

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(macdSlope, color=color.red, title="Total Volume")
//plot(signalSlope, color=color.green, 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)
strategy.exit("TPS", "Short1", limit=strategy.position_avg_price - 0.75, stop=strategy.position_avg_price + 0.5)

// 32.53 Profit 47.91%
if ( getPriceFalling(shortLookBack) and (getVolBias(shortLookBack) == false) and signalSlope < 0 and hasSignalSellerBias)
    strategy.entry("Long1", strategy.long)
strategy.exit("TPS", "Long1", limit=strategy.position_avg_price + 0.75, stop=strategy.position_avg_price - 0.5)