
이 전략은 DMI 지표에 기반하여 +DI와 -DI의 교차를 모니터링하여 주식 가격 트렌드 방향을 판단하고, ADX 지표와 함께 강하고 약한 트렌드를 식별하여 트렌드 추적을 구현합니다. +DI 상위에서 DI를 통과하면 다단계 입문으로, 스톱 가격이 촉발되거나 -DI 아래에서 +DI를 통과하면 평점입니다.
이 전략은 DMI 지표의 두 가지 구성 요소를 사용합니다: +DI 및 -DI. +DI는 상승 동력을 측정하고, +DI는 상위 -DI는 상위 동력이 강화되었다는 것을 나타냅니다. -DI는 하락 동력을 측정하고, -DI는 하락 +DI는 상위 동력이 강화되었다는 것을 나타냅니다.
+DI가 DI를 통과할 때, 상승 추세가 형성되는 것을 나타냅니다. 이 때 전략은 다단계로 진입한다. 진입 후, 선형적인 이동한 스톱로드는 최고 가격의 일정한 비율을 추적한다. 가격이 회귀할 때, 스톱 가격은 그 아래로 내려가며, 어느 정도 이전 수익을 고정한다.
-DI가 +DI를 통과할 때, 하향 추세가 대체되는 것을 나타냅니다. 이 때 전략은 평평하다. ADX 지표로 트렌드의 강점을 식별할 수 있으며, ADX가 높을수록 주가 추세가 더 분명하다는 것을 나타냅니다. 따라서 전략은 ADX를 보조 판단 지표로 사용하여 ADX가 특정 영역 내에 있을 때만 진입한다.
전체적으로, 이 전략은 주가 트렌드 전환점을 포착하여 이동 평균 트렌드 추적을 가능하게 한다.
이 전략의 장점은 크게 세 가지로 나타납니다.
DMI 지표를 사용하여 주식 가격 트렌드 방향을 정확하게 판단할 수 있다. DMI는 간단한 이동 평균과 같은 지표보다 트렌드 전환을 정확하게 판단할 수 있다.
ADX 지표를 사용하여 트렌드의 강점과 약점을 파악하고, 불안정한 상황에서 자주 거래하는 것을 피하십시오.
선형 이동 스톱 메커니즘, 동적으로 스톱 포지션을 조정할 수 있으며, 트렌드 반전 시 조기 스톱 을 할 수 있으며, 수익의 일부를 잠금하여 위험을 효과적으로 제어 할 수 있습니다.
전략 규칙은 간단하고 명확하며, 이해하기 쉽고 실행이 용이하며, 양적 거래에 적합합니다.
이 전략의 주요 위험은 다음과 같습니다.
DMI 지표가 특정 시장에서 작동하지 않을 가능성이 있다. DMI는 모든 시장에 적용되지 않으며, 추세가 명확하지 않을 때 잘못된 신호를 발생시킬 수 있다.
주가격이 급등하여 스톱로스를 넘어서 다시 하락할 위험이 있다. 이러한 위험을 줄일 수 있는 약간의 완충이 있다.
ADX 파라미터가 적절하지 않은 설정의 위험. ADX 파라미터는 전략 선택 시간에 직접 영향을 미칩니다. 너무 크고 너무 작으면 성과에 영향을 미칩니다.
선형적인 이동식 상쇄 방법을 사용했기 때문에, 빠른 승부에서 상쇄되는 위험이 있다. 이 경우 상쇄 추적 매개 변수를 상황에 따라 조정할 수 있다.
매개 변수 조정, 엄격한 상쇄, 최적화된 절차 프레임워크 등을 통해 위험을 더 낮출 수 있다.
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
MACD, KDJ 등 다른 지표들을 사용하여 보조 판단을 하고, 전략의 안정성을 높인다.
다양한 손실 방법을 테스트합니다. 곡선 이동 손실, 시간 이동 손실 등의 방법.
포지션 관리 메커니즘을 늘리고, 트렌드 방향이 확인된 후 점진적으로 포지션을 올리고, 수익률을 높여라.
고주파 인자, 기계학습과 같은 방법을 결합하여 DMI와 ADX의 매개 변수를 동적으로 최적화하여 전략을 더 지능화한다.
프로그램화된 풍력 제어 모듈을 추가하고, 위험 예산과 같은 방법을 사용하여 최대 회수량을 엄격하게 제어한다.
다양한 방법으로 협력하면 전략의 효율성, 안정성 및 안전성을 효과적으로 향상시킬 수 있습니다.
이 전략은 전체적으로 작동 논리는 명확하고 이해하기 쉽다, DMI 지표를 사용하여 주식 가격 트렌드 방향을 판단, ADX 지표는 트렌드 강도를 보조 판단, 선형 이동 중지 방식은 위험을 효과적으로 제어한다. 전략의 성능은 비교적 안정적이지만 여전히 특정 위험을 예방해야합니다. 지속적인 최적화 테스트를 통해 전략의 안정성과 효율성을 점진적으로 개선한다. 이 전략은 이동 평균 추적 유형의 전략의 우수한 대표자가 될 것으로 믿습니다.
/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=5
//1.0 - 240202 @caddjax
strategy(title = "+DI Crossover", overlay=false)
//DMI + ADX Chart w/ overlay
// © jrregencia
lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
len = input.int(6, minval=1, title="DI Length")
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)
trur = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / trur)
minus = fixnan(100 * ta.rma(minusDM, len) / trur)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)
adxmax = input.int(50, title="ADX Max Buying Area", minval=1, maxval=100)
adxmin = input.int(0, title="ADX Min Buying Area", minval=0, maxval=99)
//DI cross alert
DIPcross = ta.crossover(plus, minus) ? plus : na
plotshape(DIPcross, style = shape.cross , color=color.white, location=location.absolute)
plot(adx, color=color.rgb(255, 238, 0, 23), title="ADX", linewidth=2)
p1 = plot(plus, color=color.rgb(16, 137, 0, 31), title="+DI", linewidth=1)
p2 = plot(minus, color=color.rgb(143, 82, 255, 25), title="-DI", linewidth=1)
adxmaxl = hline(adxmax, title="ADX MaxLine", color=color.silver, linestyle=hline.style_solid)
adxminl = hline(adxmin, title="ADX MinLine", color=color.silver, linestyle=hline.style_solid)
fill(p1, p2, title="Cloud Fill", color = plus > minus ? color.teal : color.red, transp=50)
fill(adxmaxl, adxminl, title="ADX Fill", color=color.silver, transp=90)
// Configure trail stop level with input options (optional)
longTrailPerc = input.float(3, title="Trail Long Loss (%)",
minval=0.0, step=0.1) * 0.01
// Determine trail stop loss prices
longStopPrice = 0.0
// Determine entry condition
enterLong = ta.crossover(plus, minus) ? plus : na
longStopPrice := if strategy.position_size > 0
stopValue = high[1] * (1 - longTrailPerc)
math.max(stopValue, longStopPrice[1])
else
0
// Submit entry orders
if enterLong
strategy.entry("EL", strategy.long)
// Submit exit orders for trail stop loss price
if strategy.position_size > 0
strategy.exit("XL TRL STP", stop=longStopPrice)