双重EMAを吸収するブレイクアウト戦略

作者: リン・ハーンチャオチャン開催日:2023年12月7日 15:50:13
タグ:

img

概要

この戦略は,指数的な移動平均値 (EMA) の方向を判断することによって,長/短方向を決定する.上昇傾向のエンゲルフィングパターンと拡大された取引量がある場合,長に移動する. EMAの方向が逆転するか,下落傾向のエンゲルフィングパターンが発生した場合,ポジションを閉じる.

戦略の論理

  1. 異なるパラメータを持つ2つの EMA を使用して市場の傾向を決定します.もしショート EMAがロング EMAよりも高くなった場合,それは牛市場であり,そうでなければそれは熊市場です.

  2. 市場が上昇傾向にあるとき,もし上昇傾向の格子が現れ,取引量が前回より1.2倍になると,ロングシグナルが起動します.このパターンは,続く強勢の牛を示します.

  3. 市場トレンドが逆転すると,つまりショート EMA がロング EMA を下回ると,牛の勢いが弱まり,既存のポジションが閉鎖されるべきである.また,下落傾向の格好が出現すると,強い勢いで下落が進んでいることを示し,ストップ損失でポジションを積極的に閉鎖すべきである.

利点分析

  1. 市場構造を決定するために二重EMAを使用することで,高雄/熊の状態を正確に判断できます.

  2. 膨張した音量フィルターと組み合わせると,偽のブレイクによって誤導されるのを避ける.

  3. ストップ・ロスのメカニズムがあります.ストップ・ロスの価格を設定せず,市場構造の逆転を使用してストップ・ロスを行うことで,不必要なスライドを減らすことができます.

リスク分析

  1. 双 EMA は,市場構造を誤って判断し,傾向を見逃したり,誤ってロングに行くこともあります. EMA 期間を調整することができます.

  2. 流通パターンは 市場が変化することで 誤りになり 偽の取引を避けるために より多くのフィルターを追加できます

  3. ストップ・ロスの価格がないことは,より大きな損失につながる可能性があります.ブレイク・イヴのような他のストップ・ロスの方法もテストできます.

最適化方向

  1. MACD,A/Dなどの指標は ロング/ショートを決めるのに使えます

  2. 需要に応じて適正な固定ストップ損失価格を追加します.

  3. シンボルの取引の特徴に基づいて EMA 期間を最適化する.

結論

この戦略の論理は明確で理解が容易で,EMAを使用して構造を決定し,ブレイクアウトを捕捉するパターンを吸収する.その利点はシンプルな判断論理と明確な取引信号である.しかし,罠にかかったリスクは存在する.さらなる最適化はより良い収益を得ることができます.


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



もっと