
この戦略は,有名な海取引法に基づいており,ドンチアン通路指標を用いて価格突破を判断し,ATR指標と組み合わせてストップロスを設定し,トレンド追跡を実現する.この戦略の優点は,撤回制御能力が強く,単一のストップを効果的に制御し,連続損失の確率を低減する能力である.しかし,この戦略は,取引品種に適応性が弱いため,通路パラメータを最適化する必要がある.全体的に,この戦略は,海取引法の入門版として,海取引法の有効性を検証するために使用でき,また,量化取引の基礎策の1つとして使用できます.
この戦略は主に2つの指標であるDonchian ChannelとATRに基づいています.
ドンチアンチャネルは最高値と最低値から計算される。策略のデフォルト設定チャネル長さは20日であり,20日以内の最高値と最低値でチャネルを描く。価格がチャネルを突破すると,買取シグナルを生成し;価格がチャネルを突破すると,売り込みシグナルを生成する。
ATR指標は,市場の変動を測定し,ストップを設定する.標準ATR周期は20日である.戦略は,ATRの2倍をストップポイントとして設定する.
取引の論理は以下の通りです.
価格がチャネルを突破すると,追加入場を行う.
ストップポイントは,入場時の低点をATRの2倍減算したものです.
価格が通路の下部に突破すると,平準多頭ポジション.
価格が通路の下部に突破すると空白入場.
スタンプポイントは,入場時の高点とATRの2倍である.
価格が通路の上沿を突破すると,空頭ポジション.
総じて,この戦略は,トレンドの方向と入場時刻を判断するためにDonchian通路に依存し,ATRのストップを設定してリスクを制御し,トレンドの追跡を可能にします.
この戦略の利点は以下の通りです.
撤回制御能力が強い。ATR指標を用いて止損を設定し,単一の損失を効果的に制御することができる。
トレンド・トラッキングを実現した. ドンキアン・チャネルは価格突破を効果的に判断し,トレンド転換を指示する.
高波動の品種に適している。ATR指標は市場の波動率を考慮し,止損設定は異なる品種の特徴に適している。
戦略はシンプルでわかりやすく,実行は簡単です.
Python言語で柔軟に書き込み,最適化策も用意されている.
この戦略にはいくつかのリスクがあります.
経路のパラメータは最適化が必要である.異なる品種と時間周期で,経路のパラメータは,市場の特徴に合わせて調整が必要である.
連続停止のリスク.異常な状況では,短期間に複数の停止を誘発して,大きな損失を引き起こす可能性があります.
ATRパラメータはテストが必要である.ATRパラメータは,直接的に止損効果に影響し,異なる品種と変動環境で,調整が必要である.
取引頻度は高すぎます. 傾向がはっきりしない揺れ動いている市場では,過剰な交差信号が生じる可能性があります.
利潤は限られているかもしれない. 戦略は止損を主として,トレンドの全幅を効果的に捉えることはできない.
誇張された状況では止損は不十分であるかもしれない.いくつかの異常な状況では,価格が飛躍すると,止損が直接引き起こされるかもしれない.
この戦略は以下の点で最適化できます.
経路のパラメータを最適化し,異なるパラメータが異なる品種に適性があるかをテストする.
フィルタリング条件を追加し,波動的な状況で過剰な信号を発生させないようにする. 突破幅または取引量フィルタリングを考慮することができる.
ATRサイクルパラメータを最適化し,異なるパラメータが止損効果に影響を及ぼすことをテストする.
ピラミッド入場戦略を追加し,トレンド状況でポジションを追加し,利益の余地を増やす.
他の指標と組み合わせて,フィルタリング効果を高める.例えば,MACD,KDなどの指標は,トレンドの状況を判断し,逆転取引を避ける.
スリップポイント,手数料などの取引コストを最適化してストップ・ロスの位を設定する. ストップ・ロスが近づくのを防ぐ.
異なる品種の適応性をテストし,特定の品種に合わせてパラメータを調整する.
この戦略は海取引法の入門版であり,全体的に戦略の考え方はシンプルで明確で,撤回制御能力は強い.海取引法の原理を有効に検証することができる.しかし,この戦略は取引品種に適応性が弱い.異なる品種に応じて具体的な最適化パラメータが必要である.戦略の効果を発揮するためには.パラメータ最適化,フィルタリング条件の増加などの改善とともに,この戦略は,量化取引の基本トレンド追跡戦略の1つになる.
/*backtest
start: 2022-10-10 00:00:00
end: 2023-10-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//Based on Turtle traders strategy: buy/sell on Donchian breakouts and stop loss on ATR 2x
// initial version considerations :
//// 1. Does not consider filter for avoiding new entries after winning trades (filtering rule from Turtle Strategy on 20 day breakout strategy)
//// 2. Does not consider pyramiding (aditional entries after 1N price movements)
strategy("Turtle trading strategy (Donchian/ATR)", overlay=true)
enter_period = input(20, minval=1, title="Enter Channel")
exit_period = input(10, minval=1, title="Exit Channel")
offset_bar = input(0,minval=0, title ="Offset Bars")
direction = input("Long",options=["Long","Short"],title="Direction")
max_length = max(enter_period,exit_period)
atrmult = input(2,title="ATR multiplier (Stop Loss)")
atrperiod = input(20,title="ATR Period")
closed_pos = false
dir_long = direction == "Long"? true : false
atr = atr(atrperiod)
upper = dir_long ? highest(enter_period): highest(exit_period)
lower = dir_long ? lowest(exit_period): lowest(enter_period)
atrupper = close + atr
atrlower = close - atr
plotted_atr = dir_long ? atrlower : atrupper
//basis = avg(upper, lower)
l = plot(lower, style=line, linewidth=3, color=lime, offset=1)
u = plot(upper, style=line, linewidth=3, color=lime, offset=1)
a = plot(plotted_atr, style=line,linewidth=2,color=red,offset=1)
//plot(basis, color=yellow, style=line, linewidth=1, title="Mid-Line Average")
//break upper Donchian (with 1 candle offset) (buy signal)
break_up = (close >= upper[1])
//break lower Donchian (with 1 candle offset) (sell signal)
break_down = (close <= lower[1])
stop_loss = dir_long ? (close<=plotted_atr[1]) : (close>=plotted_atr[1])
if break_up and dir_long
strategy.entry("buy", strategy.long, 1)
closed_pos :=false
if (break_down or stop_loss) and dir_long
strategy.close("buy")
if break_down and not dir_long
strategy.entry("sell", strategy.short, 1)
closed_pos :=false
if (break_up or stop_loss) and not dir_long
strategy.close("sell")
closed_pos :=true
losing_trade = strategy.equity[0]<strategy.equity[1]
//plotshape(losing_trade,text="Losing!")
plotshape(stop_loss,style=dir_long?shape.labeldown:shape.labelup,text="Stop!")
//plot(strategy.equity)