Stratégie de suivi de la moyenne mobile de rupture de canal


Date de création: 2024-01-15 12:25:26 Dernière modification: 2024-01-15 12:25:26
Copier: 0 Nombre de clics: 639
1
Suivre
1617
Abonnés

Stratégie de suivi de la moyenne mobile de rupture de canal

Aperçu

Cette stratégie est une stratégie de rupture basée sur la chaîne de prix, combinant un indicateur de la ligne de parité et un suivi des arrêts / arrêts pour l’entrée et la sortie. Elle utilise la ligne de parité pour construire une chaîne de prix à bas et à haut prix, pour entrer en plus / vide lorsque le prix franchit la chaîne et pour contrôler le risque avec un arrêt fixe ou un arrêt de trailing.

Principe de stratégie

Cette stratégie consiste à calculer une moyenne de la chaîne de prix en calculant une moyenne de la chaîne de prix élevée et basse. Plus précisément, il s’agit de calculer une moyenne de la chaîne de prix élevée et basse de longueur 10 pour former la trajectoire supérieure et inférieure de la chaîne.

Après l’entrée, la stratégie utilise un stop fixe ou un trailing stop pour quitter la position. Le stop de trailing comprend deux paramètres: un stop fixe et un offset d’activation. Lorsque le prix atteint le décalage d’activation, le stop est trail suivi du prix.

Cette stratégie combine un filtrage temporel avec un retournement des données uniquement à une date historique spécifiée, permettant de tester la performance de différentes phases du marché.

Analyse des avantages

La stratégie utilise des chaînes de prix et des arrêts de suivi de tendance pour capturer la direction des tendances des lignes longues et moyennes. Comparée à une simple stratégie de ligne moyenne mobile, elle réduit les transactions inefficaces causées par les fluctuations de prix.

Dans l’ensemble, la stratégie a une logique claire, utilise moins d’indicateurs et de paramètres, est facile à retracer, convient au trading de tendances à long et moyen terme et peut être rentable dans des conditions de forte hausse.

Analyse des risques

Cette stratégie est susceptible d’être piégée et de ne pas être rentable de façon durable dans des situations de choc. De plus, dans des situations extrêmes, le prix peut franchir directement le seuil de résistance et entraîner des pertes importantes.

La configuration des paramètres est subjective, les paramètres doivent être ajustés à différents stades du marché. Les paramètres de stop-loss et de décalage d’activation sont fixes et ne peuvent pas être ajustés en fonction de la volatilité du marché.

Direction d’optimisation

Il est possible d’envisager de filtrer les signaux d’entrée en bourse en combinant d’autres indicateurs, tels que le volume de transactions, les bandes de Brin, etc., pour éviter d’être piégé. Ou d’utiliser un stop loss dynamique, en fonction de l’ATR ou de l’ampleur des fluctuations des prix.

Les règles d’exit peuvent être optimisées pour un arrêt mobile ou une sortie Chandelier. Des sorties partielles peuvent également être envisagées lorsque le prix rentre dans le Channel. L’optimisation des règles de filtrage d’entrée et de sortie peut considérablement améliorer la stabilité de la stratégie.

Résumer

Cette stratégie globale est une stratégie quantifiée basée sur la gestion des chaînes de prix, du suivi des tendances et des arrêts/arrêts. Elle a une structure logique claire, une structure de paramètres simple, facile à comprendre et à retracer, adaptée à l’apprentissage des transactions quantifiées.

Code source de la stratégie
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-21 23:59:59
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Generalized SSL Backtest w/ TSSL", shorttitle="GSSL Backtest", overlay=true )
// Generalized SSL:
//  This is the very first time the SSL indicator, whose acronym I ignore, is on Tradingview. 
//  It is based on moving averages of the highs and lows. 
//  Similar channel indicators can be found, whereas 
//  this one implements the persistency inside the channel, which is rather tricky.
//  The green line is the base line which decides entries and exits, possibly with trailing stops.
//  With respect to the original version, here one can play with different moving averages.
//  The default settings are (10,SMA)
//
// Vitelot/Yanez/Vts March 2019

lb = input(10, title="Lb", minval=1)
maType = input( defval="SMA", title="MA Type", options=["SMA","EMA","HMA","McG","WMA","Tenkan"])

fixedSL = input(title="SL Activation", defval=300)
trailSL = input(title="SL Trigger", defval=1)
fixedTP = input(title="TP Activation", defval=150)
trailTP = input(title="TP Trigger", defval=1)

FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 6, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 19, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
startTimeOk()  => true // create function "within window of time" if statement true
// QUANDL:BCHAIN/ETRVU is USD-denominated daily transaction value on BTC blockchain
// QUANDL:BCHAIN/MKTCP is USD-denominated Bitcoin marketcap

hma(sig, n) => // Hull moving average definition
    wma( 2*wma(sig,round(n/2))-wma(sig,n), round(sqrt(n)))

mcg(sig,length) => // Mc Ginley MA definition
    mg = 0.0
    mg := na(mg[1]) ? ema(sig, length) : mg[1] + (sig - mg[1]) / (length * pow(sig/mg[1], 4))

tenkan(sig,len) =>
    0.5*(highest(sig,len)+lowest(sig,len))

ma(t,sig,len) =>
    sss=na
    if t =="SMA"
        sss := sma(sig,len)
    if t == "EMA"
        sss := ema(sig,len)
    if t == "HMA"
        sss := hma(sig,len)
    if t == "McG" // Mc Ginley
        sss := mcg(sig,len)
    if t == "Tenkan"
        sss := tenkan(sig,len)
    if t == "WMA"
        sss := wma(sig,len)
    sss

base(mah, mal) =>
    bbb = na
    inChannel = close<mah and close>mal
    belowChannel = close<mah and close<mal
    bbb := inChannel? bbb[1]: belowChannel? -1: 1
    uuu = bbb==1? mal: mah
    ddd = bbb==1? mah: mal
    [uuu, ddd]

maH = ma(maType, high, lb)
maL = ma(maType, low, lb)

[up, dn] = base(maH,maL)

plot(up, title="High MA", color=lime, linewidth=3)
plot(dn, title="Low MA", color=orange, linewidth=3)

long = crossover(dn,up)
short = crossover(up,dn)

// === STRATEGY - LONG POSITION EXECUTION ===
strategy.entry("Long", strategy.long, when= long and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) 
strategy.exit("Exit", when= short)
// === STRATEGY - SHORT POSITION EXECUTION ===
strategy.entry("Short", strategy.short, when= short and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)
strategy.exit("Exit", when= long)