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

Traverser la tendance de la moyenne mobile des prix selon la stratégie

Auteur:ChaoZhang est là., Date: 2024-01-26 15:18:29 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie génère des signaux d'achat et de vente basés sur le croisement du prix avec une moyenne mobile. Elle fournit divers types de moyennes mobiles et un paramètre de tolérance pour filtrer les fausses ruptures.

La logique de la stratégie

La stratégie calcule une moyenne mobile de longueur N en fonction du prix de clôture. Les types de moyenne mobile typiques comprennent la moyenne mobile simple (SMA), la moyenne mobile exponentielle (EMA), la moyenne mobile pondérée (WMA) etc. Ensuite, un niveau de tolérance est défini, par exemple 5%, et une bande supérieure (1,05 fois la moyenne mobile) et une bande inférieure (0,95 fois la moyenne mobile) sont calculées. Lorsque le prix de clôture dépasse la bande supérieure, un signal d'achat est généré. Lorsque le prix de clôture dépasse la bande inférieure, un signal de vente est généré. Cela aide à filtrer certaines fausses ruptures.

Les avantages

  • Suivre efficacement les tendances des prix en utilisant les caractéristiques suivantes de la moyenne mobile
  • Fournit différents types de moyennes mobiles pour des combinaisons flexibles
  • Le paramètre de tolérance aide à filtrer les fausses ruptures et à éviter les transactions inutiles.
  • Ne peut aller que court, adapté à la capture des tendances à la baisse

Les risques

  • Les moyennes mobiles ont un effet de retard, peuvent manquer les points tournants des prix
  • Ne convient pas aux environnements de marché à plage
  • Des paramètres de tolérance incorrects peuvent filtrer les signaux valides
  • Le court terme comporte des risques plus élevés, nécessite des opérations prudentes

Directions d'optimisation

  • Optimiser les paramètres de type et de longueur de la moyenne mobile
  • Testez différents paramètres de tolérance
  • Ajouter d'autres indicateurs aux signaux filtrés
  • Utiliser des stratégies de dimensionnement des positions

Conclusion

Dans l'ensemble, il s'agit d'une stratégie de suivi de tendance typique. Il utilise la relation entre le prix et la moyenne mobile pour déterminer les tendances, avec une certaine souplesse. Grâce à l'optimisation des paramètres et à un bon filtrage du signal, il peut devenir une stratégie quantitative décente. Mais contrôler les risques à la baisse lors du shorting est important pour éviter des pertes excessives.


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © RafaelPiccolo

//@version=4
strategy("Price X MA Cross", overlay=true)

typ = input("HMA", "MA Type", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len = input(100, minval=1, title="Length")
src = input(close, "Source", type=input.source)
tol = input(0, minval=0, title="Tolerance (%)", type=input.float)
shortOnly = input(false, "Short only")

tema(src, len)=>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    ema3 = ema(ema2, len)
    return = 3 * (ema1 - ema2) + ema3

getMAPoint(type, len, src)=>
    return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len)

ma = getMAPoint(typ, len, src)
upperTol = ma * (1 + tol/100)
lowerTol = ma * (1 - tol/100)

longCondition = crossover(close, upperTol)
shortCondition = crossunder(close, lowerTol)

if (shortCondition)
    strategy.entry("Short", strategy.short)

if (longCondition)
    if (shortOnly)
        strategy.close("Short")
    else
        strategy.entry("Long", strategy.long)

plot(ma, "Moving Average", close > ma ? color.green : color.red, linewidth = 2)
t1 = plot(tol > 0 ? upperTol : na, transp = 70)
t2 = plot(tol > 0 ? lowerTol : na, transp = 70)
fill(t1, t2, color = tol > 0 ? color.blue : na)


Plus de