
ATR 다이내믹 트래킹 스톱을 기반으로 한 트리플 리버스 모드 양적 거래 전략은 단기 시장 소모 신호를 식별하기 위해 특별히 설계된 양적 거래 시스템이다. 이 전략의 핵심 아이디어는 연속적인 3개의 동방향 리버스 후 발생하는 리버스 신호를 포착하고, 평균 실제 파장 (ATR) 을 기반으로 한 다이내믹 트래킹 스톱 메커니즘을 통해 수익을 보호하는 것이다. 이 전략은 특히 15분, 1시간, 4시간 등의 단기 시간대에 적합하며, 다양한 시장 환경의 변동적 특성에 자동으로 적응할 수 있으며, 고정된 스톱 손실을 설정할 필요가 없으며, 다이내믹 스톱 메커니즘을 통해 위험을 제어한다.
이 전략의 입시 논리는 명확한 가격 패턴을 식별하는 것에 기반합니다:
3개의 연속적인 동방향 선이 방향성을 확인한다:
역전선에는 충분히 큰 개체가 있어야 하며, 코드에서 최소 3%의 부피 크기로 설정되어 역전선 신호가 충분히 강하다는 것을 보장합니다.
역전선 종료시 입시 거래
전략의 출전 논리는 ATR 기반의 동적 추적 중지 메커니즘을 사용합니다:
코드 분석을 통해, 이 전략은 고정된 스톱로스를 설정하지 않고, 수익을 얻은 후의 보호 장치에 의존하여 위험을 관리한다는 것을 알 수 있다. 전략은 최대 5개의 피라미드 가설을 허용하며, 각 거래마다 50%의 계정 이자를 사용하며, 0.05%의 거래 수수료를 고려한다.
정밀한 역전 인식 메커니즘: 연속적으로 3개의 동방향 加 역전의 조합 모드를 통해 실제 역전 인식의 정확도를 높이고, 가짜 신호의 발생을 줄인다.
동적으로 시장의 변동성에 적응: ATR을 변동률 지표로 사용하여 수동으로 매개 변수를 조정하지 않고 전략이 다른 시장과 다른 기간의 변동 특성에 자동으로 적응할 수 있도록합니다.
지능형 자금 보호 장치: 거래가 수익을 얻은 후에만 보호 장치를 시작하여 시장의 작은 흔들림으로 인한 조기 출전을 피하고 수익이 철회 될 때 적시에 수익을 잠금합니다.
유연한 포지션 관리: 피라미드 방식의 포지션을 지원하여 트렌드 확인 후 포지션을 증가시켜 수익 잠재력을 높일 수 있습니다.
적용 범위: 전략 설계는 특히 불안한 시장과 트렌드 역점에 효과적이며, 암호화폐, 금, 외환과 같은 변동성이 높은 시장에 적용됩니다.
매개 변수는 간결하고 쉽게 조정할 수 있습니다. 최소 부피 비율, ATR 주기의 길이 및 추적 중지 매개 변수를 설정하면 다양한 시장 환경에 최적화하고 적응할 수 있습니다.
고정되지 않은 중지 위험: 전략은 전통적인 의미에서 중지 지점을 설정하지 않으며, 추적 중지 가동되기 전에 시장의 불리한 움직임이 지속되면 큰 손실이 발생할 수 있습니다. 이러한 위험에 대해 거래자는 시간 또는 최대 손실 비율에 기반한 긴급 중지 장치를 추가하는 것을 고려하는 것이 좋습니다.
과도한 거래 위험: 입시 조건이 상대적으로 느슨하기 때문에 (단 3개의 동방향 선과 1개의 역방향 선만 필요하기 때문에) 불안한 시장에서 과도한 거래 신호가 발생할 수 있다. 트렌드 지표와 결합하거나 저항 지점을 지원하는 것과 같은 추가적인 필터링 조건을 추가함으로써 불필요한 거래를 줄일 수 있다.
피라미드 포지션 위험: 전략은 최대 5번의 포지션을 지원하며, 시장이 갑자기 역전되면, 엄청난 손실이 발생할 수 있다. 개인의 위험 감수 능력에 따라 포지션 수를 적절히 줄이거나 더 엄격한 포지션 조건을 설정하는 것이 좋습니다.
시장 조건 의존성: 전략은 명백한 흔들림 시장이나 트렌드 끝에서 가장 잘 작동하지만 강한 트렌드 시장에서 잘못된 신호를 자주 유발할 수 있습니다. 트렌드 필터를 추가하여 적절한 시장 환경에서만 전략을 적용하는 것을 고려해야합니다.
매개 변수 민감성: ATR 배수 매개 변수의 미세한 변화는 전략 성능에 중대한 영향을 미칠 수 있으며, 다양한 시장과 시간 주기별로 전체적인 매개 변수 최적화 및 재검토가 필요합니다.
// 趋势过滤器示例
ema200 = ta.ema(close, 200)
adx = ta.adx(14)
inUptrend = close > ema200 and adx > 25
inDowntrend = close < ema200 and adx > 25
// 初始止损示例
initialStopLoss = strategy.position_size > 0 ? longEntry - 2 * atr :
strategy.position_size < 0 ? shortEntry + 2 * atr : na
거래 시간 필터를 추가합니다. 특정 시장의 특정 시간 동안의 변동성이 너무 크거나 너무 작아 전략의 성과에 영향을 미칠 수 있습니다. 거래 시간 필터를 추가하여 최적의 시간에 거래 할 수 있습니다.
최적화 역전 확인 조건: 역전 신호의 신뢰성을 강화하기 위해 수량 또는 동량 지표를 결합하는 것이 고려될 수 있다. 역전 신호는 이상적으로 수량 증대 또는 동량 지표의 이탈과 함께 이루어져야 한다.
동적 조정 파라미터: 시장 상태에 따라 ATR 배수 파라미터를 자동으로 조정하는 메커니즘을 설계 할 수 있습니다. 예를 들어, 높은 변동성 동안 추적 거리를 늘리고 낮은 변동성 동안 추적 거리를 줄입니다.
이윤 목표를 높여라: 트래킹 스톱을 제외하고, 지지부진 또는 피보나이치 리턴에 기반한 부분 이득을 설정하여 중요한 가격에서 부분 이윤을 고정시킬 수 있다.
리스크 관리 최적화: 50%의 권리 사용이 고정되는 대신, 단일 거래의 위험을 계정의 고정된 비율로 제한하는 것은 다음과 같이 수행 할 수 있습니다.
// 动态仓位大小计算
riskPerTrade = 1 // 风险1%账户
posSize = (strategy.equity * riskPerTrade / 100) / (atr * 2)
ATR 동적 트래킹 스톱을 기반으로 한 트리플 리버스 모드 수량 거래 전략은 세 개의 연속 동향 스톱을 따르는 리버스 모드를 식별하여 시장 전환점을 잡기 위해 정교하게 설계된 단기 리버스 거래 시스템입니다. 가장 큰 특징은 ATR 기반의 동적 트래킹 스톱 메커니즘을 적용하여 전략이 다양한 시장 조건의 변동 특성에 적응하여 충분한 수익 공간을 유지하면서 달성 된 수익을 적시 할 수 있습니다.
이 전략은 특히 불안정한 시장과 변동이 많은 시장 환경, 예를 들어 암호화폐, 금, 외환 시장에서 적용됩니다. 트렌드 필터링, 스마트 스톱 및 동적 파라미터 조정과 같은 이 문서에서 제시된 최적화 제안을 추가하여 거래자는 전략의 안정성과 수익성을 더욱 향상시킬 수 있습니다.
주의해야 할 점은, 이 전략이 시장 변화에 자동으로 적응할 수 있는 능력에도 불구하고, 특정 시장 특성과 개인 위험 선호에 따라 변수를 최적화하고 조정하는 거래자가 필요하다는 것입니다. 실장에 적용하기 전에, 전략이 다른 시장 환경에서 어떻게 작동하는지 확인하기 위해 충분한 역사 회귀와 시뮬레이션 거래를 수행하는 것이 좋습니다.
/*backtest
start: 2024-05-19 00:00:00
end: 2025-04-11 00:00:00
period: 5d
basePeriod: 5d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDC"}]
*/
//@version=5
// ========================================================================
// 📌 CMA Technologies – 3-Bar Reversal Detection Bot (ATR Trailing TP)
// 🌐 Developed by CMA Technologies | Visit: cmatech.co
// 🔄 Short-term reversal entry with dynamic ATR-based trailing TP
// 🔍 Strategy by @CMATechnologies
// ========================================================================
strategy("CMA Technologies – 3-Bar Reversal Detection Bot", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1, pyramiding=5, commission_type=strategy.commission.percent, commission_value=0.05)
// === INPUTS ===
minBodyPct = input.float(3, title="Minimum Body Size (%)")
atrLen = input.int(14, title="ATR Length")
trailStartATR = input.float(1.5, title="Start Trailing After (x ATR)")
trailOffsetATR = input.float(1.0, title="Trailing Offset (x ATR)")
// === ATR ===
atr = ta.atr(atrLen)
// === FUNCTION ===
isBearish(closeVal, openVal) =>
closeVal < openVal
isBullish(closeVal, openVal) =>
closeVal > openVal
bodyPct(closeVal, openVal) =>
math.abs(closeVal - openVal) / openVal * 100
// === CONDITIONS ===
bullishReversal = isBearish(close[3], open[3]) and isBearish(close[2], open[2]) and isBearish(close[1], open[1]) and isBullish(close, open) and bodyPct(close, open) > minBodyPct
bearishReversal = isBullish(close[3], open[3]) and isBullish(close[2], open[2]) and isBullish(close[1], open[1]) and isBearish(close, open) and bodyPct(close, open) > minBodyPct
// === ENTRY ===
if (bullishReversal)// and strategy.position_size == 0)
strategy.entry("3Bar Long", strategy.long)
if (bearishReversal)// and strategy.position_size == 0)
strategy.entry("3Bar Short", strategy.short)
// === ATR-BASED TRAILING TP ===
longEntry = strategy.opentrades.entry_price(0)
shortEntry = strategy.opentrades.entry_price(0)
maxHigh = ta.highest(close, 20)
minLow = ta.lowest(close, 20)
startTrailLong = longEntry + trailStartATR * atr
startTrailShort = shortEntry - trailStartATR * atr
longTrailExit = close < (maxHigh - trailOffsetATR * atr) and close > startTrailLong
shortTrailExit = close > (minLow + trailOffsetATR * atr) and close < startTrailShort
if (strategy.position_size > 0 and longTrailExit)
strategy.close("3Bar Long", comment="ATR Trailing TP Hit")
if (strategy.position_size < 0 and shortTrailExit)
strategy.close("3Bar Short", comment="ATR Trailing TP Hit")
// === PLOTS ===
plotshape(bullishReversal, title="3-Bar Bull Reversal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.tiny)
plotshape(bearishReversal, title="3-Bar Bear Reversal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.tiny)