ダブルTEMAクロスオーバー取引戦略


作成日: 2023-10-12 17:34:19 最終変更日: 2023-10-12 17:34:19
コピー: 0 クリック数: 641
1
フォロー
1617
フォロワー

概要

双TEMAフォークストラトジーは,価格トレンドを追跡する比較的一般的な戦略である.この戦略は,2つの異なるパラメータの三重指数移動平均TEMAを使用し,快線が下からゆっくりとした線を横切るときに多信号を生成し,快線が上からゆっくりとした線を横切るときに平仓する.この戦略は,価格トレンドを効果的に追跡し,トレンドが明瞭であるときにより良い収益を得ることができる.

戦略原則

この戦略は,TEMA (トリプル指数移動平均) を主要な技術指標として使用する.TEMAの計算式は次のとおりである.

TEMA = (3*EMA1) - (3*EMA2) + EMA3

EMA1,EMA2およびEMA3はそれぞれ長さNの指数移動平均EMAである.TEMAは,価格の変化により迅速に反応するために,EMAを3回計算する.

策略は,短い長さのTEMAを快線として,長いTEMAを慢線として使用する. 快線で慢線を穿越すると,価格が上昇し始め,多信号を生成する. 快線の下の慢線を穿越すると,価格が低下し始め,平仓する.

この戦略の鍵は,パラメータ設定と条件判断である.快線設定は20日という短い周期で,価格変化をより早く捉えることができる.慢線設定は60日という長い周期で,偽の突破を排除することができる.価格が明らかな上昇または下降の傾向があるとき,快線は,慢線をすばやく上または下を通過して,取引信号を生成することができる.

優位分析

この戦略の利点は以下の通りです.

  1. TEMA指標を使用すると,価格の変化に迅速に反応し,トレンドの逆転を捉えることができます.

  2. 双TEMA構造は,偽のブレイクをフィルターして,高い確率のトレンド取引に入ることができます.

  3. 調整可能なパラメータの設定は柔軟で,市場に応じてパラメータを調整して,異なる状況に適応することができます.

  4. 戦略の論理はシンプルで明快で,実行が分かりやすく,資金活用率が高い.

  5. トレンド状態でよりよい収益を得ることができ,明確なトレンドのある市場ではより効果的です.

リスク分析

この戦略には以下のリスクもあります.

  1. 金融危機の危機は,金融危機の危機が,金融危機の危機が,金融危機の危機が,金融危機の危機が,金融危機が,金融危機が,金融危機が,金融危機が,金融危機が,金融危機が,金融危機は,金融危機が.

  2. パラメータが正しく設定されていない場合,偽信号が過剰に発生する可能性があります.

  3. 短期的な状況の変化に 効率的に対応できない.

  4. 短線の機会を逃す可能性もある.

  5. 市場が揺れ動いている中,順調に取引を始めるリスクは大きい.

  6. 市場の変化に適したパラメータを適時調整し,一定のパラメータ最適化経験が必要である.

対応するリスク管理策:

  1. パラメータの設定を最適化して,過度に敏感な設定を避ける.

  2. 他の指標と組み合わせて入場信号をフィルタリングする.

  3. オフゲーム・ストップ・損失は,単発損失のコントロールを保証する.

  4. ポジションの規模を小さくし,単一取引のリスクをコントロールする.

  5. パーメータを追加して判断と人工介入の仕組みを最適化する.

最適化の方向

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

  1. 快線と慢線のパラメータを最適化して,異なる品種と行情環境に適したものにする.動的パラメータ最適化メカニズムを導入することができる.

  2. MACD,ブリン帯など,他の指標の組み合わせを加え,信号の有効性を向上させる.

  3. 移動停止,時間停止,ATR停止など,損失を制御するストップ・ストラトジーを追加する.

  4. VIX指数と組み合わせて,パニックの時に取引を避ける.

  5. 貯蔵庫の建設は,大量に貯蔵できるエネルギーが大きくなる時に考慮すべきだ.

  6. 定額取引,ポジション管理などの資金管理戦略を最適化

  7. 機械学習などのパラメータの自動最適化.

要約する

双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)