EMAの傾斜横向傾向 戦略をフォローする

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

img

概要

この戦略では,異なる長さの2つのEMAの傾斜の交差を使用して,シグナルに従ってトレンドを生成します.デフォルトでは,130と400が使用され,非常にうまく機能します.

戦略が市場に参入する条件は次のとおりです

  • 高い傾斜 > 低い傾斜と価格 > EMA 200: ロング
  • 低傾斜と価格 < EMA 200: ショート

簡単な傾きが反対方向に交差すると ポジションが閉まります

この戦略はビットコインと最も流動で資本化されたアルトコインで最もうまく機能しますが,特に頻繁にトレンドになっている場合,不安定な資産でも非常に効果的です. 4時間の時間枠で最適です

また,オプションの波動性フィルターもあります.このフィルターは,2つの傾斜間の差が特定の値を超えるとのみポジションを開くことができます.この目的は,価格が横向きに動いているとき,ノイズが信号よりもはるかに大きいときにポジションを開くのを避けるためです.

楽しんで!

戦略の論理

この戦略の核心は,異なる長さの2つのEMAの傾きを比較することです.

130 と 400 の長さの EMA が計算され,それぞれの傾きが計算され,傾き曲線を滑らかにするために長さ 3 の EMA が各傾きで計算されます.

急速EMA傾斜がスローEMA傾斜の上を横切ると,購入信号が生成される.高速EMA傾斜がスローEMA傾斜を下を横切ると,販売信号が生成される.

騒音をフィルタリングするために,200期EMAはトレンドフィルターとして使用され,価格がEMAを超えた場合にのみ長い信号,EMAを下回った場合にのみ短い信号を考慮します.

さらに,波動性フィルタを使用することができ,両傾きの差が値を超えるとのみ信号を生成し,傾きが交差するが波動性が不十分の場合を避ける.

低値と高値が交差すると 利益/損失を止めるため ポジションは閉鎖されます

利点分析

  1. 傾き交差を信号を生成するために使用することで,効果的に傾向を追跡することができます

  2. EMA期間の組み合わせを調整することで,異なる市場状況に適応できます.

  3. トレンドフィルターは,変動する価格動きによって誤導されるのを避ける.

  4. 波動性フィルタは 偽信号をフィルタリングします

  5. シンプルで明快な論理,理解し実行しやすい

  6. 複数のタイムフレームで使用できます

リスク分析

  1. 大幅な範囲の市場では,頻繁に開店・閉店が起こる可能性があります.

  2. 不適切な EMA 期間では,トレンドの転換点を見逃す可能性があります.

  3. パラメータは,変化する市場状況に適応するように調整する必要があります.

  4. MAシステムと同様に,大きな傾向は極端に逆転する可能性があります

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

  1. 最適パラメータを見つけるために異なるEMA期間の組み合わせを試す.

  2. 資産の特徴と市場状況に応じてパラメータを選択する

  3. リスク管理のためにストップ・ロスの戦略を追加することを検討する

  4. 動的にEMA期間を調整することを検討する

  5. 異なる変動値の限界値をテストする

  6. 試験の有効性

概要

この戦略は,EMA傾斜交差を使用して信号を生成し,トレンドを効果的に追跡する明確な,理解しやすい論理を持っています.トレンドと変動性フィルターは騒々しい取引を軽減します. EMA期間の組み合わせを調節することで,異なる市場状況に適応します.全体的に,ライブ取引でテストし最適化する価値のあるシンプルで実践的なトレンドフォロー戦略です.


/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// strategy(title="Slopes",initial_capital=1000, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.06, slippage = 2, default_qty_value=30, overlay=false)

//definizione input

start = timestamp(input(2018, "start year"), input(1, "start month"), input(1, "start day"), 00, 00)
end = timestamp(input(2020, "end year"), input(1, "end month"), input(1, "end day"), 00, 00)

average = input (title="Source MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])

len1=input(130,title="Fast MA Length")
len2=input(400,title="Slow MA Length")

smoothingavg = input (title="Smoothing MAs Type", type=input.string, defval="EMA",options=["EMA","SMA"])
smoothingavglen = input (3,title="Smoothing MAs Length")

trendfilter=input(true,title="Trend Filter")
trendfilterperiod=input(200,title="Trend Filter MA Period")
trendfiltertype=input (title="Trend Filter MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])

volatilityfilter=input(false,title="Volatility Filter")
volatilitydelta=input(0.0003,step=0.0001,title="Delta Slopes EMA")

//variabili

m1 = if average == "EMA" 
    ema(close,len1)
else
    sma(close,len1)

m2=if average == "EMA" 
    ema(close,len2)
else
    sma(close,len2)

slp1=(m1-m1[1])/m1
slp2=(m2-m2[1])/m2

e1=if smoothingavg == "EMA" 
    ema(slp1,smoothingavglen)
else
    sma(slp1,smoothingavglen)

e2=if smoothingavg == "EMA" 
    ema(slp2,smoothingavglen)
else
    sma(slp2,smoothingavglen)

plot(e1,color=color.yellow)
plot(e2,color=color.red)
//plot (abs(e1-e2),color=color.white)
//plot (ema(e1-e2,9),color=color.yellow)

//variabili accessorie e condizioni

TrendConditionL=if trendfiltertype =="EMA"
    close>ema(close,trendfilterperiod)
else
    close>sma(close,trendfilterperiod)
    
TrendConditionS=if trendfiltertype =="EMA"
    close<ema(close,trendfilterperiod)
else
    close<sma(close,trendfilterperiod)
    
VolatilityCondition = abs(e1-e2) > volatilitydelta

ConditionEntryL= if trendfilter == true
    if volatilityfilter == true
        e1>e2 and TrendConditionL and VolatilityCondition
    else
        e1>e2 and TrendConditionL
else
    if volatilityfilter == true
        e1>e2 and VolatilityCondition
    else 
        e1>e2

ConditionEntryS= if trendfilter == true
    if volatilityfilter == true
        e1<e2 and TrendConditionS and VolatilityCondition
    else 
        e1<e2 and TrendConditionS
else
    if volatilityfilter == true
        e1<e2 and VolatilityCondition
    else
        e1<e2

ConditionExitL=crossunder(e1,e2)
ConditionExitS=crossover(e1,e2)

if true
    if ConditionExitS
        if strategy.position_size < 0
            strategy.close("SLPShort")

if true
    if ConditionExitL
        if strategy.position_size > 0
            strategy.close("SLPLong")

if true
    if ConditionEntryL
        strategy.entry ("SLPLong",long=true)
        
if true
    if ConditionEntryS 
        strategy.entry("SLPShort",long=false)

もっと