이 전략은 채널 브레이크아웃을 기반으로 시장 방향을 결정하기 위해 동적 채널 지표를 활용하여 트렌드 방향성을 파악하는 것을 목표로합니다. 그것은 주로 특정 기간 동안 가장 높은 고도와 가장 낮은 하위를 계산하여 상위 및 하위 채널을 형성하여 가격이 채널을 통과 할 때 거래 신호를 생성합니다.
이 전략은 입력 함수를 사용하여 채널 기간 길이를 20 일로 설정합니다. 다음에는 지난 20 일 동안의 가장 높은 높이를 상위 대역으로 계산하고, 지난 20 일 동안의 가장 낮은 낮은 하위 대역으로 계산합니다.
이 채널은 색으로 가득 차 있습니다. 상단 위에 있는 영역은 녹색으로 가득 차 있고, 하단 아래에 있는 영역은 빨간색으로 가득 차 있어 동적인 채널을 형성합니다.
200일 이동 평균 (EMA) 은 또한 전체 추세를 결정하는 기준으로 표시됩니다.
이 전략은 주요 트렌드를 판단하는 기준으로 EMA를 사용합니다. 클로즈가 200일 라인을 넘으면 상승 추세를 나타냅니다. 클로즈가 그 아래에 있으면 하락 추세를 나타냅니다.
상승 트렌드에서, 닫기 가격이 상단 범위를 통과하면 긴 신호가 생성됩니다. 하향 트렌드에서, 닫기 가격이 하단 범위를 통과하면 짧은 신호가 생성됩니다.
긴 스톱 손실은 긴 / 짧은 규칙에 따라 하위 밴드 또는 중간 라인에 설정됩니다. 짧은 스톱 손실은 상위 밴드 또는 중간 라인에 설정됩니다.
역동적인 채널은 변화하는 시장 추세에 적응합니다.
트레이딩 신호는 트렌드 트레이딩 원칙에 따라 브레이크아웃을 기반으로 생성됩니다.
주요 트렌드는 이동 평균으로 결정되며 채널 브레이크와 결합됩니다.
시장 조건에 따라 유연한 스톱 로스 배치
주요 추세에 대한 잘못된 판단은 시장에서 벗어날 수 있습니다.
잘못된 채널 기간 설정이 잘못된 거래를 증가시킵니다.
채널에 너무 가까이 있는 스톱 손실은 스톱 아웃을 증가시킬 수 있습니다.
탈출 신호는 약간의 지연이 있어 가장 좋은 입구 지점을 놓치고 있을지도 몰라
해결책:
여러 가지 지표를 사용하여 주요 추세를 판단하고 오류를 줄이십시오.
다양한 시장 리듬에 대한 채널 기간 매개 변수를 최적화합니다.
충분한 버퍼를 확보하기 위해 스톱 손실 위치를 조정합니다.
스크린 입력 신호에 필터를 추가합니다.
주요 추세를 판단하기 위해 더 많은 지표를 추가하여 정확성을 향상시킵니다.
부피 지표를 포함해서 잘못된 파장을 피합니다.
각기 다른 제품에 대한 채널 기간 매개 변수를 최적화합니다.
동적 후속 스톱 손실을 구현합니다.
신호 품질을 향상시키고 불필요한 거래를 피하기 위해 필터를 추가합니다.
이 전략은 전체적으로 트렌드 트레이딩 원칙을 따르며, 변동성 범위를 결정하고 브레이크아웃에서 신호를 생성하는 동적 채널을 사용합니다. 트렌드 변화를 효과적으로 추적하고 신뢰할 수있는 트렌드 다음 전략입니다. 그러나 주요 트렌드 판단 및 스톱 로스 메커니즘은 더욱 최적화되고 탄력성을 향상시키기 위해 필터링 조건이 추가되어야합니다. 이 전략은 중장기 트렌드 추적에 적합하며 리스크를 헤지하기 위해 포트폴리오의 다른 전략과 결합 될 수 있습니다.
/*backtest start: 2023-10-13 00:00:00 end: 2023-11-12 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © pratyush_trades //@version=4 strategy("Donchian Indexes", overlay=true) length = input(20) longRule = input("Higher High", "Long Entry", options=["Higher High", "Basis"]) shortRule = input("Lower Low", "Short Entry", options=["Lower Low", "Basis"]) longSL=input("Lower Low", "LONG SL", options=["Lower Low", "Basis"]) shortSL=input("Higher High", "SHORT SL", options=["Higher High", "Basis"]) hh = highest(high, length) ll = lowest(low, length) up = plot(hh, 'Upper Band', color = color.green) dw = plot(ll, 'Lower Band', color = color.red) mid = (hh + ll) / 2 midPlot = plot(mid, 'Basis', color = color.orange) fill(up, midPlot, color=color.green, transp = 95) fill(dw, midPlot, color=color.red, transp = 95) plot(ema(close,200), "ema", color=color.orange) if (close>ema(close,200)) if (not na(close[length])) strategy.entry("Long", strategy.long, stop=longRule=='Basis' ? mid : hh) if (close<ema(close,200)) if (not na(close[length])) strategy.entry("Short", strategy.short, stop=shortRule=='Basis' ? mid : ll) if (strategy.position_size>0) strategy.exit(id="Longs Exit",stop=longSL=='Basis' ? mid : ll) if (strategy.position_size<0) strategy.exit(id="Shorts Exit",stop=shortSL=='Basis' ? mid : hh)