Donchian Breakout Trading 전략


생성 날짜: 2024-04-29 14:56:35 마지막으로 수정됨: 2024-04-29 14:56:35
복사: 0 클릭수: 701
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

Donchian Breakout Trading 전략

개요

돈치안 브레이크 트레이딩 전략은 돈치안 채널 지표에 기반한 거래 시스템이다. 이 전략의 주요 아이디어는 돈치안 채널의 상도 및 하도에서의 브레이크를 통해 시장 추세를 포착하고, 고정된 리스크 수익률 (RR) 을 사용하여 스톱 손실을 수행한다. 가격이 돈치안 채널의 상도 궤도를 뚫고 돈치안 채널 주기 대비 새로운 고치를 만들 때 더 많이 열리고, 하도 궤도를 뚫고 새로운 낮은 것을 만들 때 더 많이 열린다. 한편, 스톱 손실 위치는 돈치안 채널의 궤도에 설정되어 있으며, 스톱 포지션은 설정된 리스크 수익률 (RR) 에 따라 계산된다.

전략 원칙

  1. Donchian 통로를 계산한다: 설정된 Donchian 통로 주기 ((설정 20), Donchian 통로의 상단 및 하단, Donchian 통로의 중간 지점으로 상단 및 하단의 중간 지점으로 Donchian 통로의 중간 지점으로 계산한다.
  2. 새로운 고/저가 발생하는지 판단: Donchian 통로의 현재 위 궤도와 하위 궤도를 이전 몇 번의 위 궤도와 비교하여 현재 Donchian 통로 주기 상의 새로운 고 또는 새로운 저가 발생했는지 판단합니다. 새로운 고가 발생하면 Donchian 위 궤도는 파란색으로 표시되며, 새로운 저가 발생하면 Donchian 하위 궤도는 파란색으로 표시됩니다.
  3. 포지션 개척: 가격 종료가 파란색 돈치안 상도를 돌파할 때 다단위 포지션을 개설하고 파란색 돈치안 하도를 돌파할 때 빈 상위 포지션을 개설한다. 즉, 새로운 고 / 새로운 낮은 것을 만든 후에만 파장이 유효하다.
  4. 정지 손실: 포지션을 개시할 때 개시 가격과 현재 Donchian 통로 중간값을 기록하고, 둘의 가격 차이를 계산한다. 정지 손실 위치는 Donchian 통로 중간값에 설정되어, 정지 위치는 설정된 위험 수익률 (기본 5배) 과 가격 차이를 계산한다.
  5. 평위: 가격이 스톱 또는 스톱로스 가격에 도달했을 때 평위한다.

전략적 이점

  1. 트렌드 시장에 적합: Donchian 브레이크 전략은 상반/하반 포지션을 뚫고 시장의 추세 방향에 따라 거래하고, 추세 상황에서 우수한 성능을 발휘한다.
  2. 새 높음/새 낮음 필터링: Donchian 통로 사이클 새 높음/새 낮음을 생성하는지 판단하여 일부 노이즈 신호와 가짜 돌파구를 필터링하여 포장 신호의 품질을 향상시키는 전략.
  3. 고정 리스크 수익률: 각 거래의 스톱 및 스톱 손실 위치는 고정 리스크 수익률을 기반으로합니다. 위험은 통제 가능하며 자금 관리에 도움이 됩니다.
  4. 매개 변수는 간단하다: 전략 매개 변수 설정은 간단하며, 주로 Donchian 통로 주기 및 위험 수익률, 최적화 및 통제가 쉽다.

전략적 위험

  1. 규모 손실: 전략적 중단 손실은 Donchian 통로 중간에 위치하며, 추세가 불명확하거나 흔들리는 상황에서 단일 거래에서 큰 손실이 발생할 수 있습니다.
  2. 빈번한 거래: Donchian 통로의 주기적 설정이 작다면, 빈번한 입장을 열어 거래 비용을 증가시킬 수 있다.
  3. 트렌드 회귀: 트렌드 회귀 기간 동안 전략이 연속적으로 여러 번의 손실을 줄 수 있습니다.
  4. 매개 변수 민감성: 전략의 성능은 매개 변수 설정에 민감하며, 다른 시장 특성 및 시장 주기에 따라 매개 변수를 최적화해야 한다.

전략 최적화 방향

  1. 동적 스톱: 가격의 움직임, 변동률 등에 따라 실시간으로 스톱 포지션을 조정합니다. 예를 들어, ATR을 스톱 레퍼런스로 사용하여 단편 거래 위험을 줄입니다.
  2. 트렌드 필터: 이동 평균과 같은 트렌드 판단 지표를 추가하여 트렌드 방향이 명확한 경우에만 포지션을 열고 신호 품질을 향상시킵니다.
  3. 다른 지표와 결합: RSI, MACD와 같은 동력 지표와 결합하여 포지션 개시 시간을 종합적으로 평가하십시오.
  4. 포지션 관리: 시장 추세 강도, 변동률 등의 동적에 따라 포지션 크기를 조정하고, 전반적인 위험을 제어한다.
  5. 매개 변수 적응: 기계 학습과 같은 방법을 사용하여 매개 변수 설정을 최적화합니다.

요약하다

돈치안 브레이크 트레이딩 전략은 고전적인 돈치안 채널 지표에 기반한 트렌드 추적 트레이딩 시스템이다. 돈치안 채널의 경로 상향과 하향의 브레이크와 새로운 고/새로운 낮은 판단을 통해 포지션을 개설하고, 고정된 리스크 수익률에 기반한 스톱로드를 중지한다. 이 전략은 논리적으로 간단하며, 트렌디 시장에 적합하다. 그러나, 불안한 시장에서 일반적으로 수행되며, 파라미터 설정에 민감하다.

전략 소스 코드
/*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)
//---------------------------------------------//