双TEMAクロスオーバー取引戦略は,異なるパラメータを持つ2つのTEMA (トリプル指数指数移動平均線) 線を使用した一般的なトレンドフォロー戦略である.より速いTEMAがより遅いTEMAを超えると長い信号を生成し,より速いTEMAがより遅いTEMAを下回るとポジションを閉じる.この戦略は,価格のトレンドを効果的に追跡し,トレンドが明確になると利益を得ることができます.
この戦略は,主要技術指標としてTEMA (Triple Exponential Moving Average) を利用しています.TEMAは以下のように計算されます.
TEMA = (3EMA1) - (3EMA2) + EMA3
EMA1, EMA2 と EMA3 は N 期間の EMA です. EMA を 3 回計算することで,TEMA は価格変化により迅速に対応できます.
この戦略は,短期間TEMAを高速線として,長期間TEMAをスローラインとして使用する.高速線がスローラインの上を通過すると,上向き価格動きを示し,長信号を生成する.高速線がスローライン下を通過すると,下向き価格動きを示し,ポジションを閉じる.
この戦略の鍵は,パラメータチューニングとコンディション論理にある. 20 日のような短い期間を持つ高速線は,価格動態を迅速に捉えることができ,60 日のような長い期間を持つスローラインは,偽のブレイクアウトをフィルタリングすることができます. 有意な価格上昇傾向または下落傾向が現れるとき,高速線は,スローラインの上または下を迅速に横断して取引信号を生成することができます.
この戦略の利点は以下の通りです.
TEMAは価格変動に迅速に対応し 傾向の逆転を把握できます
双重TEMA構造は,偽のブレイクをフィルターし,高確率のトレンドトレードに入れるのに役立ちます.
柔軟な調整可能なパラメータにより 異なる市場条件に適応できます
シンプルで明快な論理 分かりやすく実行し 高い資本利用率
トレンドする市場,特に強いトレンドのある市場では,良い利益を得ることができます.
この戦略のリスクは以下のとおりです.
範囲限定の市場で頻繁に取引損失を受ける傾向がある.
パラメータが正しく調節されていない場合,過剰な偽信号を生成する可能性があります.
突発的な出来事や短期的な価格変動に 効果的に対応できない
遅れた信号は 短期的な機会を逃す可能性があります
強い変動に対してポジションを開くリスクが高い.
変化する市場に適応するためにパラメータ最適化での経験が必要です
リスク管理対策
過敏性を避けるためにパラメータを最適化します.
入力信号をフィルタリングするために他の指標を追加します.
ストップ・ロスを使って単一の取引損失を制限する.
リスクをコントロールするために ポジションのサイズを減らす
パラメータ最適化ルールと手動介入メカニズムを追加します
戦略は以下の側面で最適化できます.
異なる製品や市場条件に合わせて高速線と遅線パラメータを最適化する.動的パラメータ最適化メカニズムを導入する.
MACDやボリンジャー帯などの他の指標を組み込むことで 信号の有効性を向上します
ストップ・ロスの戦略を追加します ストップ・トライリング,タイムストップ,ATRストップなどです
VIX が高いとき ポジションを開設しないように
容量の指標を追加します 容量の拡大を考慮してください
資金管理を最適化します 固定分数のポジションのサイズや 引き上げ制御などです
マシン学習を使って パラメータを自動的に最適化します
双重TEMAクロスオーバー戦略は,トレンド技術指標を用いた全体的なトレンドフォロー戦略である.それは価格傾向を把握し,トレンドに沿って取引するのに役立ちます.しかし,不適切な使用による損失を避けるためにリスクは適切に管理されるべきです.さらなる最適化とテストは,より科学的パラメータ調整とトレンド市場でのより良いパフォーマンスにつながります.
/*backtest start: 2023-01-01 00:00:00 end: 2023-10-11 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/ // © nickrober //@version=4 strategy(title="TEMA Cross Backtest", shorttitle="TEMA_X_BT", overlay=true, commission_type=strategy.commission.percent, commission_value=0, initial_capital = 1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // 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 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=75, editable=true) // Buy and Sell Triggers LongEntryAlert = xnRes > ynRes LongCloseAlert = xnRes < ynRes ShortEntryAlert = xnRes < ynRes ShortCloseAlert = xnRes > ynRes // Entry & Exit signals strategy.entry("Long", strategy.long, when = xnRes > ynRes and window()) strategy.close("Long", when = xnRes < ynRes) //strategy.entry("Short", strategy.short, when = xnRes < ynRes and window()) //strategy.close("Short", when = xnRes > ynRes)