Basé sur une analyse de stratégie à double EMA


Date de création: 2024-02-28 18:07:59 Dernière modification: 2024-02-28 18:07:59
Copier: 1 Nombre de clics: 550
1
Suivre
1617
Abonnés

Basé sur une analyse de stratégie à double EMA

Aperçu

La stratégie de double EMA est une stratégie de suivi de la tendance qui permet de déterminer la direction de la tendance des prix en calculant les EMA de différents cycles. La stratégie est simple et pratique et s’applique aux marchés très tendance.

Principe de stratégie

La stratégie est principalement basée sur deux indicateurs d’EMA, l’un d’une courte période d’EMA de 9 jours et l’autre d’une plus longue période d’EMA de 21 jours. Leur croisement est un signal de stockage et de repos.

Lorsque le cours d’une EMA à court terme est considéré comme entrant dans une tendance à la hausse, la stratégie place des ordres supplémentaires pour suivre la hausse des prix. Lorsque le cours d’une EMA à court terme est considéré comme entrant dans une tendance à la baisse, la stratégie place des ordres blancs pour suivre la baisse des prix.

L’EMA est capable de filtrer efficacement le bruit des données de prix et d’identifier les principales tendances de prix. Par conséquent, la stratégie utilise l’indicateur double EMA comme base pour la construction de positions pacifiques, dans l’espoir de pouvoir capturer des cycles de tendances de prix plus longs.

Avantages stratégiques

Cette stratégie présente les avantages suivants:

  1. Les idées stratégiques sont simples, claires, faciles à comprendre et à mettre en œuvre.
  2. Il est capable d’identifier efficacement les tendances des prix et de suivre les tendances en temps opportun.
  3. Les indicateurs EMA sont utilisés pour filtrer le bruit et éviter les perturbations causées par les fluctuations de prix à court terme.
  4. Les paramètres EMA peuvent être configurés pour ajuster la sensibilité de la stratégie.

Risque stratégique

Cette stratégie comporte aussi des risques:

  1. En cas de renversement de tendance, la traînée de l’indicateur EMA peut entraîner une augmentation des pertes.
  2. Le paramètre EMA est mal réglé et augmente le taux de faux signaux.
  3. Cette stratégie est plus adaptée aux marchés en forte tendance et est vulnérable à la liquidation.

Optimisation de la stratégie

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Combiné à d’autres indicateurs, il permet de juger de l’inversion de la tendance et de réduire les pertes. Par exemple, le MACD, le KDJ, etc.
  2. L’ajout de la logique de stop-loss, une bonne stratégie de stop-loss peut réduire considérablement le maximum de retrait de la stratégie.
  3. Optimiser les paramètres de l’EMA pour les rendre plus adaptés aux caractéristiques des prix des différentes variétés.
  4. L’optimisation automatique des paramètres de l’EMA est réalisée en combinaison avec des algorithmes d’apprentissage automatique.

Résumer

La stratégie double EMA est une stratégie de suivi de tendance très pratique dans l’ensemble. Elle est simple à utiliser, facile à comprendre et offre d’excellentes performances dans les marchés à forte tendance.

Code source de la stratégie
/*backtest
start: 2023-02-21 00:00:00
end: 2024-02-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// This can only draw so many lines. Use bar replay to go back further
strategy("Strategy Lines", shorttitle="Strategy Lines", overlay=true, max_lines_count=500)

//###########################################################################################################################################
// Replace your strategy here
//###########################################################################################################################################

shortEMA = ta.ema(close, input(9, title="Short EMA Length"))
longEMA = ta.ema(close, input(21, title="Long EMA Length"))

// Entry conditions for long and short positions
longCondition = ta.crossover(shortEMA, longEMA)
shortCondition = ta.crossunder(shortEMA, longEMA)

//###########################################################################################################################################
// Strategy Lines
//###########################################################################################################################################

var timeLow = bar_index
var line li = na
var openLPrice = 0.0000
var openSPrice = 0.0000

LongWColor = input.color(color.rgb(0,255,0,0),"Long Win Color", group="Strategy Lines")
LongLColor = input.color(color.rgb(0,0,255,0),"Long Loss Color", group="Strategy Lines")
ShortWColor = input.color(color.rgb(255,255,0,0),"Short Win Color", group="Strategy Lines")
ShortLColor = input.color(color.rgb(255,0,0,0),"Short Loss Color", group="Strategy Lines")
WinFontColor = input.color(color.rgb(0,0,0,0),"Win Font Color", group="Strategy Lines")
LossFontColor = input.color(color.rgb(255,255,255,0),"Loss Font Color", group="Strategy Lines")
LinesShowLabel = input(false,"Show Labels?",group = "Strategy Lines")

// // Start new line when we go long
// if strategy.position_size >0
//     line.delete(li)
//     li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close>openLPrice?LongWColor:LongLColor)

// // Start new line when we go short
// if strategy.position_size <0
//     line.delete(li)
//     li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close<openSPrice?ShortWColor:ShortLColor)

// //Delete Lines if we don't have a position open
// if strategy.position_size ==0
//     li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=color.rgb(0,0,0,100))
//     line.delete(li)

if LinesShowLabel
    // Short Label
    if strategy.position_size>=0 and strategy.position_size[1] <0
        label.new(
             timeLow, na, 
             text=str.tostring((openSPrice-close[1])/(syminfo.mintick*10)), 
             color=close[1]<openSPrice?ShortWColor:ShortLColor, 
             textcolor=close[1]<openSPrice?WinFontColor:LossFontColor,
             size=size.small, 
             style=label.style_label_down, yloc=yloc.abovebar)
    // Long Label
    if strategy.position_size<=0 and strategy.position_size[1] >0
        label.new(
             timeLow, na,
             text=str.tostring((close[1]-openLPrice)/(syminfo.mintick*10)), 
             color=close[1]>openLPrice?LongWColor:LongLColor, 
             textcolor=close[1]>openLPrice?WinFontColor:LossFontColor,
             size=size.small, 
             style=label.style_label_down, yloc=yloc.abovebar)

// Open long position and draw line
if (longCondition)
    //strategy.entry("Long", strategy.long)
    // timeLow := bar_index
    // li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close>openLPrice?LongWColor:LongLColor)
    openLPrice := close

// Open short position and draw line
if (shortCondition)
    //strategy.entry("Short", strategy.short)
    // timeLow := bar_index
    // li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close<openSPrice?ShortWColor:ShortLColor)
    openSPrice := close

//###########################################################################################################################################
// Strategy Execution (Replace this as well)
//###########################################################################################################################################

if (longCondition)
    strategy.entry("Long", strategy.long)

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