トレンドトラッキング戦略を持つ二重移動平均チャネル

作者: リン・ハーンチャオチャン,日付: 2023-11-06 15:41:23
タグ:

img

概要

この戦略は,トレンド判断のためのトレンドインデックスADXとトレンド方向指数DMIを組み合わせ,トレンドが確立された後にトレンドを追跡し,トレンドが逆転するときにタイムリーに出るため,高速で遅い移動平均を活用し,ダブルレールシステムを構築する.また,異なる時間段間の戦略の有効性をバックテストするためにタイムレンジテストも組み込む.

取引の論理

  1. 速度の低い移動平均値は,二重レールチャネルシステムを構築する. 速度の高いMAが遅度の高いMAを横切ると,それは長い間にゴールデンクロスエントリー信号である. 速度の高いMAが遅度の高いMAを下回ると,それは死亡クロス出口信号である. 速度の高いMAが遅度の高いMAを下回ると,それは死亡クロス出口信号である.

  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


もっと