트레일링 스톱 전략이 있는 Donchian 채널


생성 날짜: 2023-12-07 16:53:10 마지막으로 수정됨: 2023-12-07 16:53:10
복사: 0 클릭수: 854
avatar of ChaoZhang ChaoZhang
1
집중하다
1619
수행원

트레일링 스톱 전략이 있는 Donchian 채널

개요

이 전략은 동치안 통로 지표에 기반한 트렌드 추적 전략이며, ATR 지표의 동적 스톱로스를 결합하여 수익을 잠금하는 트렌드 추적 전략에 속한다.

전략 원칙

이 전략은 20주기 길이의 唐通道指標를 사용하며,通道中線은 최고 가격과 최저 가격의 평균이다. 가격이 위쪽을 가로질러通道中線을 넘으면 더하고, 가격이 아래쪽을 가로질러通道中線을 넘으면 공백한다. 평준화 조건은 가격이 동적 스톱레이드를 만지는 것이다.

우위 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 동천 통로를 통해 시장의 동향을 판단하여 동향을 효과적으로 파악할 수 있다.
  2. ATR 동적 추적 중지와 결합하여 수익을 보장하면서 위험을 효과적으로 제어할 수 있습니다.
  3. 스톱 라인을 계산할 때 ATR 인자를 추가하여 시장의 변동성을 고려하여 스톱 라인이 합리적입니다.
  4. 정지선 계산 방식은 안정적이고 신뢰할 수 있으며, 정지선이 너무 가까워지는 것을 방지하고, 정지선이 처벌될 확률을 감소시킨다.

위험 분석

이 전략에는 다음과 같은 위험들이 있습니다.

  1. 둥지 안톤의 장치는 다소 뒤떨어져서 단선 기회를 놓칠 수 있습니다.
  2. ATR 파라미터를 잘못 설정하면 너무 느슨하거나 너무 가까운 정지 손실이 발생할 수 있습니다.
  3. 트렌드 판단 메커니즘은 비교적 간단하며, 종합 시장에서 잘못된 신호가 더 많이 발생할 수 있습니다.
  4. 효율적인 지원/저항 판단 장치의 부재로 시장 진출 시기가 잘못 될 수 있습니다.

최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 다른 지표 판단을 추가하여 명확한 추세가 없는 시장에서 자주 거래하는 것을 피하십시오.
  2. 지원 저항 위치 판단을 늘리고, 진출 시기를 최적화
  3. 다른 다이내믹 스톱로스 계산 방법을 시도하여 스톱로스 전략을 더 최적화하십시오.
  4. 전략 효과에 대한 다양한 둥 통로 주기 매개 변수의 영향을 테스트
  5. 거래량이나 증가량과 같은 필터 조건을 추가하여 잘못된 신호를 줄여줍니다.

요약하다

이 전략은 전체적으로 간단한 실용형 트렌드 추적 전략으로, 동치안 통로를 통해 트렌드 방향을 판단하고, 동적 스톱로스를 사용하여 수익을 잠금 할 수 있습니다. 전략은 실용성이 강하지만, 여러 가지 방법으로 추가적으로 최적화 할 수 있으므로 전략은 더 복잡한 시장 환경에서 안정적인 수익을 유지할 수 있습니다.

전략 소스 코드
/*backtest
start: 2023-11-29 00:00:00
end: 2023-12-06 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title = "dc",  overlay = true)
atrLength = input(title="ATR Length:", defval=20, minval=1)

testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testEndYear = input(2018, "Backtest Start Year")
testEndMonth = input(12)
testEndDay = input(31, "Backtest Start Day")
testPeriodEnd = timestamp(testEndYear,testEndMonth,testEndDay,0,0)


testPeriod() =>
    true
    //time >= testPeriodStart  ? true : false

dcPeriod = input(20, "Period")

dcUpper = highest(close, dcPeriod)[1]
dcLower = lowest(close, dcPeriod)[1]
dcAverage = (dcUpper + dcLower) / 2
atrValue=atr(atrLength)


useTakeProfit   = na
useStopLoss     = na
useTrailStop    = na
useTrailOffset  = na
//@version=1
Buy_stop = lowest(low[1],3) - atr(20)[1] / 3
plot(Buy_stop, color=red, title="buy_stoploss")
Sell_stop = highest(high[1],3) + atr(20)[1] / 3
plot(Sell_stop, color=green, title="sell_stoploss")

plot(dcLower, style=line, linewidth=3, color=red, offset=1)
plot(dcUpper, style=line, linewidth=3, color=aqua, offset=1)

plot(dcAverage, color=black, style=line, linewidth=3, title="Mid-Line Average")

strategy.entry("simpleBuy", strategy.long, when=(close > dcAverage) and cross(close,dcAverage))
strategy.close("simpleBuy",when= ( close< Buy_stop))
    
strategy.entry("simpleSell", strategy.short,when=(close < dcAverage) and cross(close,dcAverage) )
strategy.close("simpleSell",when=( close > Sell_stop))
    
//strategy.exit("Exit simpleBuy", from_entry = "simpleBuy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
//strategy.exit("Exit simpleSell", from_entry = "simpleSell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)