亀取引に基づく脱出戦略

作者: リン・ハーンチャオチャン,日付: 2023年10月17日 17:22:34
タグ:

img

概要

この戦略は有名なタートル・トレーディングシステムに基づいている.ブレイクアウトを特定するためにドンチアンチャネルとトレンドフォローのためにストップ・ロスを設定するためにATRを使用している.利点は,単一の取引損失を効果的に制限することによって強い引き下げ制御能力である.しかし,異なる取引機器の適応性は弱で,パラメータ調整が必要である.全体として,タートル・トレーディングシステムの導入版として,この戦略は,タートル・トレーディング規則の有効性を検証するために使用され,基本的な定量的な取引戦略としても機能する.

原則

この戦略は主にドンチアン運河とATRという2つの指標に基づいています.

ドンチアンチャネルは,最高値と最低値で構成される.デフォルトチャネル長さは20日であり,20日間の最高値と最低値でプロットされている.価格は上位帯を超えると購入信号が生成され,価格が下位帯を超えると販売信号が生成される.

ATRは市場の波動性を測定し,ストップ・ロスの設定に使用される.デフォルトのATR期間は20日である.この戦略は,ストップ・ロスのレベルとして2N ATRを使用する.

具体的な取引論理は:

  1. 価格が上位帯を超えるとロングに

  2. ストップ・ロスを 2N ATR を引く低価格で設定する.

  3. 価格が下帯を下回るとロングポジションを閉じる.

  4. 価格が下帯を下回るとショートします.

  5. ストップ・ロスは入場時の高価格+2N ATRで設定します

  6. 価格が上位帯を超えるとショートポジションを閉じる.

概要すると,戦略は,ドンチアンチャネルでトレンド方向とエントリーシグナルを特定し,トレンドをフォローするためにATRベースのストップ損失でリスクを制御します.

利点分析

この戦略の主な利点は以下の通りです.

  1. 強い引き下げ制御能力.ATRストップ損失は単一の取引損失を効果的に制限することができます.

  2. 傾向を追跡する能力 ドンチアン・チャネルは 突破やトレンドの変化を効果的に識別できる

  3. 高波動性を持つ楽器に適用されます. ATRはストップロスの設定において市場の波動性を考慮します.

  4. シンプルで明快な論理で 分かりやすく実行できます

  5. Python言語で最適化するための柔軟性

リスク分析

この戦略のリスクは以下の通りです.

  1. チャンネルパラメータは,異なる機器と時間枠に最適化する必要があります.

  2. 連続的なストップ損失リスク 変動する市場条件下で複数のストップ損失が発生する可能性があります.

  3. ATR パラメータはバックテストが必要です.ATRはストップ・ロースに直接影響し,波動性に基づいて調整する必要があります.

  4. 取引頻度が高く 波動の範囲の低い市場では ショットソー信号が多すぎる可能性があります

  5. 利益の可能性は限られている.ストップ・ロスは戦略に重点を置くため,トレンドの利益を完全に把握することはできません.

  6. 不安定な動き中に不十分なストップ損失. 価格ギャップが直接ストップ損失を誘発する可能性があります.

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

戦略は以下の点で改善できる:

  1. 異なる計器のためのチャネルパラメータを最適化します.

  2. 波長帯域市場の下での信号の過剰を避けるためにフィルターを追加します. ブレイクマグニチュードやボリュームフィルターを考慮してください.

  3. ATR 期間パラメータとストップ・ロストへのテストの影響を最適化する.

  4. ポジションのサイズを増やしてトレンドの利益を最大化します

  5. 誤った信号を避けるために MACD,KDなどの他の指標を組み込む.

  6. ストップロスの調整は,スライドと手数料のコストに基づいて行う.

  7. 異なる機器で適応性をテストし,パラメータを最適化します

概要

この戦略は,カメ取引システムの導入版として,シンプルで明確な論理,強力な引き下げ制御能力を有し,カメ取引の原則を効果的に検証することができます. しかし,楽器間の適応性は弱いため,特定の楽器に基づいてパラメータを調整する必要があります.パラメータチューニング,フィルターを追加などの最適化により,これは定量的な取引のための戦略をフォローする基本的なトレンドとして機能することができます.


/*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)


    



もっと