移動平均デュアルトラックとトレンドフォロー戦略


作成日: 2023-11-06 15:41:23 最終変更日: 2023-11-06 15:41:23
コピー: 0 クリック数: 558
1
フォロー
1617
フォロワー

移動平均デュアルトラックとトレンドフォロー戦略

概要

この戦略は,高速移動平均線と遅い移動平均線を用いて二線システムを構築し,トレンド指数ADXと組み合わせてトレンド判断を行い,動向指数DMIと組み合わせてトレンド方向を判断し,トレンドが確立された後にトレンドを追跡し,トレンドが逆転したときにタイムリーで退出し,追尾殺死を避ける.同時に,時間範囲テストと組み合わせて,戦略の効果を異なる時間段で回測することができる.

戦略原則

  1. 急速移動平均と遅い移動平均は,二線システムを構築する. 急速移動平均の上をゆっくり移動平均を横切るときは,金叉信号として,多入場する. 急速移動平均の下をゆっくり移動平均を横切るときは,死叉信号として,平仓出場する.

  2. ADXは,トレンドの存在と強さを判断するために使用される.ADXが設定キー値より大きいときは,トレンドが存在し,トレンドが強いと考えられる.トレンドが強い場合にのみ,取引信号が生成される.

  3. DMIのDI+は,トレンドの方向を判断するために使用される.DI+が正であるときは,トレンドが上昇していることを示し,DI+が負であるときは,トレンドが低下していることを示します.トレンドの方向に適合する判断のみで取引信号が生成されます.

  4. タイムスペックテストと組み合わせて,戦略の効果を異なる時間帯で測定し,戦略を検証できます.

優位分析

  1. 突破をフィルタリングして,偽突破による損失を防ぐことができる.

  2. ADXでトレンドの存在と強さを判断し,波動期に頻繁に取引を避ける.

  3. DMIを使ってトレンドの方向を判断し,トレンド操作を確実に実行し,逆転取引を避ける.

  4. 時間範囲テストは,異なる状況で戦略パラメータが有効かどうかを検証し,パラメータ設定を最適化します.

リスク分析

  1. 双線システムは空頭トラップや多頭トラップが形成されやすいため,警戒価格の回調を停止損傷に必要とする.

  2. ADXは,遅滞があり,トレンドの初期にチャンスを逃した可能性があると判断し,キー値を低下させることができる.

  3. DMIの判断方向も遅滞しており,同じくトレンドの初期を見逃す可能性があり,周期パラメータを短縮することができる.

  4. 異なる時間帯のパラメータ設定は調整が必要であり,状況に応じてパラメータを最適化する必要があります.

最適化の方向

  1. 異なる長さの周期のパラメータの組み合わせをテストして最適なパラメータを見つけることができる.

  2. ブリンラインなどの他の指標と組み合わせたダブルフィルタリングにより信号の質が向上する.

  3. ストップ・ロスの策略を追加して,損失を拡大しないようにする.

  4. 機械学習によりパラメータを自動的に最適化できます.

  5. 感情の指標やニュース面などの要素を組み合わせることで 戦略の効果が向上します.

要約する

この戦略は,移動平均,トレンド指数,動向指数の優位性を統合し,トレンドの判断と追跡を可能にします.そのパラメータの有効性を検証しながら,より多くの市場状況に適応するために継続的に最適化する必要があり,パラメータ調整,ストップスローズ戦略,多因子統合などのさらなる深化が求められ,戦略の安定性と収益性を向上させます.全体的に,この戦略は,空間を定量化するための信頼できるトレンド追跡方法を提供します.

ストラテジーソースコード
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// author: codachang0726
strategy(title = "(S)MA+ADX+DI+time", shorttitle = "(S)MA+ADX+DI+time", overlay = true)

// === INPUT MA LENGTHS ===
fastMA    = input(defval = 7,   title = "FastMA",          minval = 1, step = 1)
slowMA    = input(defval = 14,   title = "SlowMA",          minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 9,    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 = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        minval = 1, maxval = 31)
thruYear  = input(defval = 2022, title = "Thru Year",       minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

// === MA LOGIC ===
crossOv   =  sma(close, fastMA) > sma(close, slowMA)     // true when fastMA over slowMA
crossUn   =  sma(close, fastMA) < sma(close, slowMA)     // true when fastMA under slowMA

// DI+ADX
adxlen      = input(14, title="ADX Smoothing")
dilen       = input(14, title="DI Period")
keyLevel    = input(20, title="Keylevel for ADX")
[diplus, diminus, adx] = dmi(dilen, adxlen)
di = (diplus - diminus)

buy = di > 0 and crossOv and adx > keyLevel
sell = di < 0 and crossUn and adx > keyLevel

buy_time = buy and not buy[1]
sell_time = sell and not sell[1]

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy_time)    // enter long when "within window of time" AND crossover
strategy.close("L", when = window() and sell_time)                   // exit long when "within window of time" AND crossunder         

// === PLOTTING ===
bgcolor(color = showDate and window() ? color.gray : na, transp = 90)                                     // plot "within window of time"
plot(sma(close, fastMA), title = 'FastMA', color = color.yellow, linewidth = 2, style = plot.style_line)  // plot FastMA
plot(sma(close, slowMA), title = 'SlowMA', color = color.aqua,   linewidth = 2, style = plot.style_line)  // plot SlowMA