Stratégie de rupture de momentum basée sur la moyenne mobile et le jugement du cycle


Date de création: 2024-01-23 14:51:27 Dernière modification: 2024-01-23 14:51:27
Copier: 2 Nombre de clics: 615
1
Suivre
1617
Abonnés

Stratégie de rupture de momentum basée sur la moyenne mobile et le jugement du cycle

Aperçu

Cette stratégie permet de déterminer la phase cyclique dans laquelle se trouve le marché en calculant la moyenne des EMA de différents cycles, puis de faire des jugements de rupture en combinaison avec l’ATR, ce qui permet de suivre la tendance avec une forte probabilité.

Principe de stratégie

  1. Calculer la ligne de 5 jours, la ligne de 20 jours, la ligne de 40 jours et les 3 lignes moyennes EMA
  2. En comparant la relation entre la taille des trois moyennes, on peut juger que le marché est actuellement dans l’une des six phases cycliques différentes.
    • La ligne de 5 jours > la ligne de 20 jours > la ligne de 40 jours est le 1er cycle
    • La ligne 20 > la ligne 5 > la ligne 40 est le deuxième cycle. ……
  3. Calculer l’indicateur ATR après détermination de la période et définir le multiplicateur ATR comme critère de rupture
  4. Un signal d’achat est généré lorsque le prix est supérieur au trailing stop ATR du BAR précédent
  5. Un signal de vente est généré lorsque le prix dépasse le trailing stop ATR d’un BAR
  6. Ce type de jugement combiné permet d’obtenir des transactions de suivi de tendance à forte probabilité.

Avantages stratégiques

  1. Le jugement cyclique augmente la fiabilité du signal

En jugant la relation de grandeur entre les différentes moyennes EMA, on peut effectivement juger de la phase cyclique dans laquelle se trouve actuellement le marché et éviter de produire des signaux erronés dans des cycles inappropriés.

  1. ATR a détecté une fausse transmission

L’indicateur ATR est un bon indicateur de la volatilité du marché. Il définit un certain nombre de ATR comme critère de rupture et permet de filtrer les faux signaux de rupture.

  1. Les jugements de portefeuille créent des opportunités de négociation à forte probabilité

La combinaison organique du jugement cyclique et du jugement de rupture de l’ATR augmente considérablement la probabilité de générer un signal, ce qui augmente également la probabilité de rentabilité de la transaction.

Risque stratégique

  1. Les paramètres sont plus difficiles à optimiser

Les stratégies comportant de multiples paramètres sont difficiles à optimiser et une mauvaise configuration des paramètres peut affecter les performances de la stratégie.

  1. Il y a un certain retard

Dans un marché en évolution rapide, la moyenne EMA et l’indicateur ATR sont en retard, ce qui peut générer de faux signaux ou des opportunités manquées.

  1. Il faut un arrêt strict.

Il est difficile pour un indicateur technique d’éviter complètement la génération de signaux erronés, et il est nécessaire de définir des stop-loss stricts pour contrôler les risques.

Orientation de l’optimisation de la stratégie

  1. Paramètres à optimiser

Optimiser les paramètres avec des données historiques plus riches pour trouver la meilleure combinaison de paramètres.

  1. Améliorer la résilience

Il est envisageable d’ajuster automatiquement les paramètres ATR en fonction de la volatilité du marché, afin d’améliorer la capacité d’adaptation de la stratégie.

  1. Combiné avec d’autres indicateurs

Il est possible d’essayer d’améliorer la qualité du signal en combinant avec d’autres indicateurs tels que le taux d’oscillation et le trafic.

Résumer

La stratégie a des avantages tels que des cycles de jugement, le filtrage de faux signaux et l’amélioration de la qualité des signaux. Cependant, il existe également des risques tels que la difficulté d’optimisation des paramètres et le retard.

Code source de la stratégie
/*backtest
start: 2024-01-15 00:00:00
end: 2024-01-22 00:00:00
period: 15m
basePeriod: 5m
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/
// © kgynofomo

//@version=5
strategy(title="[Salavi] | Andy Advance Pro Strategy",overlay = true)

ema_short = ta.ema(close,5)
ema_middle = ta.ema(close,20)
ema_long = ta.ema(close,40)

cycle_1 = ema_short>ema_middle and ema_middle>ema_long
cycle_2 = ema_middle>ema_short and ema_short>ema_long
cycle_3 = ema_middle>ema_long and ema_long>ema_short
cycle_4 = ema_long>ema_middle and ema_middle>ema_short
cycle_5 = ema_long>ema_short and ema_short>ema_middle
cycle_6 = ema_short>ema_long and ema_long>ema_middle

bull_cycle = cycle_1 or cycle_2 or cycle_3
bear_cycle = cycle_4 or cycle_5 or cycle_6
// label.new("cycle_1")
// bgcolor(color=cycle_1?color.rgb(82, 255, 148, 60):na)
// bgcolor(color=cycle_2?color.rgb(82, 255, 148, 70):na)
// bgcolor(color=cycle_3?color.rgb(82, 255, 148, 80):na)
// bgcolor(color=cycle_4?color.rgb(255, 82, 82, 80):na)
// bgcolor(color=cycle_5?color.rgb(255, 82, 82, 70):na)
// bgcolor(color=cycle_6?color.rgb(255, 82, 82, 60):na)

// Inputs
a = input(2, title='Key Vaule. \'This changes the sensitivity\'')
c = input(7, title='ATR Period')
h = false

xATR = ta.atr(c)
nLoss = a * xATR

src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close

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

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

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)

buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below

barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop




atr = ta.atr(14)
atr_length = input.int(25)
atr_rsi = ta.rsi(atr,atr_length)
atr_valid = atr_rsi>50

long_condition =  buy and bull_cycle and atr_valid
short_condition =  sell and bear_cycle and atr_valid

Exit_long_condition = short_condition
Exit_short_condition = long_condition

if long_condition
    strategy.entry("Andy Buy",strategy.long, limit=close,comment="Andy Buy Here")

if Exit_long_condition
    strategy.close("Andy Buy",comment="Andy Buy Out")
    // strategy.entry("Andy fandan Short",strategy.short, limit=close,comment="Andy 翻單 short Here")
    // strategy.close("Andy fandan Buy",comment="Andy short Out")


if short_condition
    strategy.entry("Andy Short",strategy.short, limit=close,comment="Andy short Here")


// strategy.exit("STR","Long",stop=longstoploss)
if Exit_short_condition
    strategy.close("Andy Short",comment="Andy short Out")
    // strategy.entry("Andy fandan Buy",strategy.long, limit=close,comment="Andy 翻單 Buy Here")
    // strategy.close("Andy fandan Short",comment="Andy Buy Out")




inLongTrade = strategy.position_size > 0
inLongTradecolor = #58D68D
notInTrade = strategy.position_size == 0
inShortTrade = strategy.position_size < 0

// bgcolor(color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)
plotshape(close!=0,location = location.bottom,color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)


plotshape(long_condition, title='Buy', text='Andy Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(short_condition, title='Sell', text='Andy Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)


//atr > close *0.01* parameter