후속 스톱 손실 전략으로 도치안 채널

저자:차오장, 날짜: 2023-12-07 16:53:10
태그:

img

전반적인 설명

이것은 이윤을 잠금하기 위해 ATR 지표에 기반한 동적 스톱 손실과 결합된 돈치안 채널 지표에 기반한 트렌드 다음 전략입니다. 그것은 트렌드 다음 전략 범주에 속합니다.

전략 논리

이 전략은 채널 중간에 가장 높은 높음과 가장 낮은 낮은 평균이 있는 20주기 돈치안 채널을 사용한다. 가격이 채널 중간에 넘어가면 긴 길이가 되고, 가격이 중간에 넘어가면 짧은 길이가 된다. 출구 규칙은 가격이 동적 스톱 로스 라인을 만지면 긴 포지션의 ATR 값의 1/3을 빼고 최근 3 바의 가장 낮은 하위값으로 계산되며, 최근 3 바의 가장 높은 하위값과 짧은 포지션의 ATR 값의 1/3을 더하면 긴 길이가 된다.

이점 분석

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

  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)



더 많은