トリプルEMAトレンドフォロー戦略


作成日: 2023-12-20 15:00:44 最終変更日: 2023-12-20 15:00:44
コピー: 0 クリック数: 800
1
フォロー
1621
フォロワー

トリプルEMAトレンドフォロー戦略

概要

三重EMAトレンド追跡戦略は,市場トレンドを追跡するのに非常に適した戦略である.それは,3つの異なる周期のEMAをポジション構築信号として使用し,十分なトレンドが確認されたときに多頭または空頭ポジションを確立する.

この戦略の優点は,偽信号を軽減し,トレンドの強度が充分になった後に再入場することを保証することにある.同時に,それは自律的な止損システムを備えており,市場の変動に応じて止損を追跡することができ,その結果,より良いリスク管理効果が得られる.

戦略原則

倉庫の論理

この戦略は,7・14・21周期の3つのEMAをポジショニングシグナルとして使用する.具体的には,価格が3つのEMAを同時に突破するときは,多めに;価格が3つのEMAを同時に突破するときは,空白にする.

このような設計は,偽信号を減少させ,トレンドが十分に明瞭であることを保証し,その後再入場する.同時に,三つのEMAサイクルが適切に設定され,市場トレンドの発生を間に合うように捉えることができる.

損失を抑える方法

この戦略はATRと最大撤回に基づく自律的な止損システムを使用する.これは価格変動率をリアルタイムで計算し,それに基づいて止損ラインを設定する.具体的には,ATRの一定の倍数を止損バッファージとして計算する.

上昇過程で,ストップラインは新しい高値の上昇とともに移動し,優れた追及効果を有する.価格がバッファローの低点に戻ったときに,ストップラインは活性化され,平仓ストップする.これは特定の市場状況に応じてストップリスクを制御することができる.

収益の流れ

この戦略は,固定比例のストップ方法を使用する. ポジションを開設すると,入場価格より一定割合高いストップラインを設定する. 価格がストップラインに達すると,ポジションを平らにする.

この固定比率のストップの利点は,目標利益を予期して,達成した後に退出を満足させることができるということです.同時に,価格が再び引き下がるリスクを回避することもできます.ストップの比率は,必要に応じて調整することができます.

優位分析

  • 偽信号を減少させ,倉庫の建設後に強い価格トレンドを確保する.
  • EMAサイクルを重ねることで,市場動向を素早く捉える
  • 自律的な止損システムで,波動率に応じてリスクを制御する
  • 固定ストップ比率,収益目標を達成した後に退出
  • ATRと最大引き下げの計算に基づくストップ方式は,市場状況に応じて最適化できます.
  • パラメータを変更することで,簡単にポリシースタイルを調整できます.

リスク分析

  • EMAは,地震の時に頻繁に交差し,容易に捕まえる.
  • 固定ストップは市場状況に合わせて調整できないため,より多くの利益を失ったり,損失を増やす可能性があります.
  • ストップトラッキングを停止すると,再び高いポイントをトラッキングできず,価格が再び下落すると,損失が増加する可能性があります.
  • 固定ストップ比率は,単一突破の状況では,保守的であり,十分な利益を得ることができない可能性があります.

トレンド判断指標を組み合わせて,震動状況で盲目投資を避ける;移動ストップや損比などの方法を使用して,ストップ方法をより柔軟にすることができる.全体的に,戦略の適用に合わせて人工判断が必要である.

最適化の方向

この戦略は,以下の点で最適化できます.

  1. MACD,KDなどの指標を活用して,震動の状況に巻き込まれるのを避ける.

  2. 止まりを移動させたり,止まりの方法より柔軟に止まりを削ったりしてみてください.

  3. ストップ・モードにダウン・トラッキング・メカニズムを加え,価格が再び下落した場合,再び低点を追跡してリスクを制御する.

  4. 異なる品種の特徴に応じてEMA周期パラメータを調整し,トレンドの判断を最適化する.

  5. ポジション管理モジュールを追加し,資金使用率に応じて単位のポジションを調整できます.

要約する

三重EMAトレンドフォロー戦略は,非常に実用的なトレンドフォロー戦略である.それは,強いトレンド判断能力を持ち,同時に,自己適応のストップ・ストップ・損失機構を備えて,注文を自動的に管理することができる.最適化の観点から,ストップ・ストップ・損失システムは,さらに改良され,リアルタイム市場の状況に合わせて調整することができる.しかし,全体的に,この戦略は,実行し易く,リスクが制御可能な選択肢である.

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

//@version=4
strategy(shorttitle='Three EMAs Trend-following Strategy',title='Three EMAs Trend-following Strategy (by Coinrule)', overlay=true, initial_capital = 1000, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)


//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

ema_1 = ema(close, input(7))
ema_2 = ema(close, input(12))
ema_3 = ema(close, input(21))

Take_profit= ((input (4))/100)

longTakeProfit = strategy.position_avg_price * (1 + Take_profit)


length = input(20, "Length", minval = 2)
src = input(close, "Source")
factor = input(3.0, "Multiplier", minval = 0.25, step = 0.25)
volStop(src, atrlen, atrfactor) =>
    var max     = src
    var min     = src
    var uptrend = true
    var stop    = 0.0
    atrM        = nz(atr(atrlen) * atrfactor, tr)
    max         := max(max, src)
    min         := min(min, src)
    stop        := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src)
    uptrend     := src - stop >= 0.0
    if uptrend != nz(uptrend[1], true)
        max    := src
        min    := src
        stop   := uptrend ? max - atrM : min + atrM
    [stop, uptrend]

[vStop, uptrend] = volStop(src, length, factor)

go_long = crossover(close, ema_1) and crossover(close, ema_2) and crossover(close, ema_3)



closeLong = close > longTakeProfit or crossunder(close, vStop)



//Entry 
strategy.entry(id="long", long = true, when = go_long and window())



//Exit
strategy.close("long", when = closeLong and window())

plot(vStop,"Vstop", color.black, linewidth=2)
plot(ema_1,"EMA Short", color.green, linewidth=1)
plot(ema_2,"EMA Mid", color.purple, linewidth=1)
plot(ema_3,"EMA Long", color.red, linewidth=1)