ADX EFI 50 移動平均チャネルの引き戻し戦略

作者: リン・ハーンチャオチャン, 日時: 2023-09-19 17:10:51
タグ:

概要

この戦略は,トレンド取引のために50期移動平均チャネル,ADX方向指数およびEFIエネルギー指数の組み合わせを使用する.EFIエネルギー指数がトレンド開始を示したとき,50MAチャネル領域内の引き下げ中に市場に参入する.この戦略は1分間のタイムフレームに適している.

戦略の論理

  1. 50 期間の移動平均チャネルを計算し,上帯は高価格の移動平均線,下帯は低価格の移動平均線とする.

  2. ADX方向指数を計算してトレンド強度を決定し,強いトレンド (ADX>20) の時に取引するのみを考慮する.

  3. 長期 (120 期) と短期 (15 期) の EFI エネルギー インデックスを計算する. 0 以上の長期インデックスはエネルギー全体の上昇傾向を示し,0 未満の短期インデックスは短期上昇傾向の後退を示します.

  4. 長期および短期EFIインデックスが買い信号を出し,価格が50MAチャネルに戻ると,ロングポジションが取れます.

  5. 長期および短期EFIインデックスがセールシグナルを示し,価格が50MAチャネルに戻ると,ショートポジションが取られます.

利点分析

この戦略は,トレンド,インパルス,および引き下げ信号を組み合わせ,ほとんどの偽のブレイクを効果的にフィルタリングします. 具体的な利点は:

  1. 50MAチャネルは主要なトレンド方向を明確に決定します.

  2. ADXインデックスは 明確なトレンド期にのみ取引が実施され 市場変動の回避を図ります

  3. 低リスクのエントリーポイントの傾向エネルギー上昇をEFIインデックスで把握する.

  4. 引き下げを待つことで より良いリスク・リターン比が得られます

  5. 複数の指標の組み合わせは,誤ったブレイクリスクを効果的にフィルタリングします.

リスク分析

この戦略の主なリスクは,

  1. 強いトレンドは,より大きな引き下げも可能で,より広いストップ・ロスの範囲が必要です.

  2. 変動市場では,EFIは誤った信号を発し,ADXのようなトレンドフィルタリング指標とペアリングする必要があります.

  3. 深くすぎたプルバックは入口点を逃す可能性があるため,MAチューニングが必要となる.

  4. 単一の取引手段では 市場における体系的なリスクの多様化ができない.

オプティマイゼーションの方向性

この戦略はいくつかの点で改善できる:

  1. 最適の普遍的なパラメータを見つけるために より多くの機器でテストします

  2. ストップ損失を後押しして利益を得る.

  3. ADX,EFI 設定のパラメータ最適化など

  4. 機械学習を組み込み 強力なトレンドと偽のブレイクを検出します

  5. 複数のタイムフレームの分析を追加し タイムフレーム間の位置サイズを調整します

  6. 信号の質を改善するために,より多くの傾向フィルター指標を評価する.

概要

ストップ・ロスト,パラメータ調節,タイムフレームなどの改良により,強力なトレンドフォローシステムになり得ます.要するに,非常に実用的で研究に値するトレンドトレーディング戦略です.


/*backtest
start: 2023-08-19 00:00:00
end: 2023-09-18 00:00:00
period: 1h
basePeriod: 15m
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/
// © trent777brown

//@version=5
// strategy("adx efi 50 ema channel, trend pullback", overlay=true, margin_long=100, margin_short=100, currency=currency.USD, initial_capital= 100000, close_entries_rule="ANY")

//bollingerbands
[basis, upperband, lowerband]= ta.bb(ohlc4, 50, 3) 
[basis2, upperband2, lowerband2]= ta.bb(ohlc4, 50, 2)
psar= ta.sar(.1, .1, .09)
ema50= ta.ema(hlc3, 50) 
ema50hi= ta.ema(high, 50) 
ema50lo= ta.ema(low, 50) 
ema18= ta.wma(hlc3, 15)
wma9= ta.wma(open, 9) 
wma5= ta.wma(ohlc4, 5) 
ema34= ta.rma(hlc3, 10)
[macdline, signalline, histline]= ta.macd(hlc3, 5, 34, 5) 
[macdline2, signalline2, histline2]= ta.macd(hlc3, 15,70, 24) 
[diplus, diminus, adx]= ta.dmi(20, 20) 
[diplus2, diminus2, adx2]= ta.dmi(12, 12)
rsi= ta.rsi(hlc3, 14)
rsisma= ta.sma(rsi, 10) 
stoch= ta.stoch(close, high, low, 21)
k= ta.wma(stoch, 3)
d= ta.wma(k, 3)
trendline5= ta.wma(hlc3, 300) 
trendline9= ta.wma(open, 540) 
trendline18= ta.wma(open, 1080)
atr=ta.atr(14)
plot(psar, color=color.red, style=plot.style_circles)
plot(ema50, color=color.white, linewidth=4) 
plot(ema50hi, color=color.yellow, linewidth=4)
plot(ema50lo, color=color.yellow, linewidth=4)
plot(ema34, color=color.aqua, linewidth=4)
plot(wma9, color=color.gray, linewidth=4) 
plot(wma5, color=color.lime, linewidth=4) 
plot(trendline18, color=color.orange, linewidth=4) 
plot(upperband, color=color.navy, linewidth=4) 
plot(lowerband, color=color.navy, linewidth=4)
plot(upperband2, color=color.navy, linewidth=4)
plot(lowerband2, color=color.navy, linewidth=4)
plot(trendline9, color=color.maroon, linewidth=4)
plot(trendline5, color=color.yellow, linewidth=4)


efi = ta.rma(ta.change(close) * volume, 15)
efi2= ta.rma(ta.change(close) * volume, 120)

buy= efi2 > 0 and efi < 0 and efi[1] < efi  and adx >= 20 and open < ema50hi
sell= efi2 < 0 and efi > 0 and efi[1] > efi and adx >= 20 and open > ema50lo

//ell= rsi > 50 and ta.crossunder(wma5, wma9) and psar > high and ema18 <= ema50hi and macdline > 0 and macdline < signalline
//buy= ta.crossunder(close, ema50) and rsi < 50 and adx2 < adx2[1] and k < 25 and psar > high
//uy= rsi < 60 and ta.crossover(wma5, wma9)  and psar < low and ema18 >= ema50 and macdline2 > 0 and diplus2 < 30 // and histline2 < 0  
//buy=  ema18 > ema50 and ta.crossunder(rsi, 45) and open < ema50hi and adx2[3] < adx2 and diplus2 < 25 and macdline < 0  and adx < 10
//sell= ta.crossover(close, ema50) and rsi > 50 and adx2 < adx2[1] and k > 75 and psar < low
//ell= ema18 < ema50 and ta.crossover(rsi, 60) and open > ema50lo and diminus2 < 30 and macdline2 < 0 and adx2[2] < adx2 
//buy sell conditions 1
//buy= ta.crossover(wma5, ema18) and ema18 > ema50lo and diplus > 22 and diminus < 22 and adx > 15
//ell= ta.crossover(psar, high) and macdline2 < signalline2 and rsi < rsisma
//when conditions
buytrig= ema34 >= ema50lo
selltrig= ema34 <= ema50hi
//strategy
sl= low - atr * 8
tp= high +  atr * 4
sellsl= high + atr * 8
selltp= low - atr * 4
if(buy)
    strategy.entry("buy", strategy.long, when= buytrig)
    strategy.exit("exit buy", "buy", limit= tp, stop= sl)
    strategy.close("close", when= ta.crossunder(ema34, ema50lo))
if(sell)
    strategy.entry("sell", strategy.short, when= selltrig)
    strategy.exit("exit sell", "sell", limit= selltp, stop= sellsl)


もっと