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.
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.
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é.
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.
L'utilisation de doubles EMA pour déterminer la structure du marché permet de juger avec précision du statut taureau/ours.
Le schéma d'engorgement montre une augmentation soudaine de l'élan d'un côté, ce qui peut capturer les tendances majeures.
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.
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.
Les modèles d'engloutissement peuvent être induits en erreur par des marchés variés.
Le fait de ne pas avoir de prix de stop loss peut entraîner des pertes plus importantes.
Plus d'indicateurs comme le MACD, A/D peuvent être utilisés pour déterminer long/short.
Le montant de la valeur ajoutée est calculé à partir de la valeur ajoutée de la valeur ajoutée.
Optimiser les périodes EMA en fonction des caractéristiques des échanges de symboles.
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")