이 전략은 유명한 거북이 거래 시스템에 기반하고 있으며, 브레이크아웃을 식별하고 트렌드를 따르는 스톱 로스를 설정하기 위해 돈치안 채널을 사용합니다. 이점은 단일 거래 손실을 효과적으로 제한함으로써 강력한 드라우다운 제어 능력입니다. 그러나 다른 거래 도구에 대한 적응력이 약하여 매개 변수 조정이 필요합니다. 전반적으로 거북이 거래 시스템의 도입 버전으로서이 전략은 거북이 거래 규칙의 효과를 검증하는 데 사용될 수 있으며 기본적인 양적 거래 전략으로도 사용될 수 있습니다.
이 전략은 주로 두 가지 지표에 기반합니다. 돈치안 채널과 ATR입니다.
돈치안 채널은 최고 최고와 최저 최저로 구성되어 있습니다. 기본 채널 길이는 20 일이며, 20 일 최고 최고와 최저 최저로 그려집니다. 가격이 상위 대역 이상으로 돌파하면 구매 신호가 생성되며 가격이 하위 대역 아래에 돌파하면 판매 신호가 생성됩니다.
ATR는 시장의 변동성을 측정하고 스톱 로스 설정을 위해 사용됩니다. 기본 ATR 기간은 20일입니다. 전략은 스톱 로스 수준으로 2N ATR을 사용합니다.
구체적인 거래 논리는 다음과 같습니다.
가격이 상위 범위를 넘으면 롱으로 가자
엔트리 마이너스 2N ATR의 낮은 가격으로 스톱 로스를 설정합니다.
가격이 하위 범위를 넘으면 긴 포지션을 닫습니다.
가격이 하위 범위를 넘어갈 때 단위로 가세요.
엔트리 높은 가격 + 2N ATR에 Stop Loss를 설정합니다.
가격이 상위 범위를 넘으면 짧은 포지션을 닫습니다.
요약하자면, 전략은 동향 방향과 입점 신호를 돈치안 채널로 식별하고, 트렌드를 따라 ATR 기반 스톱 로스로 위험을 제어합니다.
이 전략의 주요 장점은 다음과 같습니다.
강력한 마감 제어 능력 ATR 스톱 손실은 단일 거래 손실을 효과적으로 제한 할 수 있습니다.
트렌드를 따라갈 수 있는 능력. 돈치안 채널은 파업과 트렌드 변화를 효과적으로 식별할 수 있습니다.
높은 변동성 기기에 적용됩니다. ATR은 스톱 로스 설정에서 시장 변동성을 고려합니다.
단순하고 명확한 논리, 이해하기 쉽고 실행하기 쉽습니다.
파이썬 언어로 최적화할 수 있는 유연성
이 전략의 몇 가지 위험은 다음과 같습니다.
채널 매개 변수는 다른 기기와 시간 프레임에 최적화되어야 합니다.
연속적인 스톱 로스 위험. 변동적인 시장 조건에서 여러 개의 스톱 로스 트리거가 발생할 수 있습니다.
ATR 매개 변수는 백테스팅이 필요합니다. ATR은 스톱 로스에 직접 영향을 미치며 변동성에 따라 조정되어야합니다.
잠재적으로 너무 높은 거래 빈도. 너무 많은 윙사 신호가 범위에 묶인 시장에서 발생할 수 있습니다.
제한된 수익 잠재력. 전략은 스톱 로스에 초점을 맞추고 트렌드 이윤을 완전히 포착 할 수 없습니다.
변동적인 움직임 중에 충분한 스톱 손실이 없습니다. 가격 격차는 직접적으로 스톱 손실을 유발할 수 있습니다.
이 전략은 다음과 같은 측면에서 개선될 수 있습니다.
각기 다른 기기에 대한 채널 매개 변수를 최적화합니다.
범위에 묶인 시장에서 너무 많은 신호를 피하기 위해 필터를 추가하십시오. 브레이크오웃 크기 또는 볼륨 필터를 고려하십시오.
ATR 기간 매개 변수 및 스톱 손실에 대한 테스트 영향을 최적화합니다.
피라미드 엔트리를 추가하여 트렌드 이윤을 극대화하기 위해 포지션 크기를 증가시킵니다.
잘못된 신호를 피하기 위해 MACD, KD와 같은 다른 지표를 포함합니다.
스리프 및 수수료 비용을 기준으로 스톱 로스를 조정합니다.
다양한 기기에 대한 적응력을 테스트하고 매개 변수를 최적화합니다.
거북이 거래 시스템의 도입 버전으로,이 전략은 간단하고 명확한 논리, 강한 드라우다운 제어 능력을 가지고 있으며, 효과적으로 거북이 거래의 원리를 검증 할 수 있습니다. 그러나 도구에 대한 적응력은 약하며 특정 도구에 따라 매개 변수를 조정해야합니다. 매개 변수 조정, 필터 추가와 같은 최적화로, 이것은 양적 거래에 대한 전략을 따르는 기본 추세로 작용 할 수 있습니다.
/*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)