돈치안 채널 브레이크아웃 전략 (Donchian channel breakout strategy) 은 트렌드를 따르는 전략이다. 특정 기간 동안 가장 높고 가장 낮은 가격을 계산하여 가격 채널을 형성하고 채널 경계를 구매 및 판매 신호로 사용합니다. 가격이 상부 레일을 통과 할 때 짧고 가격이 하부 레일을 통과 할 때 길게됩니다. 이 전략은 매우 변동적인 암호화폐 거래에 적합합니다.
이 전략은 가격 동향을 결정하고 진입점과 출구점을 계산하기 위해 돈치안 채널 지표를 사용합니다. 돈치안 채널은 상부 레일, 하부 레일 및 중부 레일로 구성됩니다. 상부 레일은 특정 기간 동안 가장 높은 가격, 하부 레일은 가장 낮은 가격, 중부 레일은 평균 가격입니다.
진입 및 출구 기간 길이는 독립적으로 구성 할 수 있습니다. 가격이 하부 레일을 넘어 올라가면 길게됩니다. 가격이 상부 레일을 넘어 내려갈 때 짧게됩니다. 출구 지점은 가격이 해당 레일을 다시 만졌을 때입니다. 중간 레일은 스톱 손실 라인으로도 사용할 수 있습니다.
또한, 전략은 또한 수익점을 설정합니다. 긴 포지션의 수익값은 입상 가격 곱하기 (1 + 수익률 비율) 이며, 짧은 포지션의 경우 역으로됩니다. 이 기능을 활성화하면 이윤을 잠금하고 손실이 확장되는 것을 방지합니다.
요약하자면, 트렌드를 판단하는 동안, 이 전략은 정지 설정과 이익을 취하기 위해 충분한 공간을 보장합니다. 이것은 특히 암호화폐와 같은 매우 변동성 있는 자산에 적합합니다.
이 전략의 장점은 다음과 같습니다.
이 전략의 위험은 다음과 같습니다.
위의 위험을 완화하기 위해:
이 전략은 다음 차원에서 더 이상 최적화 될 수 있습니다.
결론적으로, 돈치안 채널 브레이크아웃 전략은 트렌드 트레이딩에 대한 명확한 신호와 제어 가능한 위험을 제공합니다. 특히 큰 수익 잠재력을 가진 암호화폐와 같은 변동성 자산에 적합합니다. 또한 파라미터를 더 최적화하고 다른 지표를 통합 할 가능성이 있습니다. 이는 향후 개선의 경로입니다. 지속적인 혁신으로이 전략은 암호화폐에 대한 중요한 알고리즘 거래 전략이 될 가능성이 있습니다.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 4h 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/ // © algotradingcc // Strategy testing and optimisation for free trading bot //@version=4 strategy("Donchian Channel Strategy [for free bot]", overlay=true ) //Long optopns buyPeriodEnter = input(10, "Channel Period for Long enter position") buyPeriodExit = input(10, "Channel Period for Long exit position") isMiddleBuy = input(true, "Is exit on Base Line? If 'no' - exit on bottom line") takeProfitBuy = input(2.5, "Take Profit (%) for Long position") isBuy = input(true, "Allow Long?") //Short Options sellPeriodEnter = input(20, "Channel Period for Short enter position") sellPeriodExit = input(20, "Channel Period for Short exit position") isMiddleSell = input(true, "Is exit on Base Line? If 'no' - exit on upper line") takeProfitSell = input(2.5, "Take Profit (%) for Short position") isSell = input(true, "Allow Short?") // Test Start startYear = input(2005, "Test Start Year") startMonth = input(1, "Test Start Month") startDay = input(1, "Test Start Day") startTest = timestamp(startYear,startMonth,startDay,0,0) //Test End endYear = input(2050, "Test End Year") endMonth = input(12, "Test End Month") endDay = input(30, "Test End Day") endTest = timestamp(endYear,endMonth,endDay,23,59) timeRange = time > startTest and time < endTest ? true : false // Long&Short Levels BuyEnter = highest(buyPeriodEnter) BuyExit = isMiddleBuy ? ((highest(buyPeriodExit) + lowest(buyPeriodExit)) / 2): lowest(buyPeriodExit) SellEnter = lowest(sellPeriodEnter) SellExit = isMiddleSell ? ((highest(sellPeriodExit) + lowest(sellPeriodExit)) / 2): highest(sellPeriodExit) // Plot Data plot(BuyEnter, style=plot.style_line, linewidth=2, color=color.blue, title="Buy Enter") plot(BuyExit, style=plot.style_line, linewidth=1, color=color.blue, title="Buy Exit", transp=50) plot(SellEnter, style=plot.style_line, linewidth=2, color=color.red, title="Sell Enter") plot(SellExit, style=plot.style_line, linewidth=1, color=color.red, title="Sell Exit", transp=50) // Calc Take Profits TakeProfitBuy = 0.0 TakeProfitSell = 0.0 if strategy.position_size > 0 TakeProfitBuy := strategy.position_avg_price*(1 + takeProfitBuy/100) if strategy.position_size < 0 TakeProfitSell := strategy.position_avg_price*(1 - takeProfitSell/100) // Long Position if isBuy and timeRange strategy.entry("Long", strategy.long, stop = BuyEnter, when = strategy.position_size == 0) strategy.exit("Long Exit", "Long", stop=BuyExit, limit = TakeProfitBuy, when = strategy.position_size > 0) // Short Position if isSell and timeRange strategy.entry("Short", strategy.short, stop = SellEnter, when = strategy.position_size == 0) strategy.exit("Short Exit", "Short", stop=SellExit, limit = TakeProfitSell, when = strategy.position_size < 0) // Close & Cancel when over End of the Test if time > endTest strategy.close_all() strategy.cancel_all()