리소스 로딩... 로딩...

돈치안 브레이크업 거래 전략

저자:차오장, 날짜: 2024-04-29 14:56:35
태그:

img

전반적인 설명

돈치안 브레이크아웃 트레이딩 전략 (Donchian Breakout Trading Strategy) 은 돈치안 채널 지표에 기반을 둔 거래 시스템이다. 이 전략의 주요 아이디어는 돈치안 채널의 상부 및 하부 밴드를 뚫고 시장 추세를 파악하고, 수익을 취하고 손해를 멈추기 위해 고정된 리스크 리워드 비율 (RR) 을 사용하는 것입니다. 가격이 돈치안 채널의 상부 밴드 위에 뚫어 돈치안 채널 기간에 비해 새로운 고도를 만들 때, 그것은 길게 간다; 하부 밴드 아래에 뚫어 새로운 최저치를 만들 때, 그것은 짧게 간다. 동시에, 스톱 손실은 돈치안 채널의 중간 밴드에서 설정되며, 수익을 취하는 것은 설정된 리스크 리워드 비율에 따라 계산됩니다.

전략 원칙

  1. 돈치안 채널을 계산합니다. 설정된 돈치안 채널 기간 (예정값 20) 을 기반으로 해당 기간 내 최고 및 최저 가격을 각각 돈치안 채널의 상부 및 하부 대역으로 계산하고 상부 및 하부 대역의 중점을 돈치안 채널의 중부 대역으로 계산합니다.
  2. 새로운 고도/하위가 생성되는지 결정: 현재의 돈치안 채널 상부 및 하부 대역을 이전 몇 시기의 상부 및 하부 대역과 루프하고 비교하여, 돈치안 채널 기간에 비해 새로운 고도 또는 하위가 생성되는지 결정합니다. 새로운 고도가 생성되면 돈치안 상부 대역이 파란색으로 표시됩니다. 새로운 하위가 생성되면 돈치안 하부 대역이 파란색으로 표시됩니다.
  3. 브레이크아웃 엔트리: 클로저 가격이 파란색 돈치안 상단 범위를 넘어서면 긴 포지션에 진입합니다. 파란색 돈치안 하단 범위를 넘어서면 짧은 포지션에 진입합니다. 즉, 새로운 고도/하위가 생성된 후에 발생하는 브레이크아웃만 유효합니다.
  4. 수익을 취하고 손실을 중지하십시오: 포지션을 열 때 입상 가격과 현재 돈치안 채널 중간 밴드 가격을 기록하고 둘 사이의 가격 차이를 계산합니다. 스톱 손실은 돈치안 채널 중간 밴드에서 설정되며, 수익을 취하는 것은 설정된 리스크 보상 비율 (디폴트 5배) 및 가격 차이를 기반으로 계산됩니다.
  5. 클로즈 포지션: 가격이 수익 또는 스톱 로스 가격에 도달하면 포지션은 종료됩니다.

전략적 장점

  1. 트렌딩 시장에 적합합니다. 돈치안 브레이크아웃 전략은 시장 트렌드의 방향을 따라 상부/하부 대역을 뚫고 포지션에 진입하고 트렌딩 시장에서 잘 수행합니다.
  2. 새로운 높은 / 낮은 필터링: 이 전략은 도 채널 기간 내에 새로운 높은 / 낮은 신호가 생성되는지 여부를 결정함으로써 일부 노이즈 신호와 잘못된 브레이크를 필터링하여 입력 신호의 품질을 향상시킵니다.
  3. 일정한 리스크 보상 비율: 각 거래의 수익을 취하고 손실을 멈추는 지점은 일정한 리스크 보상 비율에 기반하여 위험을 제어하고 자금 관리를 촉진합니다.
  4. 간단한 매개 변수: 전략 매개 변수 설정은 비교적 간단하며, 주로 돈치안 채널 기간과 리스크 보상 비율은 최적화와 통제를 용이하게합니다.

전략 위험

  1. 규모 손실: 전략의 스톱 손실 위치는 돈치안 채널 중부 밴드입니다. 불분명한 추세 또는 변동 시장에서 단일 거래가 큰 손실을 입는 상황이 발생할 수 있습니다.
  2. 빈번한 거래: 돈치안 채널 기간이 너무 짧게 설정되면 거래 비용을 증가시키는 빈번한 개점과 폐쇄로 이어질 수 있습니다.
  3. 트렌드 역전: 트렌드 역전 도중 전략은 여러 차례 연속적인 스톱 손실을 경험할 수 있습니다.
  4. 매개 변수 민감성: 전략 성능은 매개 변수 설정에 민감하며 다른 시장 특성과 거래 주기에 따라 최적화되어야합니다.

전략 최적화 방향

  1. 동적 스톱 로스: 단일 거래 위험을 줄이기 위해 스톱 로스 기준으로 ATR을 사용하는 것과 같은 가격 변화, 변동성 등에 따라 실시간으로 스톱 로스 위치를 조정합니다.
  2. 트렌드 필터링: 이동 평균과 같은 트렌드 판단 지표를 추가하고 트렌드 방향이 명확할 때만 포지션을 오픈하여 신호 품질을 향상시킵니다.
  3. 다른 지표와 결합: RSI와 MACD와 같은 모멘텀 지표와 결합하여 포지션 개시 시기를 포괄적으로 평가합니다.
  4. 포지션 관리: 전체 리스크를 제어하기 위해 시장 트렌드 강도, 변동성 등에 따라 포지션 크기를 동적으로 조정합니다.
  5. 매개 변수 적응: 기계 학습 및 다른 방법을 사용하여 매개 변수 설정을 적응적으로 최적화합니다.

요약

돈치안 브레이크아웃 트레이딩 전략 (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)
//---------------------------------------------//

더 많은