多期TEMAクロスオーバーに基づいた戦略をフォローする傾向

作者: リン・ハーンチャオチャン開催日:2023年12月25日 (日) 14時20分36秒
タグ:

img

概要

この戦略は,複数のタイムフレームにおけるTEMA指標のクロスオーバーに基づいて市場のトレンド方向を特定し,特定のエントリーとアウトプット点を特定するためにより短いタイムフレームでTEMAクロスオーバーを使用します. 戦略は,長時間のみ,短時間のみ,または両方の方向に設定できます.

戦略の論理

この戦略は2つのTEMA指標を使用しており,一つは5期と15期をベースとした高速線と遅い線,もう一つは毎日または週ごとなどのユーザー定義のより高い時間枠に基づいています.より高い時間枠TEMAのクロスオーバーは,全体的なトレンドバイアスを決定し,スローラインの上を高速線が横切ると上昇傾向を示し,下を低迷傾向を示します.低時間枠TEMAクロスオーバーは,具体的なエントリーと出口タイミングを見つけるために使用されます.

低タイムフレームがスローラインを越えると,長エントリが起動し,低タイムフレームがスローラインを越えると,退出信号が送信される.また,高タイムフレームがスローラインを下回ると,低タイムフレームのTEMAで短エントリが起動し,上昇したクロスオーバーが起こる場合,退出信号が送信される.

利点

  1. TEMAクロスオーバーをベースに 騒音の干渉を回避する
  2. 複数のタイムフレーム設計は,高いサイクルと低いサイクルを組み合わせ,精度を向上させる
  3. 柔軟な配置で,長方向のみ,短方向のみ,または両方向
  4. シンプルなルール,理解し実行しやすい

リスク分析

  1. TEMAは遅延効果があり,初期価格変更を逃す可能性があります
  2. TF の高値に対する短期的訂正は,不要なリバース取引を引き起こす可能性があります.
  3. 誤った高FT設定は実際の傾向を反映していない
  4. 誤った TF 設定により停止損失リスクが増加する

リスク対策

  1. バランスの TEMA パラメータの微調整
  2. ストップロスの利差を適度に緩和する
  3. 高低サイクル設定を最適化
  4. 試験パラメータの安定性

増進 の 機会

  1. 感度最適化のためにTEMAパラメータを動的に調整する
  2. トレンドを見逃すのを避けるためにモメントフィルターを追加します
  3. ダイナミックストップ・ロスのサイズの変動指数を追加する
  4. パラメータ最適化のための機械学習

概要

戦略は全体的に単純で論理的には明確で,複数のタイムフレームにおけるTEMAクロスオーバーを通じてトレンドバイアスを特定し,時間エントリへの低TFの追加のクロスオーバーに依存している.いくつかのメリットがある一方で改善のための余地もある.全体として,量子取引慣行のための貴重な参照を提供する.


/*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)

もっと