ダブルチャネル・ブレークスルー・タートル戦略

作者: リン・ハーンチャオチャン, 日付: 2024-01-05 16:16:44
タグ:

img

概要

ダブルチャネルブレークスルータートルストラテジーは,ドンチアンチャネル指標を使用して取引信号を生成するブレークアウト戦略である.この戦略は,同時に高速と遅いチャネルを2つとも確立する.高速チャネルはストップ損失価格を設定するために使用され,スローチャネルは開閉信号を生成するために使用される.価格がスローチャネルの上部レールを破ると,ロング;価格が下部レールを破ると,ショートする.この戦略は,強いトレンドトラッキングと良い引き下げ制御の特徴を持っています.

原則

ダブルチャネルブレークスルータートル戦略のコアロジックは,ドンチアンチャネル指標に基づいています.ドンチアンチャネルは,最も高い高値と最も低い低値から計算された上部レール,下部レール,中部レールで構成されています.この戦略は,ユーザーによって設定されたパラメータと遅いチャネルのための50バー,高速チャネルのための20バーのデフォルト期間で,同時に高速チャネルと遅いチャネルの両方を作成します.

スローチャネルの上下線 (ブルーライン) は,取引信号を生成するために使用される.価格が上下線を突破すると,ロング;価格が下下線を突破すると,ショート.高速チャネルのミドルレール (レッドライン) はストップ損失に使用される.ロングポジションのストップ損失価格は高速チャネルのミドルレールである.ショートポジションのストップ損失価格は高速チャネルのミドルレールでもある.

遅いチャネルは信号を生成し,高速チャネルはリスクを制御する.ダブルチャネルを使用することで,信号の安定性とリスク制御の両方を保証する.背景の色は現在の位置方向を示し,緑は長い,赤は短い.

また,戦略はリスクパーセントとポジションサイズも設定する.リスクパーセントは2%にデフォルトし,ポジションサイズはリスクパーセントとチャネル波動性に基づいて計算される.これは取引リスクと段階的なポジション増加を効果的に制御する.

利点

二重チャネル突破性タートル戦略には以下の利点があります.

  1. 強力なトレンド追跡能力.トレンドを決定するためにドンチアンチャネルを使用することで,中長期のトレンドを効果的に把握することができます.ダブルチャネルデザインは,戦略が強いトレンド市場のみを追跡することを保証します.

  2. 取引は,取引先のリスクの減少とリスク管理を保証する.高速チャネルの中央レールはストップ損失として機能する.上から中間レール,下から中間レールはリスクゾーンである.これは取引ごとに制御可能な損失を保証する.戦略は,最大アカウント損失を直接制限するためにリスクパーセントも設定する.

  3. 安定した取引シグナル.大型スローチャネルパラメータは,過剰な取引を避けるため,チャネルを形成するのに比較的長い時間がかかります.高速チャネルは損失を止め,短期的訂正を捕捉します.両者は安定した取引シグナルを形成するために互いを補完します.

  4. 優れたポジションとリスク管理.戦略は,リスク露出管理のためのポジションサイズを計算するためにドンキアンチャネル波動性を使用する.段階的なポジション増加は,ロングとショートポジションをバランスする.

  5. 直感的な可視化. ダブルチャネル,ストップ損失線,ポジションバックグラウンドは,戦略論理の理解を容易にするために明確にプロットされています. 一方,最大引き下げ,最大損失,その他の重要なメトリックも表示されます.

リスク

ダブルチャネル・ブレークスルー・タートル戦略には リスクもあります

  1. Intraday 価格を効果的に利用できない.タートルはチャネルブレイク時にのみポジションを開く.ポジションを増やすためにより正確な状況を使用できない.これは最適化によって改善することができる.

  2. ストップ・ロストポイントは狩猟傾向にある.タートルズの固定ミドルレールのストップ・ロストは,活発な市場で容易にヒットすることができます.これはミドルレールのパラメータを動的に調整する必要があります.

  3. ダブルチャネルパラメータは細かな調整が必要である.適切なパラメータ設定は合理的な安定信号にとって不可欠である.現在の固定パラメータは市場の変化に適応できないため,適応機能を導入する必要がある.

  4. オーバーナイトおよびプレマーケット情報を使用できない.現在,戦略は,実際の市場データに基づいてトレンドを判断するのみであり,オバーナイトおよびプレマーケット価格アクションで取引決定を伝えることができない.これはデータ調整によって対処できる.

オプティマイゼーションの方向性

ダブルチャネルブレークスルータートル戦略の主な最適化方向は以下の通りである.

  1. ポジションを調整するには日内価格を使用します.ポジションは,単なるロング/ショートではなく,チャネルからの価格の距離に基づいて調整できます.

  2. インテリジェントストップ損失戦略. 固定ストップ損失狩りを避けるために,固定ミドルレールの停止を動的計算に変更します.

  3. アダプティブチャネルパラメータ最適化.チャネルパラメータが手動固定値ではなく,市場の状況に基づいて自動的に調整できるようにする.

  4. 市場状況がより完全になるために,一日の価格と市場前の価格だけでなく,一日の価格と市場前の価格も考慮します.

  5. 複数の株とインデックスを組み合わせ 戦略を複数の株に適用し 強化されたアルファのために 株間およびインデックス間仲介の機会を 与えます

結論

結論として,ダブルチャネルブレークスルータートルストラテジーは,リスク制御を組み込み,安定した,効率的な傾向の戦略である.高速と遅いチャネルの二重利用は,信号の安定性とリスク管理の両方を保証する.また,ポジション背景,最大引き下げ,ポジションサイズ化も,この戦略を容易に管理し最適化することができます.一般的に,これは徹底的な研究と適用に値する高品質の定量戦略です.


/*backtest
start: 2023-12-05 00:00:00
end: 2024-01-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy("Noro's RiskTurtle Strategy", shorttitle = "RiskTurtle str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong  = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
risk      = input(2, minval = 0.1, maxval = 99, title = "Risk size, %")
fast      = input(20, minval = 1, title = "Fast channel (for stop-loss)")
slow      = input(50, minval = 1, title = "Slow channel (for entries)")
showof    = input(true, defval = true, title = "Show offset")
showll    = input(true, defval = true, title = "Show lines")
showdd    = input(true, defval = true, title = "Show label (drawdown)")
showbg    = input(true, defval = true, title = "Show background")
fromyear  = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear    = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth   = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday   = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today     = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Donchian price channel fast
hf = highest(high, fast)
lf = lowest(low, fast)
center = (hf + lf) / 2

//Donchian price chennal slow
hs = highest(high, slow)
ls = lowest(low, slow)

//Lines
colorpc = showll ? color.blue : na
colorsl = showll ? color.red : na
offset = showof ? 1 : 0
plot(hs, offset = offset, color = colorpc, title = "Slow channel high")
plot(ls, offset = offset, color = colorpc, title = "Slow channel low")
plot(center, offset = offset, color = colorsl, title = "Fast channel stop-loss")

//Background
size = strategy.position_size
colorbg = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(colorbg, transp = 70)

//Var
loss = 0.0
maxloss = 0.0
equity = 0.0
truetime = true

//Lot size
risksize = -1 * risk
risklong = ((center / hs) - 1) * 100
coeflong = abs(risksize / risklong)
lotlong = (strategy.equity / close) * coeflong
riskshort = ((center / ls) - 1) * 100
coefshort = abs(risksize / riskshort)
lotshort = (strategy.equity / close) * coefshort

//Orders
strategy.entry("Long", strategy.long, lotlong, stop = hs, when = needlong and strategy.position_size == 0 and hs > 0 and truetime)
strategy.entry("Short", strategy.short, lotshort, stop = ls, when = needshort and strategy.position_size == 0 and ls > 0 and truetime)
strategy.exit("LongExit", "Long", stop = center, when = needlong and strategy.position_size > 0)
strategy.exit("Short", stop = center, when = needshort and strategy.position_size < 0)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")
    
if showdd

    //Drawdown
    max = 0.0
    max := max(strategy.equity, nz(max[1]))
    dd = (strategy.equity / max - 1) * 100
    min = 100.0
    min := min(dd, nz(min[1]))
    
    //Max loss size
    equity := strategy.position_size == 0 ? strategy.equity : equity[1]
    loss := equity < equity[1] ? ((equity / equity[1]) - 1) * 100 : 0
    maxloss := min(nz(maxloss[1]), loss)
    
    //Label
    min := round(min * 100) / 100
    maxloss := round(maxloss * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%" + "\nMax.loss " + tostring(maxloss) + "%"
    var label la = na
    label.delete(la)
    tc = min > -100 ? color.white : color.red
    osx = timenow + round(change(time)*10)
    osy = highest(100)
    // la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)

もっと