トレンドフォローエネルギー指標取引戦略


作成日: 2023-11-15 17:36:46 最終変更日: 2023-11-15 17:36:46
コピー: 0 クリック数: 602
1
フォロー
1621
フォロワー

トレンドフォローエネルギー指標取引戦略

概要

この策略は,vitelotのSmeared Variable Channel Index (Smeared VCI) 指標をベースに取引するトレンド追跡策である.この策略は,移動平均のトレンド判断と,変動チャネル指数の超買超売判断を組み合わせて,価格の主なトレンド方向を捕捉する.価格走行が超買または超売状態に突入したとき,反転操作を行って利益を得る.

戦略原則

この戦略は,vitelotのSmeared VCI指標を使用してトレンドの方向を判断する.Smeared VCI指標は,変数通路指数 (VCI) に基づいて平滑処理が行われている.それは,急速EMA,遅いEMA,および滑動周期の3つのパラメータで構成されている.急速EMAが遅いEMAよりも高いときは,看板であり,そうでなければ,下向きである.平滑処理を加えた後,部分的なノイズをフィルターすることができます.

戦略には2つの条件があります.

  1. Smeared VCI 上はTrigger線を介して多信号; 下は空白信号

  2. 返信時間枠内での取引のみ

2つの条件が同時に満たされると,多行または空行操作を行う.平行条件が止損または逆行シグナルが発生したときに平行する.

優位分析

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

  1. トレンド追跡型の指標を用いて,トレンドを効果的に追跡できます.

  2. 滑らかな処理を加えることで,偽信号を減らすことができます.

  3. タイムウィンドウの反省を使用して,特定の時間帯の状況に対してテストを行う

  4. ストップポイントを設定し,リスクをコントロールします.

  5. 指数パラメータを用いて多空判断し,規則は単純明快である.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. トレンド判断の誤りで損失を招く可能性

  2. 指数パラメータの設定が不適切である場合,収益が不良になる可能性があります.

  3. ストップポイントの設定が小さすぎると,小ストップが発生します.

  4. 反射時間窓が不合理であるため,テスト結果の偏差が起こり得る

  5. 多空間のスイッチが頻繁すぎると,取引費用のプレッシャーが生じます.

最適化の方向

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

  1. 異なるパラメータの組み合わせをテストし,最適なパラメータを探します.

  2. 他の指標を活用して 判断を補完し 精度を向上させる

  3. 止損アルゴリズムを最適化し,止損を動的に追跡する

  4. ポジション開設条件を最適化して,頻繁に取引を避ける

  5. 戦略の安定性を検証するより長い時間ウィンドウをテストする

  6. 取引量などの他の要因と組み合わせて,意思決定の正確性を向上させる

要約する

この戦略は,全体として比較的単純なトレンド追跡戦略である.これは,Smeared VCI指標を使用して,トレンドの方向を判断し,指標が取引信号を送信するときにポジションを開く.ストップを介してリスクを制御する.この戦略は,トレンド追跡能力を持っているが,一定のリスクも存在します.パラメータ最適化,ストップ最適化,補助条件の追加などの方法によって,この戦略をさらに完善し,安定した信頼できる取引システムにすることができます.

ストラテジーソースコード
/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Smeared VCI Backtest", overlay=false, shorttitle="SVCI Backtest", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 10000, slippage = 5)
// Smeared Variability Channel Index
//    a variation of the VCI indicator of the same author.
// The orange line over the lime line is bullish;
// The lime line over the orange one is bearish.
//
// vitelot/yanez/Vts
// Feb 2019
//
src = close

ep1 = input(5, minval=1, title="Fast EMA period")
ep2 = input(13, minval=2, title="Slow EMA period")

sm = input(34, minval=1, title="Smearing period")
tp = input(13, minval=1, title="Trigger line period")

fixedSL = input(title="SL Activation", defval=300)
trailSL = input(title="SL Trigger", defval=1)
fixedTP = input(title="TP Activation", defval=150)
trailTP = input(title="TP Trigger", defval=1)

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 = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 6, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 19, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2030, title = "To Year", minval = 2017)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
startTimeOk()  => time >= start and time <= finish ? true : false // create function "within window of time" if statement true

atrP = 96

e1 = ema(src,ep1)
e2 = ema(src,ep2)

vci = (e1-e2)/atr(atrP)

svci = sma(vci,sm)
t = sma(svci,tp)

plot(svci, color=lime, linewidth=3, transp=0, title="Smeared VCI")
plot(t, color=orange, linewidth=3, transp=0, title="Trigger line")

hline(0, title="Reference line")

long = crossover(svci,t)
short = crossover(t,svci)

// === STRATEGY - LONG POSITION EXECUTION ===
strategy.entry("Long", strategy.long, when= long and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) 
strategy.exit("Exit", when= short)
// === STRATEGY - SHORT POSITION EXECUTION ===
strategy.entry("Short", strategy.short, when= short and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)
strategy.exit("Exit", when= long)