ドンチャンチャネルトレンドフォロー戦略


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

ドンチャンチャネルトレンドフォロー戦略

概要

唐通道トレンド追跡策略は,唐通道指標に基づくトレンド追跡策略である.この策略は,異なる周期の最高価格と最低価格を計算し,上軌,下軌,中軌を形成し,市場のトレンド方向を判断し,トレンド追跡取引を実現する.

戦略原則

この戦略は,まず,反転時間帯を設定し,次に多頭と空頭開設ルールを定義する.

多頭の場合,価格が上方から東洋通路の軌道に乗ったとき,多頭開場を行う.価格が下方から下方軌道に乗ったとき,多頭平場を行う.

空頭については,価格が唐通路の下線を突破したとき,空頭開場を行う.価格が上線を突破したとき,空頭平仓を行う.

戦略はまた,止損退出機構を設定するためにATR指標を導入した.ATR値は,止損位として係数で掛けられる.

具体的には,多頭ストップは,開設価格にATRのストップ値を減算し,空頭ストップは開設価格にATRのストップ値を加算する.

この戦略は,通通路の上下線とATRの止損線を同時に描画し,完全な取引システムを形成している.

戦略的優位性

  • トンチアン通路を使ってトレンドの方向を判断し,ある程度のトレンド追跡能力を有する.

  • 唐通路のSmootherパラメータは調整可能で,パラメータを最適化することで最適なパラメータの組み合わせを探せます.

  • ATR指標のセット・ストップ・メカニズムと組み合わせたリスクは,効果的にコントロールできます.

  • 多空頭取引のルールはわかりやすく,入門学習に適しています.

  • コード構造は明確で,理解し,二次開発が容易です.

戦略リスク

  • トンチョン通路は,収支範囲内の価格変動に対して,誤った取引のリスクがある.

  • ATRの止損範囲の設定が不適切で,止損があまりにも広すぎたり,あまりにも敏感すぎたりする可能性があります.

  • 多空頭ポジションは集中しすぎ,ポジション管理のルールを設定する必要がある.

  • 取引品種の適性については検証が必要で,異なる品種のパラメータは独立に最適化が必要である.

  • 取引費用も考慮し,高額な環境で調整する必要があります.

戦略最適化の方向性

  • 唐通路の通路周期パラメータを最適化して,最適なパラメータ組み合わせを探します.

  • 異なるATR係数設定を試して,最適な止損範囲を見つけます.

  • ATRのストップをベースに移動ストップを導入し,利益をロックしてみてください.

  • 市場状況に応じて多空頭ポジションの割合を適切に調整する.

  • 異なる品種のパラメータの健性をテストし,一般的なパラメータの組み合わせを探します.

  • 戦略の安定性を高めるために,音叉指数などのフィルターを導入する研究が行われている.

  • 異なる取引コスト環境のテストパラメータによる適応性

要約する

全体として,この戦略は比較的単純なトレンド追跡戦略であり,その核心は唐津通路の適用にある.この戦略の優点は,単純に分かりやすく,学習に適していることにあるが,パラメータとリスクに対して最適化する必要がある.さまざまな最適化手段を豊富に活用することで,戦略の安定性と収益性を向上させる見込みがある.

ストラテジーソースコード
/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 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/
// © kriswaters

//@version=4
strategy("Donchian Channels Strategy by KrisWaters", overlay=true ) 

// Date filter
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2017, title = "From Year", minval = 1900)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 9999, 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
window()  => true // create function "within window of time"

// Strategy Settings
canEnterLong = input(true, title="Can Enter Long Position")
canEnterShort = input(false, title="Can Enter Short Position")

showLongChannel = input(true, title="Show Donchian Long Channels")
showShortChannel = input(false , title="Show Donchian Short Channels")

useAtrAsStopRule = input(false, title="Enable ATR Stop Rule") 

// DonCcian Channel Lengths
longUpperLength = input(20, minval=1)
longLowerLength = input(10, minval=1)

shortUpperLength = input(10, minval=1)
shortLowerLength = input(20, minval=1)

// Donchian indicator calculations
longUpperValue = highest(high,longUpperLength)
longLowerValue = lowest(low,longLowerLength)

shortUpperValue = highest(high,shortUpperLength)
shortLowerValue = lowest(low,shortLowerLength)

// Plot Donchian Channels
uLong = plot(showLongChannel ? longUpperValue : na, color=color.green, offset=1)
lLong = plot(showLongChannel ? longLowerValue : na, color=color.green, offset=1)

uShort = plot(showShortChannel ? shortUpperValue : na, color=color.red, offset=1)
lShort = plot(showShortChannel ? shortLowerValue : na, color=color.red, offset=1)

// Styling
fill(uLong,lLong, color=color.green, transp=95, title="Long Arkaplan")
fill(uShort,lShort, color=color.red, transp=95, title="Short Arkaplan")

// Stop-loss value calculations
atrMultiplier = 2.0
atrValue = atr(20)
longStopValue = open - (atrMultiplier*atrValue)
shortStopValue = open + (atrMultiplier*atrValue)

// Plot stop-loss line
plot(useAtrAsStopRule ? longStopValue : na, color=color.red, linewidth=2, offset=1)
plot(useAtrAsStopRule ? shortStopValue : na, color=color.red, linewidth=2, offset=1)

// Long and Short Position Rules
if canEnterLong and na(longUpperValue) != true and na(longLowerValue) != true and window()
    strategy.entry("Long", true, stop=longUpperValue)
    strategy.exit("Long Exit", "Long", stop=useAtrAsStopRule ? max(longLowerValue,longStopValue) : longLowerValue)
    
if canEnterShort and na(shortUpperValue) != true and na(shortLowerValue) != true and window()
    strategy.entry("Short", false, stop=shortLowerValue)
    strategy.exit("Short Exit", "Short", stop=useAtrAsStopRule ? min(shortUpperValue,shortStopValue) : shortUpperValue)