2つのEMAクロスオーバー取引戦略

作者: リン・ハーンチャオチャン開催日:2023年10月16日 16:24
タグ:

img

概要

双EMA突破取引戦略は,二つの異なる周期のEMA平均線を利用して,売り切りの信号判断を行う傾向追跡戦略である.この戦略は,トレンド市場の良いエントリータイミングを得るために,追加のEMA指標を組み合わせて取引信号をフィルタリングする.

原則

この戦略は,快線EMA (9サイクル) とスローラインEMA (21サイクル) の金叉死叉を使用して,買いと売るタイミングを判断する.快線がスローラインを通過すると買い信号が発生し,快線がスローラインを通過すると売る信号が発生する.偽の信号を過濾するために,補助EMA (5サイクル) とさらに2つのEMA (1サイクル,4サイクル) が導入される.高速線がスローラインで金叉死叉が発生すると同時に,補助EMAが高速ラインの間にあり,1サイクルが4サイクルEMAより高い場合にのみ,真の取引信号が発生する.

トレーディング・シグナルがトリガーされたとき,戦略はATR値に基づいて止損位と止損位を設定する. TP1はATRの6倍で,より速い速度で部分的な利益を得るために使用される.価格がTP1をトリガーしない場合,快線EMAが補助EMAを再び横切ると,直接ポジションを平らにする.

利点

  • 偽信号をフィルタリングする双 EMA 組み合わせを使用して取引信号の質を向上させる
  • 補助EMAは,傾向の方向性をさらに検証し,逆転操作のリスクを軽減します.
  • 2つのストップ・ピッチデザインで,迅速な利益と持続的な傾向を追跡する利益
  • ATRダイナミックストップ・ロダース・ストップは,市場の変動に応じて調整され,リスクを軽減することができます.

リスクと最適化

  • EMAは曲線合致を容易にするし,取引信号は遅れる可能性がある.
  • 短周期EMAの組み合わせは,より多くのノイズ取引信号を生む可能性があります.
  • 短線操作は,緊急事態の影響を受け,停止リスクが高い.

優化方向:

  • 複数のEMAパラメータの組み合わせをテストし,最適なパラメータを探します.
  • 取引量,波動率などの他の指標の検証を追加します.
  • 停止損失の範囲を適切に放宽し,停止損失が引き起こされる可能性を減らす
  • 二重停止設定比率を最適化し,収益速度と資金利用効率をバランスする

概要

双EMA突破トレード戦略は,複数のEMAフィルタとATR動的ストップ・ロストが加わり,複数のEMAを交差してトレンド判断を行う.しかし,EMA曲線適合,ストップ・ロストリスクなどの問題には注意が必要である.パラメータ最適化,リスク管理などの手段により,より安定したトレードパフォーマンスを得ることができる.この戦略は,トレンド市場での高い資金利用率を得るために,ある基礎を持つトレーダーに適している.

概要

デュアル EMAクロスオーバー・トレーディング戦略は,トレンド方向を特定することで,異なる期間の2つの EMAラインを利用して買取・売却シグナルを生成する.また,シグナルフィルタリングのための追加の EMAインジケーターを組み込み,トレンド市場へのより良いエントリータイミングを可能にする.

原則

この戦略は,エントリを決定するために,高速EMA線 (9期) と遅いEMA線 (21期) を使用する.高速EMAが遅いEMAの上に横断する黄金十字は購入信号を生成し,遅いEMAの下の高速EMAが横断する死亡十字は販売信号を生成する.偽信号をフィルタリングするために,戦略はまた補助EMA (5期) とさらに2つのEMA (1期,4期) を採用する.補助EMAが2つの間に交差し,1期EMAが4期EMAの上にあるときのみ,高速EMAと遅いEMAが交差するときに実際の取引信号が起動される.

トレーディング・シグナルが起動すると,戦略はATR値を活用してストップ・ロスを設定し,利益を上げます. TP1は6×ATRで設定され,より迅速な利益を得ることができます.価格がTP1に達しない場合,戦略は迅速なEMAが補助EMAを横切ると直接ポジションを閉じ,TP2を実現します.

利点

  • 双 EMA デザインは偽信号をフィルターし,信号品質を向上させる
  • 補助EMAはトレンド指向検証を追加し,逆貿易リスクを軽減
  • 双重利用利益は,迅速な利益と継続的な傾向を可能にする
  • 動的ATR ストップ損失/得益調整 市場の変動

リスク と 改善

  • EMA は 価格 の 遅延 を 引き起こし,遅い 信号 を 発生 させ ます.
  • 短いEMAコンボは,より多くの騒音を生む可能性があります
  • より緊密なストップは,より大きな突然発生リスクに直面します

改善方向:

  • より良いパラメータのために複数のEMAコンボをテストする
  • ボリューム,波動性などの他の確認指標を追加します.
  • ストップ・ロスを拡大してストップ・アウトの確率を下げる
  • 利得と資本効率の利得率を最適化する

結論

双 EMA クロスオーバー戦略は,複数の EMA フィルタリングと動的な ATR ストップ損失/利益採取とともに,トレンド方向のために EMA クロスを利用する. これにより,効果的なトレンドフォローと利益の収穫が可能になる.しかし,EMA 適正な制限とストップ損失リスクは注意が必要です.適切な最適化,リスク管理などによりより強力なパフォーマンスにつながる可能性があります.この戦略は,トレンド市場で高い資本効率を達成するために経験豊富なトレーダーに適しています.

[/トランス]


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


もっと