トリプル指数関数移動平均 ロングのみ戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月15日 10:54:39
タグ:

img

概要

トリプル指数関数移動平均値 (TEMA) をベースとした長期トレンドフォロー戦略である.短期間の市場騒音をフィルタリングし,中期から長期間のトレンド方向性を識別するためにTEMAを使用する.価格はTEMAを超越し,価格がTEMAを下回ると退場する.中期から長期間のトレンド取引に興味のある投資家に適している.

戦略の論理

この戦略は,TEMA指標を使用して中期から長期間のトレンドを特定する.TEMAは標準EMAの三倍指数的なスムーズ化から派生したスムーズ化されたトレンド指標である.EMA自体にはノイズフィルタリング効果がある.TEMAは異なる期間の3つのEMAをスムーズ化することによって短期間のノイズをさらに減少させる.

具体的には,この戦略は,まず,期間 fastEmaPeriod の EMA (ema1) を計算し,次に同じ期間を使用して,EMA1 の別の EMA (ema2) を計算し,最後に ema2 をベースに ema3 を計算する.最終的な TEMA は,以下のように計算される: TEMA = 3 * (ema1 - ema2) + ema3. 価格が TEMA を越えると戦略はロングになり,価格が TEMA を下回ると終了する.

多重指数式スムージングにより,TEMAはジグザグや逆転にもかかわらず,短期間のノイズをフィルタリングして,中長期のトレンド方向性を効果的に特定することができます.したがって,長期のトレンドフォロー戦略に適しています.

利点分析

  • TEMAは中期から長期間の傾向を効果的に特定し,短期間のノイズをフィルターで排除し,ストップを避けます.

  • ロングポジションだけが ショートラインの無限のダウンサイドリスクを回避する.

  • リスク管理のために,口座のサイズに基づいて,ポジションを柔軟にサイズする割合

  • タイムウィンドウバックテストは 特定の歴史的期間のパラメータを最適化します

リスク分析

  • 重度のブラック・スワン事件は,長期間の保持期間中に急激な逆転を引き起こし,大きな損失を引き起こす可能性があります.

  • TEMAは,タイミングよくストップ・ロスのトレンド変化をシグナルしない可能性があります.

  • 取引の損失の大きさを制限しないため,ストップが必要です.

  • バックテストは過度に適しているリスクがあり,最適化されたパラメータは将来の市場には適合しない可能性があります.

改善 の 方向

  • パラメータを堅固にするため 波動性指標を追加します

  • ストップロスを実行して,単一の取引損失の大きさを制御する.

  • 引き下げ時に ポジションサイズを最小化します

  • トレンドの正確性を向上させるため,クロスタイムフレームのトレンド指標を追加します.

  • 保持期間を異なるパラメータでテストして最適化します

結論

概要すると,Triple EMA Long Only 戦略は,TEMA インジケーターを通じてトレンド方向性を特定し,短期的なノイズを避けるために長期的ポジションを保持し,無制限のダウンサイドを避けるために長く滞在し,中期から長期間のトレンドを効果的に捉える.しかし,安定性を向上させるための最適化を必要とするリスクがあります.全体的には,トレンド取引を好む一定のリスク寛容性を持つ投資家に適しています.


/*backtest
start: 2022-11-08 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("TEMA_System_long_only", overlay=true)

//Collect inputs parameters

fastEmaPeriod = input(7, minval=1, title="Fast TEMA Period")

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 4, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2010, title = "From Year", minval = 2000)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2000)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

fastEma = ema(close, fastEmaPeriod)

//convert EMA into TEMA

ema1 = ema(close, fastEmaPeriod)
ema2 = ema(ema1, fastEmaPeriod)
ema3 = ema(ema2, fastEmaPeriod)

fastTEMA = 3 * (ema1 - ema2) + ema3


buy  = close > fastTEMA
sell = close < fastTEMA

plot(fastTEMA, title = 'TEMA', linewidth=3, color=white)

if window()
    strategy.entry("long",strategy.long, when = buy)
    strategy.close("long", when = sell )

もっと