Stratégie de négociation par canal à moyenne mobile double

Auteur:ChaoZhang est là., Date: 2024-02-29 14:54:25 Je vous en prie.
Les étiquettes:

img

Résumé

La double moyenne mobile est une stratégie de trading de tendance qui suit les croisements entre les moyennes mobiles doubles. La stratégie utilise l'EMA et le WMA comme indicateurs de signaux de trading. Lorsque l'EMA à court terme dépasse la WMA à long terme, la stratégie va long. Lorsque l'EMA à court terme dépasse la WMA à long terme, la stratégie va court.

La logique de la stratégie

Les signaux de négociation de cette stratégie proviennent de la croix dorée et de la croix de la mort entre l'EMA à court terme de 10 périodes et l'EMA à long terme de 20 périodes. Lorsque l'EMA à court terme franchit au-dessus de l'EMA à long terme, cela indique que le marché est en train d'inverser vers le haut, donc aller long. Lorsque l'EMA à court terme franchit au-dessous de l'EMA à long terme, cela indique que le marché est en train d'inverser vers le bas, donc aller court.

Après avoir déterminé la direction du trading, la stratégie fixe le stop loss au-dessous ou au-dessus du prix d'entrée d'une période ATR, avec deux profits de prise - le premier profit de prise est fixé à 1 ATR au-dessus ou au-dessous du prix d'entrée, et le second profit de prise est fixé à 2 ATR au-dessus ou au-dessous du prix d'entrée. Lorsque le premier profit de prise est déclenché, 50% de la position sera fermée. La position restante continuera à courir vers le deuxième profit de prise ou avec un stop loss de trailing.

La logique de stop loss de suivi - elle sera activée une fois que le prix le plus élevé ou le prix le plus bas aura atteint le premier niveau de profit.

Avantages

La stratégie utilise la double fonction de réduction du bruit de lissage des moyennes mobiles pour filtrer efficacement les fluctuations aléatoires sur le marché et identifier les signaux de tendance à moyen et long terme, évitant ainsi d'être pris dans des fouets.

Les risques

Les moyennes mobiles elles-mêmes présentent un décalage plus important, ce qui présente le risque de manquer de signaux.

Le paramètre de stop loss est une composante importante de la stratégie. Si le stop loss est trop petit, il est susceptible d'être touché par le bruit du marché. Si le stop loss est trop grand, il peut ne pas contrôler efficacement les risques.

En outre, lorsque le marché fluctue violemment, l'arrêt de trailing peut ne pas fonctionner très bien en protection.

Directions d'optimisation

  1. Testez les EMA et les WMA avec des paramètres différents pour trouver la combinaison optimale de paramètres.

  2. Le montant de l'obligation de dépôt est calculé à partir de l'indice de dépôt.

  3. Testez les effets de l'arrêt partiel et de l'arrêt complet.

  4. Mettre en place d'autres indicateurs de filtrage des signaux pour aider l'EMA et la WMA afin d'améliorer la qualité des signaux.

Résumé

En général, la stratégie de trading de canal de moyenne mobile double est relativement robuste et fonctionne bien sur les marchés en tendance. En optimisant les paramètres, les mécanismes de stop loss et en améliorant la qualité du signal, la performance de trading réelle de cette stratégie peut être encore améliorée.


/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 00:00:00
period: 3h
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/
// © gpadihar

//@version=4
strategy("SL1 Pips after TP1 (MA)", commission_type=strategy.commission.cash_per_order, overlay=true)

// Strategy
Buy  = input(true)
Sell = input(true)

// Date Range
start_year    = input(title='Start year'   ,defval=2020)
start_month   = input(title='Start month'  ,defval=1)
start_day     = input(title='Start day'    ,defval=1)
start_hour    = input(title='Start hour'   ,defval=0)
start_minute  = input(title='Start minute' ,defval=0)
end_time      = input(title='set end time?',defval=false)
end_year      = input(title='end year'     ,defval=3019)
end_month     = input(title='end month'    ,defval=12)
end_day       = input(title='end day'      ,defval=31)
end_hour      = input(title='end hour'     ,defval=23)
end_minute    = input(title='end minute'   ,defval=59)

// MA
ema_period = input(title='EMA period',defval=10)
wma_period = input(title='WMA period',defval=20)
ema        = ema(close,ema_period)
wma        = wma(close,wma_period)

// Entry Condition
buy =
 crossover(ema,wma) and
 nz(strategy.position_size) == 0 and Buy and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)
 
sell =
 crossunder(ema,wma) and
 nz(strategy.position_size) == 0 and Sell and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)

// Pips
pip = input(20)*10*syminfo.mintick

// Trading parameters //
var bool  LS  = na
var bool  SS  = na
var float EP  = na
var float TVL = na
var float TVS = na
var float TSL = na
var float TSS = na
var float TP1 = na
var float TP2 = na
var float SL1 = na
var float SL2 = na

if buy or sell and strategy.position_size == 0
    EP  := close
    SL1 := EP - pip     * (sell?-1:1)
    SL2 := EP - pip     * (sell?-1:1)
    TP1 := EP + pip     * (sell?-1:1)
    TP2 := EP + pip * 2 * (sell?-1:1) 
   
// current trade direction    
LS := buy  or strategy.position_size > 0
SS := sell or strategy.position_size < 0

// adjust trade parameters and trailing stop calculations
TVL := max(TP1,open) - pip[1]
TVS := min(TP1,open) + pip[1]
TSL := open[1] > TSL[1] ? max(TVL,TSL[1]):TVL 
TSS := open[1] < TSS[1] ? min(TVS,TSS[1]):TVS

if LS and high > TP1
    if open <= TP1
        SL2:=min(EP,TSL)
    
if SS and low < TP1
    if open >= TP1
        SL2:=max(EP,TSS)

// Closing conditions
close_long  = LS and open < SL2
close_short = SS and open > SL2

// Buy
strategy.entry("buy"  , strategy.long, when=buy and not SS)
strategy.exit ("exit1", from_entry="buy", stop=SL1, limit=TP1, qty_percent=50)
strategy.exit ("exit2", from_entry="buy", stop=SL2, limit=TP2)

// Sell
strategy.entry("sell" , strategy.short, when=sell and not LS)
strategy.exit ("exit3", from_entry="sell", stop=SL1, limit=TP1, qty_percent=50)
strategy.exit ("exit4", from_entry="sell", stop=SL2, limit=TP2)

// Plots
a=plot(strategy.position_size >  0 ? SL1 : na, color=#dc143c, style=plot.style_linebr)
b=plot(strategy.position_size <  0 ? SL1 : na, color=#dc143c, style=plot.style_linebr) 
c=plot(strategy.position_size >  0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) 
d=plot(strategy.position_size <  0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) 
e=plot(strategy.position_size >  0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) 
f=plot(strategy.position_size <  0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) 
g=plot(strategy.position_size >= 0 ? na  : EP, color=#ffffff, style=plot.style_linebr) 
h=plot(strategy.position_size <= 0 ? na  : EP, color=#ffffff, style=plot.style_linebr) 

plot(ema,title="ema",color=#fff176)
plot(wma,title="wma",color=#00ced1)



Plus de