マルチタイムフレームTEMAインジケータークロスオーバーに基づくトレンドフォロー戦略


作成日: 2023-12-25 14:20:36 最終変更日: 2023-12-25 14:20:36
コピー: 0 クリック数: 671
1
フォロー
1623
フォロワー

マルチタイムフレームTEMAインジケータークロスオーバーに基づくトレンドフォロー戦略

概要

この戦略は,市場トレンドの方向性を識別するためにTEMA指標の複数時間枠の交差をベースに,より低い時間枠のTEMA指標の交差と組み合わせて,特定の入場と退出のタイミングを探します. 戦略は,多,空,または双方向の取引のみで構成できます.

戦略原則

戦略は2つのTEMA指標を使用し,一つは周期5と15の快慢線,もう一つは日線や周線などのユーザーカスタマイズされた高周期時間枠に基づいています.高周期TEMA指標の交差は,全体的なトレンドの方向性を決定し,快線が慢線を横切ると看板になり,下向きに下向きに転落します.低周期TEMA指標の交差は,特定の入場と出場のタイミングを見つけるために使用されます.

高周期TEMA速線でゆっくり線を穿過すると,低周期TEMA速線でゆっくり線を穿過すると入場が多くなる.低周期TEMA速線でゆっくり線を穿過すると出場する.同様に,高周期TEMA速線でゆっくり線を穿過すると,低周期TEMA速線でゆっくり線を穿過すると入場が空き;速線でゆっくり線を穿過すると出場する.

戦略的優位性

  1. TEMAの指標を基に交差し,騒音に惑わされないようにする
  2. 複数の時間枠を設定し,高低周期判断と組み合わせて,精度を向上させる
  3. 単面取引,双方向取引,柔軟な配置
  4. ルールが明確で理解しやすい

リスク分析

  1. TEMA指標は遅滞しており,価格変化の初期タイミングを逃している可能性がある.
  2. 高周期的なトレンド判断において,短期的な調整は,不必要な逆操作を引き起こす可能性があります.
  3. 高周期の設定は正しく選択されず,実際のトレンドを反映していない可能性があります.
  4. 低周期設定の誤った選択は,ストップリスクを増やす可能性があります.

リスク対策:

  1. TEMAのパラメータを適正に調整して,バランスをとる
  2. 適切な緩解の停止幅
  3. 高低周期パラメータを最適化 Setting
  4. 様々な品種のパラメータの強さをテストする

最適化の方向

  1. TEMAパラメータを動的に調整し,指標のセンシビリティを最適化
  2. 動力指標のフィルターを追加し,トレンドを逃さないようにする
  3. 波動率指数を増やし,ストップ幅を動的に調整する
  4. 機械学習方法の最適化パラメータ

要約する

この戦略の全体的な概念は,TEMA指数による多時間枠の交差でトレンドの方向を判断し,低周期交差と組み合わせて入場のタイミングを模索する.一定の優位性があり,またいくつかの改善の余地もある.全体的に,この戦略は,量化取引の実践に価値ある参考を提供している.

ストラテジーソースコード
/*backtest
start: 2023-01-01 00:00:00
end: 2023-12-24 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/
// © Seltzer_

//@version=4
strategy(title="TEMA Cross +HTF Backtest", shorttitle="TEMA_X_+HTF_BT", overlay=true)

orderType = input("Longs+Shorts",title="What type of Orders", options=["Longs+Shorts","LongsOnly","ShortsOnly"])
isLong   = (orderType != "ShortsOnly")
isShort  = (orderType != "LongsOnly")

// Backtest Section {

// Backtest inputs
FromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
FromDay = input(defval=1, title="From Day", minval=1, maxval=31)
FromYear = input(defval=2020, title="From Year", minval=2010)
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=2017)

// Define backtest timewindow
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)  // backtest finish window
window() => true

// }

//TEMA Section {

//LTF Section
xLength = input(20, minval=1, title="Fast Length")
xPrice = close
xEMA1 = ema(xPrice, xLength)
xEMA2 = ema(xEMA1, xLength)
xEMA3 = ema(xEMA2, xLength)
xnRes = (3 * xEMA1) - (3 * xEMA2) + xEMA3
xnResP = plot(xnRes, color=color.green, linewidth=2, title="TEMA1")

yLength = input(60, minval=1, title="Slow Length")
yPrice = close
yEMA1 = ema(yPrice, yLength)
yEMA2 = ema(yEMA1, yLength)
yEMA3 = ema(yEMA2, yLength)
ynRes = (3 * yEMA1) - (3 * yEMA2) + yEMA3
ynResP = plot(ynRes, color=color.red, linewidth=2, title="TEMA2")

fill(xnResP, ynResP, color=xnRes > ynRes ? color.green : color.red, transp=65, editable=true)

//HTF Section
HTFres = input(defval="D", type=input.resolution, title="HTF Resolution")

HTFxLength = input(5, minval=1, title="HTF Fast Length")
HTFxPrice = close
HTFxEMA1 = security(syminfo.tickerid, HTFres, ema(HTFxPrice, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxEMA2 = security(syminfo.tickerid, HTFres, ema(HTFxEMA1, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxEMA3 = security(syminfo.tickerid, HTFres, ema(HTFxEMA2, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxnRes = (3 * HTFxEMA1) - (3 * HTFxEMA2) + HTFxEMA3
HTFxnResP = plot(HTFxnRes, color=color.yellow, linewidth=1,transp=30, title="TEMA1")

HTFyLength = input(15, minval=1, title="HTF Slow Length")
HTFyPrice = close
HTFyEMA1 = security(syminfo.tickerid, HTFres, ema(HTFyPrice, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFyEMA2 = security(syminfo.tickerid, HTFres, ema(HTFyEMA1, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFyEMA3 = security(syminfo.tickerid, HTFres, ema(HTFyEMA2, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFynRes = (3 * HTFyEMA1) - (3 * HTFyEMA2) + HTFyEMA3
HTFynResP = plot(HTFynRes, color=color.purple, linewidth=1, transp=30, title="TEMA2")

fill(HTFxnResP, HTFynResP, color=HTFxnRes > HTFynRes ? color.yellow : color.purple, transp=90, editable=true)
bgcolor(HTFxnRes > HTFynRes ? color.yellow : na, transp=90, editable=true)
bgcolor(HTFxnRes < HTFynRes ? color.purple : na, transp=90, editable=true)

// }

// Buy and Sell Triggers
LongEntryAlert = xnRes > ynRes and HTFxnRes > HTFynRes and window()
LongCloseAlert = xnRes < ynRes and window()
ShortEntryAlert = xnRes < ynRes and HTFxnRes < HTFynRes and window()
ShortCloseAlert = xnRes > ynRes

// Entry & Exit signals
if isLong
    strategy.entry("Long", strategy.long, when = LongEntryAlert)
    strategy.close("Long", when = LongCloseAlert)

if isShort
    strategy.entry("Short", strategy.short, when = ShortEntryAlert)
    strategy.close("Short", when = ShortCloseAlert)