이중 채널 돌파구 거북이 전략 (Double Channel Breakthrough Turtle Strategy) 은 돈치안 채널 지표를 사용하여 거래 신호를 생성하는 브레이크아웃 전략이다. 이 전략은 동시에 빠르고 느린 채널을 둘 다 설정한다. 빠른 채널은 스톱 로스 가격을 설정하는 데 사용되며 느린 채널은 오픈 및 클로징 신호를 생성하는 데 사용됩니다. 가격이 느린 채널의 상부 레일을 통과하면 길게; 가격이 하부 레일을 통과하면 짧게 이동합니다. 이 전략은 강력한 트렌드 추적과 좋은 드래다운 제어의 특성을 가지고 있습니다.
이중 채널 돌파구 거북이 전략의 핵심 논리는 돈치안 채널 지표에 기반합니다. 돈치안 채널은 가장 높은 가격과 가장 낮은 낮은 가격에서 계산된 상부 레일, 하부 레일 및 중부 레일로 구성됩니다. 이 전략은 사용자가 설정한 매개 변수와 느린 채널의 50 바와 빠른 채널의 20 바의 기본 기간으로 동시에 빠르고 느린 채널을 생성합니다.
느린 채널의 상위 및 하위 레일 (나뭇가지) 은 거래 신호를 생성하는 데 사용됩니다. 가격이 상위 레일을 통과 할 때, 길게 이동; 가격이 하위 레일을 넘어갈 때, 짧게 이동합니다. 빠른 채널의 중간 레일 (붉은 선) 은 스톱 손실에 사용됩니다. 긴 포지션의 스톱 손실 가격은 빠른 채널의 중간 레일입니다; 짧은 포지션의 스톱 손실 가격은 또한 빠른 채널의 중간 레일입니다.
따라서 느린 채널은 신호를 생성하고 빠른 채널은 위험을 제어합니다. 이중 채널을 사용하면 신호 안정성과 위험 통제가 모두 보장됩니다. 배경 색상은 현재 위치 방향을 나타냅니다. 녹색은 길고 빨간색은 짧습니다.
또한, 전략은 또한 위험 비율과 위치 크기를 설정합니다. 위험 비율은 2%로 결부되며, 위치 크기는 위험 비율과 채널 변동성에 따라 계산됩니다. 이것은 거래 위험 및 점진적 위치 증가에 따라 효과적으로 제어합니다.
이중 채널 돌파구 거북이 전략은 다음과 같은 장점을 가지고 있습니다.
강력한 트렌드 추적 능력. 트렌드를 결정하기 위해 돈치안 채널을 사용하면 중장기 트렌드를 효과적으로 캡처 할 수 있습니다. 이중 채널 디자인은 전략이 강한 트렌딩 시장만을 추적하는 것을 보장합니다.
좋은 인수 및 리스크 제어. 빠른 채널의 중부 레일은 스톱 손실로 작용하므로 상부에서 중부 레일 및 하부에서 중부 레일까지 위험 지역입니다. 이것은 거래 당 통제 가능한 손실을 보장합니다. 전략은 최대 계좌 손실을 직접 제한하기 위해 위험 비율을 설정합니다.
안정적인 거래 신호. 큰 느린 채널 매개 변수는 과도한 거래를 피하여 채널을 형성하는 데 상대적으로 오랜 시간이 필요합니다. 빠른 채널은 손실을 멈추고 단기 수정을 잡습니다. 둘은 안정적인 거래 신호를 형성하기 위해 상호 보완합니다.
우수한 위치 및 리스크 관리. 전략은 위험 노출 통제를 위해 위치 사이즈를 계산하기 위해 돈치안 채널 변동성을 사용합니다. 점진적 위치 증가 또한 긴 위치와 짧은 위치를 균형을 맞추고 있습니다.
직관적인 시각화. 이중 채널, 스톱 로스 라인, 포지션 배경 모두 전략 논리 이해가 용이하도록 명확하게 그래프화되어 있습니다. 한편 최대 드라우다운, 최대 손실 및 기타 주요 메트릭도 표시됩니다.
이중 채널 돌파구 거북이 전략은 또한 몇 가지 위험을 가지고 있습니다:
내일 가격을 효과적으로 활용할 수 없다. 거북이는 채널 브레이크오웃에서만 포지션을 개설하고, 포지션을 증가시키기 위해 더 정확한 상황을 사용할 수 없다. 이는 최적화로 개선될 수 있다.
스톱 로스 포인트는 사냥에 예민하다. 거북이의 고정 중부 레일 스톱 로스는 활성 시장에서 쉽게 타격 될 수 있다. 이것은 중부 레일 매개 변수를 동적으로 조정하는 것을 필요로 한다.
이중 채널 매개 변수는 정밀 조정이 필요합니다. 적절한 매개 변수 설정은 합리적인 안정적 인 신호에 중요합니다. 현재 고정 매개 변수는 시장 변화에 적응 할 수 없으며 적응 기능이 도입되어야합니다.
오버나이트 및 프리마켓 정보를 활용할 수 없습니다. 현재 전략은 실시간 시장 데이터에 기반한 트렌드를 판단하고 오버나이트 및 프리마켓 가격 행동으로 거래 결정을 알릴 수 없습니다. 데이터 조정으로 해결할 수 있습니다.
이중 채널 돌파구 거북이 전략의 주요 최적화 방향은 다음과 같습니다.
포지션을 조정하기 위해 일내 가격을 사용하십시오. 포지션은 단순한 긴/단거지 대신 채널에서 가격의 거리에 따라 조정 될 수 있습니다.
지능적인 스톱 손실 전략. 고정 스톱 손실 사냥을 피하기 위해 고정 중간 철도 정지 동적 계산으로 변경.
적응 채널 매개 변수 최적화. 채널 매개 변수를 수동 고정 값 대신 시장 조건에 따라 자동으로 조정 할 수 있습니다.
오프나이트 및 프리마켓 정보를 포함합니다. 더 완전한 시장 조건을 얻기 위해 트렌드를 판단 할 때 실시간 가격뿐만 아니라 오프나이트 및 프리마켓 가격도 고려하십시오.
여러 주식과 인덱스를 결합합니다. 증권과 인덱스 중재 기회를 통해 향상된 알파를 위해 여러 주식에 전략을 적용합니다.
결론적으로, 이중 채널 돌파구 거북이 전략은 임베디드 리스크 제어와 함께 전략에 따라 전반적으로 안정적이고 효율적인 추세입니다. 빠른 채널과 느린 채널의 이중 사용은 신호 안정성과 리스크 관리 모두를 보장합니다. 또한, 위치 배경, 최대 드래운 및 위치 사이징 또한이 전략을 쉽게 관리하고 최적화 할 수 있습니다. 일반적으로, 이것은 철저한 연구와 응용을 가치가 높은 품질의 양적 전략입니다.
/*backtest start: 2023-12-05 00:00:00 end: 2024-01-04 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2020 //@version=4 strategy("Noro's RiskTurtle Strategy", shorttitle = "RiskTurtle str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") risk = input(2, minval = 0.1, maxval = 99, title = "Risk size, %") fast = input(20, minval = 1, title = "Fast channel (for stop-loss)") slow = input(50, minval = 1, title = "Slow channel (for entries)") showof = input(true, defval = true, title = "Show offset") showll = input(true, defval = true, title = "Show lines") showdd = input(true, defval = true, title = "Show label (drawdown)") showbg = input(true, defval = true, title = "Show background") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Donchian price channel fast hf = highest(high, fast) lf = lowest(low, fast) center = (hf + lf) / 2 //Donchian price chennal slow hs = highest(high, slow) ls = lowest(low, slow) //Lines colorpc = showll ? color.blue : na colorsl = showll ? color.red : na offset = showof ? 1 : 0 plot(hs, offset = offset, color = colorpc, title = "Slow channel high") plot(ls, offset = offset, color = colorpc, title = "Slow channel low") plot(center, offset = offset, color = colorsl, title = "Fast channel stop-loss") //Background size = strategy.position_size colorbg = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na bgcolor(colorbg, transp = 70) //Var loss = 0.0 maxloss = 0.0 equity = 0.0 truetime = true //Lot size risksize = -1 * risk risklong = ((center / hs) - 1) * 100 coeflong = abs(risksize / risklong) lotlong = (strategy.equity / close) * coeflong riskshort = ((center / ls) - 1) * 100 coefshort = abs(risksize / riskshort) lotshort = (strategy.equity / close) * coefshort //Orders strategy.entry("Long", strategy.long, lotlong, stop = hs, when = needlong and strategy.position_size == 0 and hs > 0 and truetime) strategy.entry("Short", strategy.short, lotshort, stop = ls, when = needshort and strategy.position_size == 0 and ls > 0 and truetime) strategy.exit("LongExit", "Long", stop = center, when = needlong and strategy.position_size > 0) strategy.exit("Short", stop = center, when = needshort and strategy.position_size < 0) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all() strategy.cancel("Long") strategy.cancel("Short") if showdd //Drawdown max = 0.0 max := max(strategy.equity, nz(max[1])) dd = (strategy.equity / max - 1) * 100 min = 100.0 min := min(dd, nz(min[1])) //Max loss size equity := strategy.position_size == 0 ? strategy.equity : equity[1] loss := equity < equity[1] ? ((equity / equity[1]) - 1) * 100 : 0 maxloss := min(nz(maxloss[1]), loss) //Label min := round(min * 100) / 100 maxloss := round(maxloss * 100) / 100 labeltext = "Drawdown: " + tostring(min) + "%" + "\nMax.loss " + tostring(maxloss) + "%" var label la = na label.delete(la) tc = min > -100 ? color.white : color.red osx = timenow + round(change(time)*10) osy = highest(100) // la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)