Cette stratégie génère des signaux d'achat et de vente basés sur la croix d'or et la croix de mort des moyennes mobiles. Plus précisément, elle utilise une moyenne mobile exponentielle de 5 jours (EMA) et une moyenne mobile exponentielle double de 34 jours (DEMA). Lorsque l'EMA à court terme de 5 jours franchit le sommet de la DEMA à long terme de 34 jours, un signal d'achat est généré. Lorsque l'EMA à court terme de 5 jours franchit le sommet de la DEMA à long terme de 34 jours, un signal de vente est généré.
Cette stratégie combine à la fois les facteurs de croisement des moyennes mobiles et des moyennes mobiles pour une performance stable. Les moyennes mobiles en tant qu'indicateur de suivi des tendances peuvent identifier efficacement les tendances du marché; La combinaison EMA et DEMA peut efficacement lisser les données de prix pour générer des signaux de trading; Les croisements entre les moyennes mobiles à court et à long terme peuvent fournir des signaux de trading précoces lorsque des changements de tendance majeurs se produisent.
Ces risques peuvent être réduits en ajustant les longueurs de moyenne mobile, en optimisant les heures de négociation et en définissant un stop loss raisonnable.
Cette stratégie génère des signaux de trading grâce à des doubles croisements de moyennes mobiles, combinés à des techniques de suivi des tendances et de lissage des données. C'est une stratégie de suivi des tendances simple et pratique.
/*backtest start: 2023-11-01 00:00:00 end: 2023-11-30 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] args: [["v_input_1",false]] */ //@version=2 strategy(title='[STRATEGY][RS]MicuRobert EMA cross V2', shorttitle='S', overlay=true) USE_TRADESESSION = input(title='Use Trading Session?', type=bool, defval=true) USE_TRAILINGSTOP = input(title='Use Trailing Stop?', type=bool, defval=true) trade_session = input(title='Trade Session:', defval='0400-1500', confirm=false) istradingsession = not USE_TRADESESSION ? false : not na(time('1', trade_session)) bgcolor(istradingsession?gray:na) trade_size = input(title='Trade Size:', type=float, defval=1) tp = input(title='Take profit in pips:', type=float, defval=55.0) * (syminfo.mintick*10) sl = input(title='Stop loss in pips:', type=float, defval=22.0) * (syminfo.mintick*10) ma_length00 = input(title='EMA length:', defval=5) ma_length01 = input(title='DEMA length:', defval=34) price = input(title='Price source:', defval=open) // ||--- NO LAG EMA, Credit LazyBear: ---|| f_LB_zlema(_src, _length)=> _ema1=ema(_src, _length) _ema2=ema(_ema1, _length) _d=_ema1-_ema2 _zlema=_ema1+_d // ||-------------------------------------|| ma00 = f_LB_zlema(price, ma_length00) ma01 = f_LB_zlema(price, ma_length01) plot(title='M0', series=ma00, color=black) plot(title='M1', series=ma01, color=black) isnewbuy = change(strategy.position_size)>0 and change(strategy.opentrades)>0 isnewsel = change(strategy.position_size)<0 and change(strategy.opentrades)>0 buy_entry_price = isnewbuy ? price : buy_entry_price[1] sel_entry_price = isnewsel ? price : sel_entry_price[1] plot(title='BE', series=buy_entry_price, style=circles, color=strategy.position_size <= 0 ? na : aqua) plot(title='SE', series=sel_entry_price, style=circles, color=strategy.position_size >= 0 ? na : aqua) buy_appex = na(buy_appex[1]) ? price : isnewbuy ? high : high >= buy_appex[1] ? high : buy_appex[1] sel_appex = na(sel_appex[1]) ? price : isnewsel ? low : low <= sel_appex[1] ? low : sel_appex[1] plot(title='BA', series=buy_appex, style=circles, color=strategy.position_size <= 0 ? na : teal) plot(title='SA', series=sel_appex, style=circles, color=strategy.position_size >= 0 ? na : teal) buy_ts = buy_appex - sl sel_ts = sel_appex + sl plot(title='Bts', series=buy_ts, style=circles, color=strategy.position_size <= 0 ? na : red) plot(title='Sts', series=sel_ts, style=circles, color=strategy.position_size >= 0 ? na : red) buy_cond1 = crossover(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true) buy_cond0 = crossover(price, ma00) and ma00 > ma01 and (USE_TRADESESSION ? istradingsession : true) buy_entry = buy_cond1 or buy_cond0 buy_close = (not USE_TRAILINGSTOP ? low <= buy_entry_price - sl: low <= buy_ts) or high>=buy_entry_price+tp//high>=last_traded_price + tp or low<=last_traded_price - sl //high >= hh or sel_cond1 = crossunder(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true) sel_cond0 = crossunder(price, ma00) and ma00 < ma01 and (USE_TRADESESSION ? istradingsession : true) sel_entry = sel_cond1 or sel_cond0 sel_close = (not USE_TRAILINGSTOP ? high >= sel_entry_price + sl : high >= sel_ts) or low<=sel_entry_price-tp//low<=last_traded_price - tp or high>=last_traded_price + sl //low <= ll or strategy.entry('buy', long=strategy.long, qty=trade_size, comment='buy', when=buy_entry) strategy.close('buy', when=buy_close) strategy.entry('sell', long=strategy.short, qty=trade_size, comment='sell', when=sel_entry) strategy.close('sell', when=sel_close)