돈치안 브레이크아웃 트레이딩 전략 (Donchian Breakout Trading Strategy) 은 돈치안 채널 지표에 기반을 둔 거래 시스템이다. 이 전략의 주요 아이디어는 돈치안 채널의 상부 및 하부 밴드를 뚫고 시장 추세를 파악하고, 수익을 취하고 손해를 멈추기 위해 고정된 리스크 리워드 비율 (RR) 을 사용하는 것입니다. 가격이 돈치안 채널의 상부 밴드 위에 뚫어 돈치안 채널 기간에 비해 새로운 고도를 만들 때, 그것은 길게 간다; 하부 밴드 아래에 뚫어 새로운 최저치를 만들 때, 그것은 짧게 간다. 동시에, 스톱 손실은 돈치안 채널의 중간 밴드에서 설정되며, 수익을 취하는 것은 설정된 리스크 리워드 비율에 따라 계산됩니다.
돈치안 브레이크아웃 트레이딩 전략 (Donchian Breakout Trading Strategy) 은 고전적인 돈치안 채널 지표에 기반한 트렌드를 따르는 트레이딩 시스템이다. 돈치안 채널의 상부 및 하부 밴드의 브레이크아웃과 새로운 최고/하위 판단을 통해 포지션을 열고, 고정된 리스크 리워드 비율을 기반으로 수익을 취하고 손해를 멈추는 전략이다. 전략은 간단한 논리를 가지고 있으며 트렌딩 시장에 적합하다. 그러나 변동 시장에서 성능이 좋지 않으며 매개 변수 설정에 민감하다. 전략의 탄력성을 향상시키기 위해 동적 스톱 손실, 트렌드 필터링, 포지션 관리 등을 도입하여 더 이상 최적화 할 수 있다.
/*backtest start: 2023-04-23 00:00:00 end: 2024-04-28 00:00:00 period: 1d basePeriod: 1h 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/ // © Dillon_Grech //---------------------------------------------// //---------------------------------------------// // Simple donchian channel break out strategy // which only enters trades when price closes // above donchian upper and creates new high // (long) or price closes below donchian lower // and creates new low, relative to the donchian // length. This is indicated by the donchian // upper and lower color (blue). Stop loss is // located at donchian basis and take profit // is set at Risk Reward (RR) profit target. //---------------------------------------------// //@version=5 strategy("Donchian New High/Low Strategy [Dillon Grech]", overlay=true) //---------------------------------------------// //---------------------------------------------// //INDICATOR 1 - Donchian New High Low Price Close don_length = input.int(20, minval = 1) don_lower = ta.lowest(don_length) don_upper = ta.highest(don_length) don_basis = math.avg(don_upper, don_lower) //loop don_lower_upper = true don_higher_lower = true for i = 0 to don_length - 1 //Check for higher high over don_length if don_upper > don_upper[i] don_lower_upper := false //Check for lower low over don_length if don_lower < don_lower[i] don_higher_lower := false //Plot c_ora = color.orange c_blu = color.blue c_gra = color.gray color_basis = c_ora color_upper = don_lower_upper ? c_blu : c_gra color_lower = don_higher_lower ? c_blu : c_gra plot(don_basis, "Don Basis", color_basis, 2) u = plot(don_upper, "Don Upper", color_upper, 2) l = plot(don_lower, "Don Lower", color_lower, 2) //Conditions Ind_1_L = ta.crossover(close, don_upper[1]) and don_lower_upper[1] Ind_1_S = ta.crossunder(close,don_lower[1]) and don_higher_lower[1] //---------------------------------------------// //---------------------------------------------// //ENTRY CONDITIONS entry_long = strategy.position_size<=0 and Ind_1_L entry_short = strategy.position_size>=0 and Ind_1_S if(entry_long) strategy.entry("Long Entry", strategy.long) if(entry_short) strategy.entry("Short Entry", strategy.short) //---------------------------------------------/ //---------------------------------------------// //TAKE PROFIT AND STOP LOSS CONDITIONS profit_RR = input.float(5.0,"RR Profit Target") //Store Price on new entry signal entry_price = strategy.opentrades.entry_price( strategy.opentrades-1) //Store Donchain Channel Basis entry_don_basis = float(0.0) if entry_long or entry_short entry_don_basis := don_basis else entry_don_basis := entry_don_basis[1] //Get stop loss distance stop_distance = math.abs(entry_price - entry_don_basis) stop_L = entry_price - stop_distance profit_L = entry_price + stop_distance*profit_RR stop_S = entry_price + stop_distance profit_S = entry_price - stop_distance*profit_RR //Plot TP and SL plot(entry_long or entry_short ? na : strategy.position_size > 0 ? profit_L : na, color=color.lime, style=plot.style_linebr, linewidth=2) plot(entry_long or entry_short ? na : strategy.position_size > 0 ? stop_L : na, color=color.red, style=plot.style_linebr, linewidth=2) plot(entry_long or entry_short ? na : strategy.position_size < 0 ? profit_S : na, color=color.lime, style=plot.style_linebr, linewidth=2) plot(entry_long or entry_short ? na : strategy.position_size < 0 ? stop_S : na, color=color.red, style=plot.style_linebr, linewidth=2) //Exit long trades strategy.exit(id = 'Exit Long', from_entry ='Long Entry', stop = stop_L, limit = profit_L) strategy.exit(id = 'Exit Short', from_entry ='Short Entry', stop = stop_S, limit = profit_S) //---------------------------------------------//