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

STC MA ATR Stratégie intégrée de négociation de tendance

Auteur:ChaoZhang est là., Date: 2023-10-17 14h34 et 10 min
Les étiquettes:

img

Résumé

Cette stratégie combine les indicateurs techniques STC, Motion Average MA et Average True Range ATR pour juger des tendances et mettre en œuvre des opérations de suivi des tendances relativement stables.

Principe de stratégie

  1. L'indicateur STC juge l'inversion de tendance. Il utilise la ligne rapide moins la ligne lente, puis traite l'assouplissement secondaire, formant des signaux de tendance cohérents. Le signal d'achat arrive lorsque l'indicateur traverse au-dessus de l'axe 0 et le signal de vente en dessous de l'axe 0.

  2. La moyenne mobile MA juge la direction de la tendance. Lorsque le prix des actions dépasse MA, il signale une tendance haussière, donnant un signal de position longue. Lorsque le prix dépasse MA, il signale une tendance baissière, donnant un signal de position courte.

  3. L'indicateur ATR définit le stop loss et le take profit. ATR peut ajuster dynamiquement le stop loss et les points de profit en fonction de la volatilité du marché. Et ATR agit comme un signal pour la direction du trading lui-même, en hausse et en baisse.

  4. La stratégie prend les signaux STC comme le calendrier principal pour l'entrée, utilise MA comme jugement de tendance auxiliaire, et ATR pour le stop loss et le take profit.

Analyse des avantages

  1. La stratégie combine plusieurs indicateurs pour juger des tendances et des points d'inversion, améliorant ainsi la précision des signaux de trading.

  2. STC peut capturer les signaux d'inversion et éviter d'être pris au piège dans les tendances.

  3. L'ATR définit un stop loss dynamique et prend des bénéfices en fonction de la volatilité du marché, évitant ainsi d'énormes pertes.

  4. La combinaison de plusieurs indicateurs forme une forte capacité de suivi des tendances.

Analyse des risques

  1. Le STC a un décalage de temps, ce qui peut manquer le moment optimal pour l'inversion des prix.

  2. La MA a tendance à retarder les fluctuations de prix violentes, ce qui peut générer de mauvais signaux.

  3. Le multiplicateur ATR doit être assoupli ou temporairement désactivé pendant les grandes tendances.

  4. Les paramètres doivent être ajustés pour éviter un stop loss inutile.

Directions d'optimisation

  1. Ajustez les paramètres STC pour trouver des combinaisons plus rapides pour l'inversion.

  2. Optimiser le paramètre de la période MA pour un meilleur suivi des tendances.

  3. Les impacts d'essais de multiples ATR différents.

  4. Essayez de remplacer STC par d'autres indicateurs pour une meilleure correspondance.

  5. Introduire des algorithmes d'apprentissage automatique pour une optimisation automatique à plusieurs paramètres.

  6. Considérons les grandes tendances du cycle et distinguons les différentes étapes.

Résumé

La stratégie STC MA ATR combine 3 indicateurs pour capturer les points d'inversion de tendance pour un trading de suivi de tendance stable. Les combinaisons d'indicateurs filtrent les faux signaux et contrôlent les risques avec stop loss/take profit. Elle a une forte robustesse et stabilité. Des améliorations supplémentaires peuvent être obtenues grâce à l'optimisation des paramètres et à l'introduction d'algorithmes.


/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 4h
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/
// © Romedius

//@version=5
strategy("My Strategy", overlay=true, margin_long=100, margin_short=100)

// STC
EEEEEE=input(12,"Length",group="STC")
BBBB=input(26,"FastLength",group="STC")
BBBBB=input(50,"SlowLength",group="STC")

AAAA(BBB, BBBB, BBBBB) =>
    fastMA = ta.ema(BBB, BBBB)
    slowMA = ta.ema(BBB, BBBBB)
    AAAA = fastMA - slowMA
    AAAA
    
AAAAA(EEEEEE, BBBB, BBBBB) => 
    //AAA=input(0.5)
    var AAA = 0.5
    var CCCCC = 0.0
    var DDD = 0.0
    var DDDDDD = 0.0
    var EEEEE = 0.0
    BBBBBB = AAAA(close,BBBB,BBBBB)     
    CCC = ta.lowest(BBBBBB, EEEEEE)
    CCCC = ta.highest(BBBBBB, EEEEEE) - CCC    
    CCCCC := (CCCC > 0 ? ((BBBBBB - CCC) / CCCC) * 100 : nz(CCCCC[1])) 
    DDD := (na(DDD[1]) ? CCCCC : DDD[1] + (AAA * (CCCCC - DDD[1]))) 
    DDDD = ta.lowest(DDD, EEEEEE) 
    DDDDD = ta.highest(DDD, EEEEEE) - DDDD     
    DDDDDD := (DDDDD > 0 ? ((DDD - DDDD) / DDDDD) * 100 : nz(DDDDDD[1])) 
    EEEEE := (na(EEEEE[1]) ? DDDDDD : EEEEE[1] + (AAA * (DDDDDD - EEEEE[1])))
    EEEEE

mAAAAA = AAAAA(EEEEEE,BBBB,BBBBB)
stc = mAAAAA > mAAAAA[1] ? true : false
stc_sig = stc == true and stc[1] == false ? 1 : stc == false and stc[1] == true ? -1 : 0
stc_long = stc_sig == 1
stc_short = stc_sig == -1
// STC end

// ATR stops
nATRPeriod = input(5,group="ATR Stops")
nATRMultip = input(3.5,group="ATR Stops")

xATR = ta.atr(nATRPeriod)
nLoss = nATRMultip * xATR

xATRTrailingStop = 0.0
xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) : close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) : close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss

pos = 0
pos := close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0) ? 1 : close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)

atr_sig = pos == -1 ? false : true
// ATR stops end

// ma
ma_len = input(200, title="MA Length", group="Moving Average")
ma = ta.sma(close, 200)
ma_sig = close < ma ? false : true
// ma end

// strategy entries
tp_mult = input(2, title="Take Profit ATR Multiplier", group="Strategy")
sl_mult = input(1, title="Stop Loss ATR Multiplier", group="Strategy")
early_stop = input(true, title="Close position when ATR changes color")

atr_stop = if close < xATRTrailingStop
    close - (close - xATRTrailingStop) * sl_mult
else
    close + (xATRTrailingStop - close) * sl_mult

longCondition = atr_sig == true and stc_sig == 1 and ma_sig == true
shortCondition = atr_sig == false and stc_sig == -1 and ma_sig == false

if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", "Long", limit=close + xATR * tp_mult, stop=atr_stop)
else if atr_sig == false and early_stop
    strategy.close("Long")

if (shortCondition)
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", "Short", limit=close - xATR * tp_mult, stop=atr_stop)
else if atr_sig == true and early_stop
    strategy.close("Short")
    
// plot stuff
atr_color = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
plot(atr_stop, title="ATR Stop", color=atr_color)

ma_color = ma_sig ? color.green : color.red
plot(ma, title="Moving Average", color=ma_color)

stc_color = stc_long ? color.green : color.red
plotshape(stc_long, style=shape.triangleup, color=stc_color, title="STC Long Signal", size=size.tiny)
plotshape(stc_short, style=shape.triangledown, color=stc_color, title="STC Short Signal", size=size.tiny)
// plot stuff end

Plus de