다중 기간 Donchian 채널 및 ATR 동적 간격 변동성 추적 거래 전략

DC ATR 唐奇安通道 波动率 趋势跟踪 动态间隔 多周期 策略优化 风险管理 仓位管理
생성 날짜: 2025-04-02 11:05:13 마지막으로 수정됨: 2025-04-02 11:05:13
복사: 0 클릭수: 431
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

다중 기간 Donchian 채널 및 ATR 동적 간격 변동성 추적 거래 전략 다중 기간 Donchian 채널 및 ATR 동적 간격 변동성 추적 거래 전략

전략 개요

이 전략은 돈치안 채널 (Donchian Channel) 과 평균 실제 파도 (ATR) 를 기반으로 한 트렌드 추적 거래 시스템이다. 이 전략은 4시간 K 라인 사이클의 돈치안 채널 중간 궤도와 현재 가격의 편차 정도를 활용하고, ATR을 동적 변동의 측정 지표로 결합하여 시장 변동에서 입점과 출구를 찾는다. 이 전략은梯度加仓 및 중지 메커니즘을 채택하고, 고정 거래 금액 (USDT) 을 통해 포지션 관리를 하며, 큰 변동 상황에서의 효과적인 자금 사용을 실현한다.

전략 원칙

전략의 핵심 논리는 다음과 같은 핵심 요소에 기반합니다.

  1. 다주기 분석 프레임워크전략: 1분 K선에서 거래를 수행하지만 4시간 K선 ((240분) 을 사용하는 데이터 계산 기술 지표, 다중 주기 분석의 장점을 달성한다.
  2. 동천 통로 계산: 20주기의 4시간 K선 데이터를 기반으로, 상반기 (최고 가격), 하반기 (최저 가격) 및 중반기 (폐쇄 가격의 간단한 이동 평균) 을 계산한다.
  3. 동적 간격 확인: ATR 값의 2배를 동적 거래 간격으로 사용하여 전략이 시장의 변동성에 적응할 수 있도록 한다.
  4. 트랜잭션 실행 논리
    • 초기 상태 ((지점 없는): 동치안 통로 중철 빼기 현재 가격이 설정된 간격보다 크면 첫 번째 구매를 실행한다.
    • 포지션 보유 상태: 기준 가격과 현재 가격의 차이는 간격을 초과할 때 포지션 증가 또는 감소 작업을 수행한다.
    • 포지션 관리: 거래 당 고정 금액 ((5.1 USDT), 현재 가격에 따라 계산 거래 수
    • 평지 메커니즘: 가격 상승이 간격을 초과할 때 판매를 실행하고, 포지션이 부족하면 모든 사용 가능한 포지션을 판매한다.

전략적 이점

  1. 다주기 분석의 장점: 더 짧은 시간 주기 ((1분 K선) 에서 거래를 수행하지만 더 긴 시간 주기 ((4시간 K선) 의 기술 지표를 기반으로 의사 결정을 함으로써 단기 시장 소음의 방해를 줄이고 중장기 경향을 추적 할 수있는 능력을 유지합니다.
  2. 동적으로 시장의 변동에 적응하는 것: ATR을 변동성의 척도로 사용하면, 전략은 시장의 변동성에 따라 거래 간격을 자동으로 조정할 수 있습니다. 높은 변동성의 시장에서 더 큰 간격을 설정하고 낮은 변동성의 시장에서 더 작은 간격을 설정합니다.
  3. 계단 창고 메커니즘가격 하락이 지속될 때, 전략은 매 간격 지점에서 포지션을 부착하여 포지션 비용을 평균하고, 단일 거래의 위험 틈을 줄일 것입니다.
  4. 고정금액 거래: 거래당 고정 금액을 사용하는 것이 위험 관리 원칙에 더 적합하며, 높은 가격에서 과도한 투입이나 낮은 가격에서 투입 부족의 문제를 피합니다.
  5. 전체 기록전략: 전략 분석 및 최적화를 위해 거래 유형, 가격, 간격, 수량 및 총 보유량과 같은 정보를 포함한 상세한 거래 기록 및 시각적 태그를 구현합니다.

전략적 위험

  1. 추세 반전 위험: 강한 트렌드가 역전될 때, 전략은 시장의 전환을 제 시간에 식별하지 못할 수 있으며, 연속적인 포지션 이후의 큰 손실을 초래할 수 있다. 해결 방법: 트렌드 확인 지표를 도입하거나 최대 포지션 수를 제한한다.
  2. 자금이 다 소진될 위험이 있습니다.계속되는 일방적인 거래에서 고정 금액의 여러 가지 가파르는 재원을 너무 빨리 사용하거나 과도하게 집중시킬 수 있습니다. 해결 방법: 총 재원 사용 비율 제한을 설정하거나 단일 거래 금액을 동적으로 조정하십시오.
  3. 매개변수 민감도:ATR 배수 ((2배) 와 동치안 통로 주기 ((20) 의 선택은 전략 성능에 중대한 영향을 미치며, 매개 변수 설정을 잘못하면 신호가 너무 많거나 너무 적을 수 있다. 해결 방법: 역사 회귀를 통해 최적의 매개 변수 조합을 찾거나, 매개 변수 자조 장치를 구현한다.
  4. 유동성 위험: 유동성이 낮은 시장에서, 시가 요금은 전략의 실제 실행 효과를 영향을 미치는 큰 슬라이드로 이어질 수 있습니다. 해결 방법: 제한 가격 요금의 사용이나 유동성 필터 조건을 추가하는 것을 고려하십시오.
  5. 수수료 비용의 축적전략: 거래 빈도가 높고 거래 비용이 많이 발생할 수 있습니다 (설정 0.1%), 장기적으로 수익을 훼손 할 수 있습니다. 해결 방법: 거래 빈도를 최적화하거나 더 낮은 수수료를 사용하는 거래소를 고려하십시오.

전략 최적화 방향

  1. 시장 환경 필터링: 변동률 지표와 결합하여 현재 시장 환경을 판단하고, 다양한 시장 상태에 따라 전략 매개 변수를 조정하거나 거래를 중지합니다. 이렇게하면 낮은 변동률이나 격변 시장에서 자주 거래되는 비용 손실을 피할 수 있습니다.
  2. 동적으로 ATR 배수를 조정: ATR 배수를 역사적 변동률이나 시장 추세 강도에 따라 동적으로 조정할 수 있습니다. 강한 추세 시장에서 더 작은 배수를 사용하여 가격을 더 자세히 추적하고, 흔들리는 시장에서 더 큰 배수를 사용하여 잘못된 신호를 줄일 수 있습니다.
  3. 손절매 메커니즘 소개: 최대 손실 제한을 설정하거나 단편 거래 손실을 방지하기 위해 스톱을 추적하십시오. 특히 여러 번 상장 한 후, 자금을 보호하기 위해 종합 스톱 수준을 설정하는 것이 고려되어야합니다.
  4. 포지션 관리를 최적화: 고정된 금액이 아닌 감소하거나 증가하는 거래 금액을 사용하는 것을 고려할 수 있으며, 매 거래의 금액 비율은 구축된 포지션의 크기 또는 시장의 변동성 동력에 따라 조정됩니다.
  5. 트랜잭션 시간 필터를 추가합니다.다른 거래 시간대의 성과를 분석하고, 아시아, 유럽, 아메리카 거래 시간대의 교차 시간이나 주요 경제 데이터가 발표되기 전과 후와 같은 비효율적이거나 위험 한 시간을 피하십시오.
  6. 다른 지표의 통합 확인RSI, MACD 등의 지표와 결합하여 거래 신호의 질을 높이고 잘못된 입장을 줄일 수 있습니다.
  7. 둥 통로 주기 적응: 시장상태에 따라 동적으로 조정하는 동천 통로의 계산주기를, 높은 변동 시장에서 반응 속도를 높이기 위해 짧은 주기를 사용, 낮은 변동 시장에서 노이즈를 줄이기 위해 더 긴 주기를 사용.

요약하다

다중 주기 동치안 통로와 ATR 동적 간격 변동 추적 거래 전략은 기술 분석과 위험 관리를 결합한 정량 거래 시스템이다. 전략은 1분 K 라인에서 4 시간 주기 데이터를 사용하여 결정을 수행함으로써 중기 경향을 효과적으로 추적하고 ATR을 동적으로 사용하여 다른 시장 환경에 맞게 거래 간격을 조정한다. 고정 금액 거래와 계단 창고 구축 메커니즘은 위험을 제어하고 비용을 평형화하는 데 도움이됩니다.

이 전략은 특히 변동성이 높은 시장 환경에 적합하지만, 트렌드 반전 위험과 자금 관리 문제에 주의를 기울여야 합니다. 시장 환경 필터, 동적 파라미터 조정 및 중지 장치와 같은 최적화 조치를 추가함으로써 전략의 안정성과 장기적인 수익성을 더욱 향상시킬 수 있습니다. 실제 적용에서 충분한 재검토를 수행하고 특정 거래 품종에 대한 파라미터 최적화를 수행하고 자금을 안전하게 보장하기 위해 엄격한 위험 제어 조치를 시행하는 것이 좋습니다.

전략 소스 코드
/*backtest
start: 2024-04-02 00:00:00
end: 2025-04-01 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
*/

//@version=5
strategy("Donchian Channel and ATR Strategy", overlay=true, currency="USDT", commission_type=strategy.commission.percent, commission_value=0.1)

// 用pine编写策略,实时执行。
// 获得suiusdt合约的4小时K线,用4小时k线20周期,计算唐奇安通道 和ATR。
// 最新的 ATR * 2 为间隔。每次买卖金额都是5.1usdt,根据金额计算交易数量。

// 策略基于1分钟k线执行。
// 开始时,baseprice为空。
// 如果 唐奇安通道中轨 - 当前价格  > 间隔, 则市价买入5.1usdt,记录成交价格为 baseprice。
// 重新计算计算唐奇安通道 和ATR, 还是使用4小时K线的20个周期。

// baseprice不为空,
// 如果 baseprice - 当前价格  > 间隔, 则市价买入5.1usdt,记录成交价格为 baseprice;
// 如果 当前价格 - baseprice > 间隔, 则市价卖出5.1usdt,记录成交价格为 baseprice。
// 卖出时,判断仓位是否足够卖出,不够则卖出剩余的仓位。卖出后,如果没有仓位了,设置baseprice为空。

// 标签和日志记录:买还是卖(buy/sell),初次买入标记为initBuy,价格,间隔,买入的数量,买入后仓位的总数量。
// 用不同颜色区分买卖。



// 获取4小时K线数据
resolution_4h = "240"  // 4小时K线
high_4h = request.security(syminfo.tickerid, resolution_4h, high)
low_4h = request.security(syminfo.tickerid, resolution_4h, low)
close_4h = request.security(syminfo.tickerid, resolution_4h, close)

// 计算唐奇安通道和ATR(基于4小时K线)
length = 20
donchian_upper = ta.highest(high_4h, length)
donchian_lower = ta.lowest(low_4h, length)
donchian_middle = ta.sma(close_4h, length)
atr_value = ta.atr(length)  // 使用4小时K线计算ATR

// 设置交易参数
trade_amount = 5.1  // 每次交易金额(USDT)
var float baseprice = na  // 当前基准价格
var float total_position_qty = 0  // 总仓位数量

// 日志记录函数
log_trade(action, price, interval, qty, total_qty, color) =>
    log_text = str.format("{0} @ {1} | Interval: {2} | Qty: {3} | Total Qty: {4}", 
                          action, str.tostring(price), str.tostring(interval), 
                          str.tostring(qty), str.tostring(total_qty))


// 策略逻辑
interval = atr_value * 2  // 间隔 = ATR * 2
if (na(baseprice))
    if (donchian_middle - close > interval)  // 使用1分钟K线的close价格判断
        qty = trade_amount / close  // 计算交易数量
        strategy.entry("Buy", strategy.long, qty=qty)
        baseprice := close  // 更新基准价格
        total_position_qty += qty  // 更新总仓位数量
        log_trade("initBuy", baseprice, interval, qty, total_position_qty, color.green)  // 记录日志和标签

else
    if (baseprice - close > interval)  // 使用1分钟K线的close价格判断
        qty = trade_amount / close
        strategy.entry("Buy", strategy.long, qty=qty)
        baseprice := close
        total_position_qty += qty
        log_trade("Buy", baseprice, interval, qty, total_position_qty, color.blue)

    else if (close - baseprice > interval)
        if (total_position_qty > 0)
            qty = trade_amount / close
            if (total_position_qty >= qty)
                strategy.close("Buy", qty=qty)
                total_position_qty -= qty
                log_trade("Sell", baseprice, interval, qty, total_position_qty, color.red)
            else
                strategy.close("Buy")
                total_position_qty := 0
                log_trade("Sell (Full Position)", baseprice, interval, total_position_qty, 0, color.red)
        baseprice := na  // 清空基准价格

// 绘制唐奇安通道和ATR(基于4小时K线)
plot(donchian_upper, title="Donchian Upper", color=color.blue, linewidth=2)
plot(donchian_middle, title="Donchian Middle", color=color.orange, linewidth=2)
plot(donchian_lower, title="Donchian Lower", color=color.blue, linewidth=2)
plot(atr_value, title="ATR", color=color.red, linewidth=2)