돈치안 채널 탈출 전략

저자:차오장, 날짜: 2024-01-29 11:51:08
태그:

img

전반적인 설명

돈치안 채널 브레이크아웃 전략 (Donchian channel breakout strategy) 은 트렌드를 따르는 전략이다. 특정 기간 동안 가장 높고 가장 낮은 가격을 계산하여 가격 채널을 형성하고 채널 경계를 구매 및 판매 신호로 사용합니다. 가격이 상부 레일을 통과 할 때 짧고 가격이 하부 레일을 통과 할 때 길게됩니다. 이 전략은 매우 변동적인 암호화폐 거래에 적합합니다.

전략 논리

이 전략은 가격 동향을 결정하고 진입점과 출구점을 계산하기 위해 돈치안 채널 지표를 사용합니다. 돈치안 채널은 상부 레일, 하부 레일 및 중부 레일로 구성됩니다. 상부 레일은 특정 기간 동안 가장 높은 가격, 하부 레일은 가장 낮은 가격, 중부 레일은 평균 가격입니다.

진입 및 출구 기간 길이는 독립적으로 구성 할 수 있습니다. 가격이 하부 레일을 넘어 올라가면 길게됩니다. 가격이 상부 레일을 넘어 내려갈 때 짧게됩니다. 출구 지점은 가격이 해당 레일을 다시 만졌을 때입니다. 중간 레일은 스톱 손실 라인으로도 사용할 수 있습니다.

또한, 전략은 또한 수익점을 설정합니다. 긴 포지션의 수익값은 입상 가격 곱하기 (1 + 수익률 비율) 이며, 짧은 포지션의 경우 역으로됩니다. 이 기능을 활성화하면 이윤을 잠금하고 손실이 확장되는 것을 방지합니다.

요약하자면, 트렌드를 판단하는 동안, 이 전략은 정지 설정과 이익을 취하기 위해 충분한 공간을 보장합니다. 이것은 특히 암호화폐와 같은 매우 변동성 있는 자산에 적합합니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. 명확한 신호 논리와 간단하고 신뢰할 수 있는 신호 생성
  2. 돈치안 채널 지표는 가격 변동에 민감하지 않아 추세를 파악하는 데 도움이됩니다.
  3. 다양한 자산과 시간 프레임에 맞게 사용자 정의 가능한 채널 매개 변수
  4. 내장된 스톱 로스/프로프트 취업 기능은 위험을 효과적으로 제어합니다.
  5. 암호화폐와 같은 변동성 자산의 높은 수익 잠재력

위험 분석

이 전략의 위험은 다음과 같습니다.

  1. 스톱 로즈에도 불구하고 엄청난 가격 변동의 위험을 완전히 피할 수 없습니다.
  2. 부적절한 매개 변수 설정으로 인해 과잉 거래가 발생하고 비용이 증가할 수 있습니다.
  3. 가격 변동에 민감하지 않아서 거래 기회를 놓칠 수도 있습니다.

위의 위험을 완화하기 위해:

  1. 전체 리스크를 통제하기 위해 적당한 규모의 포지션을 가지고 자산에 따라 다양화해야 합니다.
  2. 최적화된 매개 변수를 사용하여 최적의 조합을 찾습니다. 아마도 기계 학습을 이용해서요.
  3. 신호 신뢰성을 결정하기 위한 추가 지표를 포함합니다.

최적화 방향

이 전략은 다음 차원에서 더 이상 최적화 될 수 있습니다.

  1. 최적의 값을 찾기 위해 더 많은 매개 변수 조합을 테스트하고 최적화하십시오. 주요 매개 변수에는 채널 기간, 수익 비율, 긴 / 짧은 등을 허용하는 것이 포함됩니다.
  2. 기계 학습 모델을 통합하여 최적의 매개 변수를 자동으로 식별합니다. 예를 들어 강화 학습을 사용하여.
  3. 다른 지표와 이동 평균과 볼륨을 결합하여 트렌드와 신호 신뢰성을 결정합니다.
  4. 더 고급 스톱 손실 전략을 개발, 예를 들어 후속 스톱 손실, 캔들리어 출구 등 위험을 더 잘 제어하기 위해.
  5. 더 많은 자산 클래스를 통해 전략을 확장하여 가장 적합한 것을 찾습니다.

결론

결론적으로, 돈치안 채널 브레이크아웃 전략은 트렌드 트레이딩에 대한 명확한 신호와 제어 가능한 위험을 제공합니다. 특히 큰 수익 잠재력을 가진 암호화폐와 같은 변동성 자산에 적합합니다. 또한 파라미터를 더 최적화하고 다른 지표를 통합 할 가능성이 있습니다. 이는 향후 개선의 경로입니다. 지속적인 혁신으로이 전략은 암호화폐에 대한 중요한 알고리즘 거래 전략이 될 가능성이 있습니다.


/*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()


더 많은