Strategie für den Ausbruch der doppelten EMA

Schriftsteller:ChaoZhang, Datum: 2023-12-07 15:50:13
Tags:

img

Übersicht

Diese Strategie bestimmt die Long/Short-Richtung, indem sie die Richtung der exponentiellen gleitenden Durchschnitte (EMA) beurteilt. Sie geht lang, wenn es ein bullisches Verschwemmungsmuster und ein erweitertes Handelsvolumen gibt. Sie schließt die Position, wenn die Richtung der EMA umgekehrt ist oder ein bärisches Verschwemmungsmuster auftritt.

Strategie Logik

  1. Verwenden Sie zwei EMAs mit unterschiedlichen Parametern, um den Markttrend zu bestimmen.

  2. Wenn der Markt bullisch ist, wenn ein bullisches Schluckmuster erscheint und das Handelsvolumen 1,2 Mal größer ist als die vorherige Bar, wird ein langes Signal ausgelöst.

  3. Wenn der Markttrend umgekehrt ist, d.h. die kurze EMA unter der langen EMA kreuzt, zeigt dies eine schwächende Dynamik der Bullen und die bestehende Position sollte geschlossen werden.

Analyse der Vorteile

  1. Die Verwendung von doppelten EMAs zur Ermittlung der Marktstruktur kann einen exakten Bull/Bear-Status beurteilen.

  2. Das Engulfing-Muster zeigt plötzliche Anstieg der Dynamik auf der einen Seite, was wichtige Trends erfassen kann.

  3. Es hat einen Stop-Loss-Mechanismus. Indem man den Stop-Loss-Preis nicht festlegt, sondern die Marktstruktur umkehrt, um den Verlust zu stoppen, kann unnötiger Rutsch reduziert werden.

Risikoanalyse

  1. Die EMA-Perioden können angepasst werden.

  2. Es kann jedoch auch sein, daß die Verbraucher in der Lage sind, sich mit der Entwicklung des Marktes zu befassen.

  3. Wenn der Stop-Loss-Preis nicht vorhanden ist, kann dies zu größeren Verlusten führen.

Optimierungsrichtung

  1. Mehr Indikatoren wie MACD, A/D können verwendet werden, um Long/Short zu bestimmen.

  2. Der Wert des Vermögenswertes wird nach Maßgabe des Bedarfs berechnet.

  3. Optimierung der EMA-Perioden auf der Grundlage der Handelsmerkmale der Symbole.

Schlussfolgerung

Die Logik der Strategie ist klar und leicht verständlich und verwendet EMAs, um Strukturen zu bestimmen und Verwüstungsmuster zu erfassen, um Ausbrüche zu erfassen.


/*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")



Mehr