Stratégie de rupture à double EMA englobant

Auteur:ChaoZhang est là., Date: 2023-12-07 15:50:13 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie détermine la direction longue/courte en jugant de la direction des moyennes mobiles exponentielles (EMA). Elle va longue lorsqu'il y a un schéma d'engloutissement haussier et un volume de négociation élargi. Elle ferme la position lorsque la direction des EMA est inversée ou qu'un schéma d'engloutissement baissier se produit.

La logique de la stratégie

  1. Utilisez deux EMA avec des paramètres différents pour déterminer la tendance du marché. Si la courte EMA est supérieure à la longue EMA, c'est un marché haussier, sinon c'est un marché baissier.

  2. Lorsque le marché est haussier, si un schéma d'engorgement haussier apparaît et que le volume des transactions est 1,2 fois supérieur à la barre précédente, un signal long est déclenché.

  3. Lorsque la tendance du marché est inversée, c'est-à-dire que l'EMA courte traverse l'EMA longue, cela montre une dynamique de faiblesse des taureaux et la position existante doit être fermée.

Analyse des avantages

  1. L'utilisation de doubles EMA pour déterminer la structure du marché permet de juger avec précision du statut taureau/ours.

  2. Le schéma d'engorgement montre une augmentation soudaine de l'élan d'un côté, ce qui peut capturer les tendances majeures.

  3. Il a un mécanisme de stop loss. En ne fixant pas le prix de stop loss mais en utilisant l'inversion de la structure du marché pour arrêter la perte, le glissement inutile peut être réduit.

Analyse des risques

  1. Les EMA doubles peuvent également juger incorrectement la structure du marché, ce qui fait que les tendances sont manquées ou que les périodes EMA peuvent être ajustées.

  2. Les modèles d'engloutissement peuvent être induits en erreur par des marchés variés.

  3. Le fait de ne pas avoir de prix de stop loss peut entraîner des pertes plus importantes.

Direction de l'optimisation

  1. Plus d'indicateurs comme le MACD, A/D peuvent être utilisés pour déterminer long/short.

  2. Le montant de la valeur ajoutée est calculé à partir de la valeur ajoutée de la valeur ajoutée.

  3. Optimiser les périodes EMA en fonction des caractéristiques des échanges de symboles.

Conclusion

La logique de la stratégie est claire et facile à comprendre, utilisant des EMA pour déterminer la structure et les modèles d'engorgement pour capturer la rupture.


/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=5
// # ========================================================================= #
// #                   |   STRATEGY  |
// # ========================================================================= #
strategy(
  title                           = "fpemehd Strategy001",
  shorttitle                      = "f_001",
  overlay                         =  true,
  default_qty_type                =  strategy.percent_of_equity, 
  default_qty_value               =  100, 
  initial_capital                 =  10000000, 
  currency                        =  currency.USD, 
  slippage                        =  0, 
  commission_type                 =  strategy.commission.cash_per_order, 
  commission_value                =  0.01, 
  process_orders_on_close         =  true)
// # ========================================================================= #
// #                   |   STRATEGY  |
// # ========================================================================= #


// Inputs
I_start_date = input (defval = timestamp("20 Jan 1990 00:00 +0900"))
I_finish_date = input(defval = timestamp("20 Dec 2030 00:00 +0900"))

I_short_ema = input.int(defval = 15 , title = "Short EMA", minval = 1 , maxval = 300 , step = 1)
I_long_ema = input.int(defval = 30 , title = "Long EMA", minval = 1 , maxval = 300 , step = 1)

I_body = input.float(defval = 1 , title = "Size of Body", minval = 1 , maxval = 5 , step = 0.1)

time_cond = true

// Calculate Engulfing Candles
C_uptrend = false
C_downtrend = false
C_ema_short = ta.ema(source = close, length = I_short_ema) 
C_ema_long = ta.ema(source = close, length = I_long_ema) 
C_uptrend := close > C_ema_short and C_ema_short > C_ema_long
C_downtrend := close < C_ema_short and C_ema_short < C_ema_long

C_pre_body = math.abs(open[1]-close[1])
C_pre_body_ratio = (math.abs(open[1]-close[1])) / (math.abs(high[1]-low[1])) * 100

C_now_body = math.abs(open-close)
C_now_body_ratio = (math.abs(open-close)) / (math.abs(high-low)) * 100

C_bullish_engulfing = (open[1] > close[1] and open <= close) and (low < low[1] and high > high[1])
C_bearish_engulfing = (open[1] < close[1] and open >= close) and (low < low[1] and high > high[1])
C_avoid_doge = (C_pre_body_ratio > I_body and C_now_body_ratio > I_body) ? true : false
C_volume_filter = volume > volume[1] * 1.2

// Signals
long_signal = C_uptrend and C_bullish_engulfing and C_avoid_doge and C_volume_filter
close_signal = C_downtrend or C_bearish_engulfing 


if long_signal and time_cond
    strategy.entry(id = "Long", direction = strategy.long)

if close_signal and time_cond
    strategy.close(id = "Long")



Plus de