ブレイクアウトの勢いを追跡するタートル取引戦略


作成日: 2023-12-25 17:12:05 最終変更日: 2023-12-25 17:12:05
コピー: 0 クリック数: 774
1
フォロー
1623
フォロワー

ブレイクアウトの勢いを追跡するタートル取引戦略

概要

亀の取引戦略 (Turtle Trading Strategy) は,突破の動力を追跡するトレンド追跡戦略である.この戦略は,著名なトレーダーであるリチャード・デニス (Richard Dennis) が1980年代に開発し,トレーダーが規則によって育成できるかどうかを検証するために使用された.この戦略の核心心理は,価格突破を追跡し,トレンドを追跡することであり,下行リスクを制限するために,資金管理の原則を厳格に遵守することである.

戦略原則

海取引戦略は,2つのパラメータNとN/2を使用してチャネルを構築する.具体的には,最近N日とN/2日の最高価格,最低価格をそれぞれ計算する.価格がN日チャネルを超えると多頭ポジションを確立し,価格がN/2日チャネルを下回ると平仓を確立する.価格がN日チャネルを下回ると空頭ポジションを確立し,価格がN/2日チャネルを超えると平仓を確立する.これは価格の傾向を追跡しながらリスクを制御する目的である.

Nはコードに一致します.enter_slowN/2 対応するenter_fast◎ 価格が55日前と20日前で最高だった場合をそれぞれ計算します.slowLそしてfastL最低価格lowest(slowSfastS)。当价格超过55天通道时做多(enterL2),当价格跌破20天通道时平多仓(exitL1);当价格跌破55天通道时做空(enterS2),当价格超过20天通道时平空仓(exitS1`)。

優位分析

海取引戦略の最大の利点は,リスク管理にある.価格突破時にポジションを確立し,価格引き戻し時に迅速に止まることで,単一損失を効果的に制御することができる.同時に,固定シェア資金管理原理を採用し,リスクをさらに低減する.

もう1つの優点は,パラメータの選択が簡単であることです.全戦略は4つのパラメータのみで,簡単に理解し,調整できます.パラメータ自体は比較的安定しており,頻繁に最適化する必要はありません.

リスク分析

海取引戦略の最大のリスクは,長期のトレンドを追跡できないことにある.トレンドが形成され始めると,この戦略は入場機会を逃す可能性がある.また,価格の揺れ動いているトレンドでは,この戦略は,取引コストと滑り場リスクを増加させ,頻繁に平仓を打つ.

さらに,固定パラメータ設定は,異なる品種と市場環境で効果が大きく異なる可能性があります.これは人工経験によって調整する必要があります.

最適化の方向

海の取引戦略は,以下の点で最適化できます.

  1. パラメータの自律調整機能を追加.N,N/2のパラメータは,市場の波動性や信号の頻度に応じて自動的に調整され,より多くのシナリオに適応できるようにする.

  2. トレンド判断のルールを追加する.入場前にトレンドの方向を判断し,価格の揺れ動向の誤入場を避ける.

  3. 複数の時間周期unity戦略を組み合わせる.より高い時間周期でトレンドの方向を決定し,より低い時間周期で入場する.

  4. トレーリングストップまたは時間ストップ,撤回を減らす.

要約する

海取引戦略は,単純な突破システムによって効果的なトレンド追跡を実現している.リスク管理は,迅速なストップと固定資金管理のおかげで,この戦略の最大の利点である.同時に,この戦略は,より多くの品種と市場環境に適応するために,複数の次元から拡張され,最適化されることも見られます.全体的に,海取引戦略は,価格の傾向を捉えるためのリスク管理可能な方法を提供し,量化取引の重要な参照です.

ストラテジーソースコード
/*backtest
start: 2022-12-24 00:00:00
end: 2023-12-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//oringinally coded by tmr0, modified by timchep
//original idea from «Way of the Turtle: The Secret Methods that Turned Ordinary People into Legendary Traders» (2007) CURTIS FAITH
strategy("Turtles", shorttitle = "Turtles", overlay=true, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100)
//////////////////////////////////////////////////////////////////////
// Component Code Start
testStartYear = input(2011, "Backtest Start Year")
testStartMonth = input(12, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=false)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop
//////////////////////////////////////////////////////////////////////

shortingEnabled = input(title="Enable Shorting?", type=bool, defval=true)

enter_fast = input(20, minval=1)
exit_fast = input(10, minval=1)
enter_slow = input(55, minval=1)
exit_slow = input(20, minval=1)

fastL = highest(enter_fast)
fastLC = lowest(exit_fast)
fastS = lowest(enter_fast)
fastSC = highest(exit_fast)

slowL = highest(enter_slow)
slowLC = lowest(exit_slow)
slowS = lowest(enter_slow)
slowSC = highest(exit_slow)

enterL1 = high > fastL[1] 
exitL1 = low <= fastLC[1] 
enterS1 = low < fastS[1]
exitS1 = high >= fastSC[1]

enterL2 = high > slowL[1] 
exitL2 = low <= slowLC[1] 
enterS2 = low < slowS[1]
exitS2 = high >= slowSC[1]


if testPeriod()
    strategy.entry("fast L", strategy.long, when = enterL1) 
    
    if not enterL1
        strategy.entry("slow L", strategy.long, when = enterL2)
        
    strategy.close("fast L", when = exitL1)
    strategy.close("slow L", when = exitL2)

if shortingEnabled and testPeriod()
    strategy.entry("fast S", strategy.short, when = enterS1)
    if not enterS2
        strategy.entry("slow S", strategy.short, when = enterS2)
        
    strategy.close("fast S", when = exitS1)
    strategy.close("slow S", when = exitS2)