거북이 거래 전략 (Turtle Trading Strategy) 은 유동성 브레이크오웃을 추적하는 트렌드 다음 전략이다. 유명한 트레이더 리처드 데니스 (Richard Dennis) 가 1980년대에 트레이더가 태어날 때보다 규칙에 의해 육성될 수 있음을 증명하기 위해 개발했다. 전략의 핵심 아이디어는 가격 브레이크오웃을 추적하고 트렌드를 추적하는 것이며, 하락 위험을 제한하기 위해 돈 관리 원칙을 엄격히 준수하는 것이다.
거북이 거래 전략은 채널을 구성하기 위해 두 가지 매개 변수 N 및 N/2를 사용합니다. 구체적으로 가장 최근 N 일과 N/2 일 동안 가장 높고 낮은 가격을 계산합니다. 가격이 N 일 채널을 초과하면 긴 지위가 설정됩니다. 가격이 N/2-일 채널 아래로 떨어지면 지점이 닫습니다. 마찬가지로 가격이 N-day 채널을 넘어 하향으로 넘어갈 때 짧은 지점이 설정되고 가격이 N/2-day 채널 이상으로 상승하면 닫습니다. 목표는 위험을 제어하면서 가격 추세를 따르는 것입니다.
코드에서 N는enter_slow
그리고 N/2는enter_fast
가장 높은 가격 (slowL
그리고fastL
가장 낮은 가격 (slowS
그리고fastS
가장 최근 55일과 20일 동안의 거래액은 각각 계산됩니다.enterL2
20일 채널 아래로 떨어지면 닫습니다.exitL1
코스는 55일 채널을 넘어선 후에 코트 포지션을 개설합니다 (enterS2
20일 채널을 넘으면 닫습니다.exitS1
).
거북이 거래 전략의 가장 큰 장점은 위험 통제입니다. 가격 브레이크에 대한 포지션을 설정하고 인하에 신속하게 중단함으로써 개별 거래에서 손실을 효과적으로 제어합니다. 고정 분수 포지션 사이징의 사용은 위험을 더 감소시킵니다.
또 다른 장점은 간단한 매개 변수 선택이다. 전체 전략은 이해하기 쉽고 조정하기 쉬운 4 개의 매개 변수만 가지고 있습니다. 매개 변수 자체는 자주 최적화 할 필요가 없이 상당히 안정적입니다.
거북이 거래 전략의 가장 큰 위험은 장기적인 트렌드를 추적할 수 없다는 것입니다. 트렌드가 형성되기 시작할 때 진입 기회를 놓칠 수 있습니다. 또한, 불안한 가격 변동 환경에서 전략은 빈번한 진입과 출구를 유발하여 거래 비용과 미끄러짐 위험을 증가시킬 것입니다.
또한 고정된 매개 변수 설정은 제품과 시장 체제에 따라 매우 다르게 작동 할 수 있으며 경험에 따라 수동 조정이 필요합니다.
거북이 무역 전략은 여러 가지 방법으로 향상 될 수 있습니다.
시장 변동성과 신호 주파수를 기반으로 매개 변수 N와 N/2에 적응 기능을 추가하여 시나리오에 따라 시스템을 더 견고하게 만듭니다.
시장에 진입하기 전에 트렌드 탐지 규칙을 포함하여 불안한 시장에 잘못된 입장을 피하십시오.
더 높은 기간의 경향을 확인하고 더 낮은 기간에 거래를 하기 위해 다중 시간 프레임 접근을 채택한다.
스톱 로스 규칙을 최적화하여 후속 스톱 또는 시간 기반 스톱을 사용하여 마감량을 줄이십시오.
거북이 거래 전략은 간단한 브레이크아웃 시스템으로 트렌드를 효과적으로 추적합니다. 빠른 정지 및 고정 분량 포지션 사이즈 덕분에 위험 통제가 가장 큰 강점입니다. 동시에 전략이 더 많은 도구와 시장 조건에 맞게 확장되고 최적화 될 수있는 여러 차원을 봅니다. 전반적으로, 그것은 수치 거래의 중요한 참조인 가격 트렌드를 캡처하는 위험 제어 방법을 제공합니다.
/*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)