ADX 필터드 데 크롤 스톱 로스 트렌드 전략

저자:차오장, 날짜: 2023-11-06 14:52:27
태그:

img

전반적인 설명

이 전략은 데 크롤 스톱 로스 지표와 평균 방향 움직임 지표 (ADX) 지표를 결합하여 비교적 간단한 트렌드 다음 전략을 구현합니다. 데 크롤 스톱 로스는 긴 및 짧은 엔트리 신호를 생성하는 데 사용되며 ADX는 명확한 트렌드가없는 시장 조건을 필터링하여 비 방향 변동성에서 반복적으로 스톱 로스를 유발하는 현상을 피합니다.

전략 논리

이 전략은 먼저 데 크롤 스톱 손실의 긴 스톱 긴 및 짧은 스톱 짧은 라인을 계산합니다. 긴 라인은 지난 p 기간 동안 가장 높은 가격에 기초하여 계산됩니다. 짧은 라인은 지난 p 기간 동안 가장 낮은 가격에 기초하여 계산됩니다. 지난 q 기간 동안의 긴 및 짧은 라인의 가장 높은 지점은 현재 긴 및 짧은 스톱 손실 라인으로 사용됩니다. 이것은 단기 가격 변동을 필터링하고 트렌드 역전 지점에서만 스톱 손실을 유발합니다.

닫기 가격이 짧은 라인 스톱_쇼트 위에 넘어가면 긴 신호가 생성됩니다. 닫기 가격이 긴 라인 스톱_롱 아래에 넘어가면 짧은 신호가 생성됩니다.

또한 ADX 지표는 트렌드의 강도를 판단하는 데 사용됩니다. ADX가 임계보다 크면만 스톱 로스 신호가 진입을 유발합니다. 이것은 통합에서 비 방향적인 윙톱을 필터링합니다.

장점

이 전략은 트렌드 지표와 스톱 로스 지표의 장점을 결합한다. 비방향 시장에서 휘프사우를 피하면서 트렌드 반전을 적시에 포착할 수 있다. 데 크롤 스톱 로스 매개 변수 최적화는 필터링을 원활하게 할 수 있으며 트렌드 반전 지점에서만 스톱 로스를 보장할 수 있다. ADX 지표는 트렌드가 중요한 경우에만 진입을 보장하며 시장 통합 중에 스톱 로스 휘프사우를 피한다.

위험성

부적절한 ADX 매개 변수 설정은 트렌드의 시작에서 기회를 놓칠 수 있습니다. ADX 문턱이 너무 높게 설정되면 ADX 값이 여전히 낮을 때 트렌드의 시작에서 진입 기회가 놓칠 수 있습니다.

너무 가까운 스톱 로스 포인트는 전략 포지션의 빈번한 개점 및 폐쇄로 이어질 수 있습니다. 이것은 거래 및 슬리프 비용의 증가를 초래합니다. 트렌드에 약간의 공간을 허용하기 위해 스톱 로스 포인트는 합리적으로 설정되어야합니다.

최적화

스톱 로스 신호가 ADX가 임계값을 넘을 때만 트리거되는 것을 고려하십시오. 이것은 엔트리 타이밍의 신뢰성을 향상시킬 수 있습니다. ADX 값을 EMA 기울기와 결합하는 것과 같은 결합 조건에 다른 트렌드 지표도 결합 할 수 있습니다.

스톱 로스 라인은 또한 ATR를 기반으로 동적으로 조정할 수 있으며, 과도한 민감성을 피하기 위해 시장 변동성이 증가할 때 더 넓은 스톱을 허용합니다. 또는 MACD는 트렌드 강도를 평가하고 동적으로 스톱 로스 라인을 조정하는 데 사용할 수 있습니다.

요약

이 전략은 비교적 간단하고 실용적인 트렌드 다음 전략을 구축하기 위해 데 크롤 스톱 로스 및 ADX 지표의 강점을 통합합니다. 매개 변수 최적화를 통해 전략의 안정성과 수익성이 더욱 향상 될 수 있습니다. 그러나 과도한 스톱 로스 민감성 및 불충분한 ADX 필터링의 위험은 주의해야합니다.


/*backtest
start: 2022-10-30 00:00:00
end: 2023-06-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title = "Chande Kroll Stop", overlay=true)
p = input.int(10, minval=1)
x = input.int(1, minval=1)
q = input.int(9, minval=1)
first_high_stop = ta.highest(high, p) - x * ta.atr(p)
first_low_stop = ta.lowest(low, p) + x * ta.atr(p)
stop_short = ta.highest(first_high_stop, q)
stop_long = ta.lowest(first_low_stop, q)
plot(stop_long, color=color.blue)
plot(stop_short, color=color.orange)

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
ADX_sig = input.int(20, title="minimum ADX threshold for signal")
dirmov(len) =>
	up = ta.change(high)
	down = -ta.change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
	minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)


if ta.crossunder(close, stop_long) and sig>ADX_sig
    strategy.entry("long", strategy.long)
if ta.crossover(close, stop_short) and sig>ADX_sig
    strategy.entry("short", strategy.short)

더 많은