ダブルEMAブレイクアウト取引戦略


作成日: 2023-10-16 16:24:00 最終変更日: 2023-10-16 16:24:00
コピー: 1 クリック数: 738
1
フォロー
1617
フォロワー

ダブルEMAブレイクアウト取引戦略

概要

双EMA突破取引戦略は,2つの異なる周期のEMA平均線を使用して買入シグナルを判断するトレンド追跡戦略である.この戦略は,同時に追加のEMA指標を組み合わせて取引シグナルをフィルターすることで,トレンドの状況でより良い入場時間を得ることができる.

原則

この戦略は,快線EMA ((9サイクル) と慢線EMA ((21サイクル) の金叉死叉を用いて,買入と売却のタイミングを判断する. 快線が慢線を横切るときに買入シグナルが生じ,快線の下が慢線を横切るときに売出シグナルが生じます. 偽の信号をフィルターするために,戦略はまた,補助EMA ((5サイクル) ともう2つのEMA ((1・4サイクル) を導入する. 補助EMAは,快線と慢線の間に,そして1サイクルEMAが4サイクルEMAより高い場合にのみ,真の取引シグナルを触発する.

取引シグナルが誘発された後,戦略はATR値に基づいてストップ・ロースとストップ・ポジションを設定する.TP1はATRの6倍で,より速い速度で部分利益を得るために使用される.価格がTP1を誘発しなかった場合,速線EMAが補助EMAを再び横断すると,直接ポジションを平らにしてTP2のストップを実現する.

利点

  • ダブルEMAの組み合わせを使用して偽信号をフィルターすることで,取引信号の質を向上させる.
  • 補助EMA指標は,トレンドの方向をさらに検証し,逆操作のリスクを軽減します.
  • 2つのストップをデザインし,迅速な収益化と持続的なトレンド収益化を実現
  • ATRのダイナミックストップ・ストップは,市場の変動に応じて調整され,リスクを低減します.

リスクと最適化

  • EMAは曲線フィットしやすいため,取引シグナルが遅れる可能性があります.
  • ショートサイクルEMAの組み合わせは,より多くのノイズ取引シグナルを生成する可能性があります.
  • ショートライン操作は突発的な事件の影響を受けやすい.

改善する方向:

  • 複数のEMAパラメータの組み合わせをテストし,より優れたパラメータを探します.
  • 取引量や変動率などの指標の検証を追加する
  • 停止範囲を適正に広げ,停止が発動する確率を低減する.
  • 利回り率と資金利用効率のバランスをとる,両止まりの設定比率を最適化

要約する

双EMA突破取引戦略は,2つのEMAの交差を利用してトレンド判断を行い,多重EMAフィルタリングとATRダイナミックストップストロップで効果的トレンドを追跡することができる.しかし,EMA曲線適合,ストップストロップリスクなどの問題は注意が必要である.パラメータ最適化,リスク管理などの措置により,より安定した取引パフォーマンスを得ることができる.この戦略は,一定の基礎を持つトレーダーがトレンド状況で使用するのに適しており,より高い資金活用率を得ることができる.

Overview

The dual EMA crossover trading strategy utilizes two EMA lines of different periods to generate buy and sell signals by identifying trend direction. It also incorporates additional EMA indicators for signal filtering, allowing better entry timing in trending markets.

Principles

The strategy uses a fast EMA line (9 periods) and a slow EMA line (21 periods) to determine entries. A golden cross where the fast EMA crosses above the slow EMA generates a buy signal, while a death cross with the fast EMA crossing below the slow EMA produces a sell signal. To filter out false signals, the strategy also employs an auxiliary EMA (5 periods) and two more EMAs (1 period, 4 periods). A real trading signal is only triggered when the fast and slow EMAs cross while the auxiliary EMA is between the two, and the 1-period EMA is above the 4-period EMA.

Once a trading signal is triggered, the strategy utilizes ATR values to set stop loss and take profit levels. TP1 is set at 6 x ATR for faster profit taking. If price doesn’t hit TP1, the strategy will close the position directly when the fast EMA crosses back over the auxiliary EMA, realizing TP2.

Advantages

  • Dual EMA design filters false signals and improves signal quality
  • Auxiliary EMA adds trend direction verification, reducing reverse trade risks
  • Dual take profit allows fast profit and sustained trend following
  • Dynamic ATR stop loss/take profit adjusts to market volatility

Risks and Improvements

  • EMAs can lag prices and generate late signals
  • Shorter EMA combos may produce more noise
  • Tighter stops face larger sudden event risks

Improvement directions:

  • Test multiple EMA combos for better parameters
  • Add other confirmation indicators like volume, volatility etc.
  • Widen stop loss to lower stop out odds
  • Optimize take profit ratios for profit vs capital efficiency

Conclusion

The dual EMA crossover strategy leverages EMA crosses for trend direction, along with multiple EMA filtering and dynamic ATR stop loss/profit taking. This allows effective trend following and profit harvesting. However, EMA fitting limitations and stop loss risks require caution. Proper optimization, risk management etc. can lead to more robust performance. The strategy suits experienced traders to achieve high capital efficiency in trending markets.

[/trans]

ストラテジーソースコード
/*backtest
start: 2022-10-09 00:00:00
end: 2023-04-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// @author ADHDCRYPT0

//@version=4
strategy(title = "EMA double crossover", shorttitle = "(TEST) double cross over", overlay = true, default_qty_value = 100, initial_capital = 1000,default_qty_type=strategy.percent_of_equity, pyramiding=0, process_orders_on_close=true)


// Variables
ema_len1 = input(9 , title="Fast EMA")
ema_len2 = input(21, title="Slow EMA")
ema_len3 = input(5, title="Exit EMA")
ema_len4 = input(1, title="FastConf EMA")
ema_len5 = input(4, title="SlowConf EMA")

fastEMA = ema(open, ema_len1)
slowEMA = ema(open, ema_len2)
exitEMA = ema(open, ema_len3)
conf1EMA = ema(open, ema_len4)
conf2EMA = ema(open, ema_len5)
plot(fastEMA, title='fastEMA', transp=0, color=color.green)
plot(slowEMA, title='slowEMA', transp=0, color=color.red  )
plot(exitEMA, title='exitEMA', transp=0, color=color.orange)
plot(conf1EMA, title='conf1EMA', transp=0, color=color.blue)
plot(conf2EMA, title='conf2EMA', transp=0, color=color.black)

vol = volume 
volma = sma(volume,7)
vol_cond = vol>volma

atr = atr(5)


// Entry Conditions and vol_cond
long = crossover(fastEMA, slowEMA) and (conf1EMA > conf2EMA) and (fastEMA < exitEMA)
short= crossunder(fastEMA, slowEMA) and (conf1EMA < conf2EMA) and (fastEMA > exitEMA)

tradeType = input("BOTH", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"])

pos = 0.0

if tradeType=="BOTH"
    pos:= long? 1 : short? -1 : pos[1]
if tradeType=="LONG"
    pos:= long? 1 : pos[1]
if tradeType=="SHORT"
    pos:=short? -1 : pos[1]

longCond  = long  and (pos[1]!= 1 or na(pos[1]))
shortCond = short and (pos[1]!=-1 or na(pos[1]))

// EXIT FUNCTIONS //
sl  = input(1, title="Stop Loss (ATR)", minval=0)
tp  = input(6, title="Take Profit 1 (ATR)", minval=0)

// Simple Stop Loss + 2 Take Profits
sl_long   =  valuewhen(longCond , low - atr * sl, 0)
sl_short  =  valuewhen(shortCond, high+ atr * sl, 0)

tp_long  = valuewhen(longCond , high + atr * tp, 0)
tp_short = valuewhen(shortCond, low  - atr * tp, 0)


long_exit = crossover(fastEMA, exitEMA) and pos[1]==1
short_exit= crossover(exitEMA, fastEMA) and pos[1]==-1

if long_exit or short_exit
	pos:=0


// Position Adjustment
long_sl  = low <sl_long [1] and pos[1]==1
short_sl = high>sl_short[1] and pos[1]==-1

if long_sl or short_sl
    pos:=0
    
//  Strategy Backtest Limiting Algorithm
i_startTime = input(defval = timestamp("01 Sep 2002 13:30 +0000"), title = "Backtesting Start Time", type = input.time)
i_endTime = input(defval = timestamp("30 Sep 2099 19:30 +0000"), title = "Backtesting End Time", type = input.time)
timeCond = true


// Make sure we are within the bar range, Set up entries and exit conditions
if strategy.equity >0
    strategy.entry("long" , strategy.long , when=longCond  and timeCond and tradeType!="SHORT" , alert_message="INSERT MESSAGE HERE")
    strategy.entry("short", strategy.short, when=shortCond and timeCond and tradeType!="LONG" , alert_message="INSERT MESSAGE HERE")
    
    strategy.exit("SL/TP1", from_entry = "long" , stop=sl_long , limit=tp_long , alert_message="INSERT MESSAGE HERE")
    strategy.exit("SL/TP1", from_entry = "short", stop=sl_short, limit=tp_short, alert_message="INSERT MESSAGE HERE")

    strategy.exit("SL", from_entry = "long" , stop=sl_long, alert_message="INSERT MESSAGE HERE")
    strategy.exit("SL", from_entry = "short", stop=sl_short, alert_message="INSERT MESSAGE HERE")
    
    strategy.close("long", when=long_exit , comment="TP2", alert_message="INSERT MESSAGE HERE")
    strategy.close("short", when=short_exit, comment="TP2", alert_message="INSERT MESSAGE HERE")