돈치안 채널 탈출 전략

저자:차오장, 날짜: 2023-12-04 14:16:33
태그:

img

전반적인 설명

돈치안 채널 브레이크아웃 전략 (Donchian Channel Breakout Strategy) 은 브레이크아웃 트레이딩 전략을 따르는 가격 액션과 트렌드이다. 잠재적인 브레이크아웃 포인트를 식별하기 위해 돈치안 채널의 상부 및 하부 밴드를 사용하여 가격이 채널을 벗어날 때 긴 또는 짧은 포지션을 취한다.

전략 논리

이 전략의 핵심 논리는 다음과 같습니다.

  1. Ta.highest와 Ta.lowest 함수를 사용하여 특정 기간 동안 (예를 들어, 60 바) 가장 높은 높은 것과 가장 낮은 낮은 것을 계산하여 Donchian 채널의 상부 및 하부 밴드를 구성합니다.

  2. 가격이 상단위권 이상으로 떨어지면 상승 추세가 시작될 수 있음을 나타냅니다. 따라서 상단위권 브레이크 이후의 다음 바에서 긴 거래를하십시오. 가격이 하단위권 아래로 떨어지면 하단위권 브레이크 이후의 다음 바에서 짧은 거래를하십시오.

  3. 가격이 상위 범위를 넘어선 후 또는 하위 범위를 넘어선 후, 트렌드 반전을 나타냅니다. 따라서 기존의 긴 또는 짧은 포지션을 평평화하십시오.

  4. 리스크를 제어하기 위해, 장/단 포지션을 시작 한 후 입시 가격 마이너스/그루스 한 개의 최소 틱을 설정합니다.

이 유형의 채널 브레이크업 전략은 간단하고 직설적이며 가격 행동과 트렌드 추종을 모두 고려하고 실행이 쉽고 안정적입니다.

장점

이 전략은 몇 가지 장점을 가지고 있습니다.

  1. 논리는 명확하고 간단하고 이해하기 쉬우며 실행 가능성이 높습니다.

  2. 트렌드 방향을 결정하기 위해 돈치안 채널을 사용하면 효과적으로 소음을 필터하고 신뢰할 수있는 브레이크오웃 신호를 식별 할 수 있습니다.

  3. 진입 후 합리적인 스톱 로스 설정은 단일 거래 손실을 조절할 수 있습니다.

  4. 시장 조건에 상관없이, 전략은 유효한 브레이크오웃이 발생하면 트렌드와 함께 거래하고 잠재적인 큰 움직임을 잡을 수 있습니다.

  5. 매우 적은 매개 변수, 과도한 부착에 취약하지 않으며, 큰 조정 공간과 높은 유연성을 가지고 있습니다.

위험성

이 전략에는 몇 가지 위험도 있습니다.

  1. 트렌드를 따라가는 전략으로서, 역행하는 움직임을 잡을 수 없습니다.

  2. 너무 가까운 스톱 로스는 단기 가격 변동에 의해 멈출 수 있습니다.

  3. 잘못된 채널 길이를 설정하면 잘못된 파기 확률이 증가합니다.

몇 가지 대책:

  1. 다른 지표들을 포함해서 잠재적인 반전을 파악하고, 맹목적으로 추세를 따르지 마십시오.

  2. 이윤을 확보하기 위해 합리적인 후속 스톱을 사용하세요. 초기 하드 스톱 손실에 고착하기 보다는요.

  3. 최적의 조합을 찾기 위해 다른 매개 변수 값을 테스트합니다.

최적화 방향

더 많은 최적화를 할 수 있습니다.

  1. 두 개의 돈치안 채널 브레이크아웃 전략을 시도해 보세요. 하나는 진입, 하나는 스톱 로스/프로프트 취득입니다.

  2. 일부 잘못된 브레이크를 필터하기 위해 브레이크가 특정 수의 틱을 초과 한 후에 거래를 하는 것 만입니다.

  3. 부피 또는 변동성 필터를 추가하여 가격이 급격히 변동할 때 나쁜 거래를 피합니다.

  4. 더 나은 결과를 얻기 위해 트렌드를 따라가는 것과 평균 회귀와 같은 다른 보유 전략을 시도하십시오.

  5. 최대 일일 손실, 최대 마감 등을 제한하기 위해 위험 관리 모듈을 추가합니다.

결론

요약하자면, 돈치안 채널 브레이크아웃 전략은 매우 실용적인 단기 트렌드 추후 전략이다. 가격 액션을 통해 잠재적 인 트렌드 변화를 식별하고 트레이드에 진입하기 위해 채널 브레이크아웃을 활용합니다. 논리는 간단하고 실행하기가 쉽고 다양한 시장에서 괜찮은 결과를 얻을 수 있습니다. 매개 변수 조정, 스톱 로스 메커니즘, 역전 식별 등과 같은 추가 최적화로 상당한 성능 상승을 기대할 수 있습니다. 알고 거래의 훌륭한 출발점 전략으로 작용합니다.


/*backtest
start: 2023-11-03 00:00:00
end: 2023-12-03 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// Step 1. Define strategy settings
strategy(title="Price action and breakout Channel Forexrn", overlay=true,
     pyramiding=0, initial_capital=100000,
     commission_type=strategy.commission.cash_per_order,
     commission_value=4, slippage=2)

dochLen = input.int(60, title="Price action and breackout Channel Forexrn")

// Position sizing inputs
usePosSize    = input.bool(true, title="Use Position Sizing?")
atrLen        = input.int(10, title="ATR Length")
atrRiskOffset = input.float(4, title="ATR Risk Offset Multiple", step=0.25)

maxRisk = input.float(2, title="Max Position Risk %", step=.25, 
     minval=0.25, maxval=15)
maxExposure = input.float(10, title="Max Position Exposure %", step=1, 
     minval=1, maxval=100)
marginPerc = input.int(10, title="Margin %", minval=1, maxval=100)

// Step 2. Calculate strategy values
upperband = ta.highest(high, dochLen)[1]
lowerband = ta.lowest(low, dochLen)[1]

// Calculate position size
riskEquity = (maxRisk * 0.01) * strategy.equity
riskTrade  = (ta.atr(atrLen) * atrRiskOffset) * syminfo.pointvalue

maxPos = ((maxExposure * 0.01) * strategy.equity) /
     ((marginPerc * 0.01) * (close * syminfo.pointvalue))

posSize = usePosSize ? math.min(math.floor(riskEquity / riskTrade), maxPos) : 1

// Step 3. Output strategy data
plot(upperband, color=color.green, linewidth=2, title="DoCh Upperband")
plot(lowerband, color=color.red, linewidth=2, title="DoCh Lowerband")

// Step 4. Determine trading conditions
tradeWindow  = true

tradeAllowed = tradeWindow and bar_index > dochLen

// Step 5. Submit entry orders
if tradeAllowed
    if strategy.position_size < 1
        strategy.entry("EL", strategy.long, qty=posSize,
             stop=upperband + syminfo.mintick)

    if strategy.position_size > -1
        strategy.entry("ES", strategy.short, qty=posSize,
             stop=lowerband - syminfo.mintick)

// Step 6. Submit exit orders
if not tradeWindow
    strategy.close_all()

더 많은