
동적 기울기 쌍 이동 평균 좁은带突破量化交易策略 (동적 기울기 쌍 이동 평균 좁은带突破量化交易策略) 는 올리버 벨레즈의 교리 원칙에 기반한 고급 거래 시스템으로, 기술적 분석과 동적 거래의 핵심 요소를 결합한다. 이 전략은 주로 단기 (~20주기) 와 장기 (~200주기) 간단한 이동 평균 (~SMA) 사이의 관계를 이용하며, 가격 역동성, 변동성 및 하락 형태를 결합하여 좁은带区域에서 높은 확률의突破 거래 기회를 찾는다. 이 전략의 핵심 특징은 이동 평균과 밀접하게 연관된 좁은带区域 내에서, 강도적인 ‘대왕의 기둥’과 색화 신호를 식별하며, 또한 예상된 변화된 리스크 수익률 (risk-reward ratio) 을 활용하여 스로프 및 스톱 레벨을 관리한다.
이 전략의 핵심 원칙은 다음과 같은 몇 가지 핵심 요소의 상호 작용에 기반합니다.
이중 이동 평균 시스템전략: 20주기 SMA와 200주기 SMA를 활용하여 거래 프레임워크를 만듭니다. 이 두 평균선 사이의 거리가 상대적으로 작을 때 ( 좁은 대역 상태, 1.5% 미만의 차이) 시스템은 잠재적인 거래 신호를 찾습니다.
평균선 기울기 검증전략: 20주기 SMA의 각도를 계산하여 ((반사사진 함수를 사용하여 계산), 시장이 충분한 동력을 가지고 있음을 확인하고, 각도가 30도 이상일 때만 입장을 고려하십시오.
입력 신호 타입:
위험 관리 프레임워크:
시장 상태 판단전략: 두 평행선 사이의 상대적인 거리를 계산하여 시장 상태를 판단합니다.
다중 입점 조건 요구 사항: 좁은 밴드 상태 + 효과적인 슬라이드 + SMA20보다 높은 마감 가격 + SMA20보다 높은 SMA200 + 코끼리 기둥 형태 . 공허 입시 조건 요구 사항: 좁은 띠 상태 + 효과적인 기울기 + 종전 가격 SMA20 이하 + SMA20 이하 SMA200 이하 + 코끼리 기둥 형태.
코드에 대한 심층적인 분석을 통해, 이 전략은 다음과 같은 중요한 장점을 가지고 있습니다:
다중 인증 메커니즘이 전략은 평평한 관계, 평평한 기울기, 가격 위치 및 특수한 하락 형태와 같은 여러 차원의 확인 요소를 결합하여 품질이 낮은 신호를 효과적으로 필터링하여 거래 품질을 향상시킵니다.
시장 상황에 적응하는 것좁은 대역과 넓은 대역을 구분함으로써, 전략은 가장 적합한 시장 조건에서 기회를 찾을 수 있으며, 이미 확산된 추세에서 높은 것을 쫓는 것을 피할 수 있습니다.
동적 위험 관리ATR을 변동성을 측정하는 도구로 사용하여, 고정된 점수를 사용하는 대신, 현 시장의 변동성에 따라 스톱로스 및 수익 목표를 조정할 수 있도록합니다.
계층적 수익 전략: 부분 수익과 최종 수익 두 단계의 전략을 채택하면, 유리한 상황에서 부분 수익을 잠금하는 것을 보장 할 수 있으며, 조기에 모든 것을 떠나지 않고 큰 추세를 놓치지 않습니다.
지능형 부양 메커니즘: 색상 변화 신호를 통해 포지션 기회를 제공하여 동일한 트렌드에서 최대 두 개의 포지션을 추가하여 자본 활용 효율성을 최적화합니다.
이동식 손해 방지: 가격이 첫 번째 수익 목표에 도달했을 때 자동으로 상쇄 손실을 상쇄 손실 균형 지점으로 이동하여 “위험 제로” 거래를 수행하여 얻은 이익을 보호합니다.
시각적 도움말전략: 명확한 시각적 지시와 디스플레이를 제공하여 거래자가 신호와 시장 상태를 직관적으로 식별하고 의사 결정 과정을 간소화 할 수 있습니다.
가격행동과 기술 지표의 통합오리버 벨레즈 (Oliver Velez) 의 가격 행동 이론과 전통적인 기술 지표를 결합하여 보다 안정적인 거래 시스템을 만들었습니다.
이 전략은 합리적으로 설계되었지만 다음과 같은 잠재적인 위험과 도전이 있습니다.
매개변수 민감도전략 성능은 SMA 주기, ATR 길이 및 리스크 수익률과 같은 핵심 매개 변수의 설정에 크게 의존합니다. 시장과 시간 프레임에 따라 다른 매개 변수 조합이 필요할 수 있으며 충분한 역사 회귀와 최적화가 필요합니다.
가짜 침입 위험좁은 지역에서의 브레이크는 때때로 가짜 브레이크가 될 수 있으며, 특히 낮은 변동성 시장 환경에서는 그렇다. 전략은 “코끼리 기둥”을 사용하여 가짜 브레이크를 줄이도록 요구하지만, 완전히 피할 수는 없다.
슬라이드 포인트와 실행 위험: 실물 거래에서, 특히 변동성이 큰 경우, 슬라이드 포인트 문제가 발생할 수 있으며, 이로 인해 실제 진입 가격이 이상적인 가격과 일치하지 않으며 전체 위험 수익 구조에 영향을 미칩니다.
재정 관리의 도전: 10%의 자금을 고정하고 두 번 추가하는 것이 허용되며, 연속적인 손실이나 시장의 급격한 변동이 발생할 경우 과도한 위험을 초래할 수 있습니다.
평균에 지나치게 의존하는 것전략은 주로 SMA가 추세 방향을 판단하는 데 의존하지만, 간격적인 변동 시장에서, 평균선은 자주 교차하여 과도한 거짓 신호를 생성할 수 있다.
시장 환경의 필터링 부족이 전략은 다양한 거시 시장 환경에 맞게 조정되지 않았으며, 시장의 특정 단계에서 좋지 않은 성과를 낼 수 있습니다.
자금 곡선 철회전략이 포지션을 허용하기 때문에, 트렌드가 급격히 역전되면, 특히 두 번의 포지션 이후 시장이 역전될 경우, 큰 계좌 철수를 초래할 수 있다.
해결 방법은 추가 시장 환경 필터를 추가하고, 재무 관리 비율을 조정하고, 다른 시장 조건에 따라 변수를 동적으로 조정하고, 신호를 확인하기 위해 다른 기술 지표를 추가하는 것을 고려하는 것입니다.
코드 분석을 바탕으로, 이 전략은 다음과 같은 방향으로 최적화될 수 있습니다:
역동적인 좁은 반지점: 현재 전략은 고정 1.5%와 2%를 좁은 대역 및 폭대 판정 값으로 사용합니다. 전략이 다른 시장 환경에 더 잘 적응하도록 역사적인 변동률의 동력에 따라 이러한 값을 조정하는 것을 고려할 수 있습니다. 최적화 이유: 다른 시장과 시간 프레임은 다른 변동 특성을 가지고 있으며 고정 값은 충분히 유연하지 않을 수 있습니다.
평선 시스템 강화: 중기 평균선을 추가하는 것을 고려할 수 있다 (예: 50주기 SMA) 삼중 평균선 시스템을 형성하거나, 지수 이동 평균을 시도한다 (예: EMA) SMA를 대체하여 가격 변화에 대한 민감성을 높인다. 최적화 이유: 중기 기준점을 추가하는 것은 보다 포괄적인 시장 관점을 제공하며, EMA는 최신 가격 변화에 더 민감하다.
기울기 계산을 개선: 현재 기울기 계산은 비교적 간단하여, 선형 회귀 기울기 또는 다주기 기울기 변화를 사용하여 보다 안정적인 방향 지시를 얻을 수 있다. 최적화 이유: 단점 기울기 계산은 단기 변동에 영향을 받기 쉽고, 개선 후 방향 판단의 안정성을 높일 수 있다.
수량 확인: 입구 신호에 거래량 조건을 추가하여 “코끼리 기둥”이 평균 거래량보다 높은 돌파구를 동반하도록 요구합니다. 최적화 이유: 거래량은 가격 변화의 유효성을 확인하는 중요한 요소이며, 가짜 돌파구를 크게 줄일 수 있습니다.
동적 리스크 수익률: 시장의 변동성 또는 ATR 비율에 따라 동적으로 조정하는 리스크 수익률, 낮은 변동성 시장에서 더 높은 RR 비율을 사용하고, 높은 변동성 시장에서 더 보수적인 설정을 사용합니다. 최적화 이유: 다양한 변동성 환경에서 수익 잠재력이 다르므로, 동적으로 조정하면 각 거래의 기대 수익을 최적화 할 수 있습니다.
최적화 조건: 현재 포지션 조건은 좀 더 느리고, 트렌드 강도 확인을 추가하거나 가격이 중요한 지원 / 저항 지점으로 돌아가는 경우에만 포지션을 추가하는 것이 고려될 수 있습니다. 최적화 이유: 더 엄격한 포지션 조건은 추가 포지션의 성공률을 높이고 전반적인 위험을 줄일 수 있습니다.
시장 환경 필터링: 마크로 시장 환경 필터를 추가하여 불리한 시장 환경에서 거래를 줄이거나 중지하기 위해 변동률 지표 (VIX와 같은) 또는 추세 강도 지표와 같은 마크로 시장 환경 필터를 추가합니다. 최적화 이유: 다양한 시장 단계에서 전략의 성능은 매우 다양하며 환경 필터는 불리한 조건에서 거래를 피할 수 있습니다.
적응적 손실 방지 전략최적화 이유: 고정 ATR 배수의 중지 손실은 때로는 시장 구조와 잘 일치하지 않으며, 적응 방법은 실제 가격 행동에 더 적합 할 수 있습니다.
동적 기울기 쌍 이동 평균 좁은 밴드 돌파량 거래 전략은 기술 분석의 여러 요소를 결합 한 통합 거래 시스템으로, 정해진 입시 조건, 다단계 확인 메커니즘 및 완벽한 위험 관리 프레임 워크를 통해 거래자에게 구조화된 시장 참여 방식을 제공합니다. 이 전략은 SMA, ATR 및 가격 행동과 같은 기초 기술 분석 개념을 기반으로하지만, 올리버 펠레즈의 방법론을 통해 이러한 요소를 명확한 거래 시스템으로 통합합니다.
전략의 핵심 장점은 이동 평균의 좁은 지역에서의 높은 확률의 돌파 기회를 식별하고 “코끼리 기둥”과 “색 변화”와 같은 특정 가격 패턴을 통해 신호의 유효성을 확인하는 데 있습니다. 동시에, 완벽한 위험 관리 구조는 자금 안전과 이익 보호를 보장합니다.
그러나, 이 전략은 또한 변수 민감성, 가짜 돌파 위험, 그리고 자금 관리 과제와 같은 문제를 직면한다. 좁은 밴드 마이너스를 최적화, 평균선 시스템을 강화, 기울기 계산을 개선, 거래량 확인을 추가, 동적 리스크 수익률을 구현, 포지션 조건을 최적화, 시장 환경 필터링을 추가하고 손해 방지 전략에 적응하는 것 등에 대한 개선을 통해 전략의 안정성과 적응력을 더욱 향상시킬 수 있다.
전반적으로, 이것은 합리적이고 논리적으로 명확하게 설계된 양적 거래 전략이며, 거래 경험이있는 투자자, 특히 기술 분석과 체계화된 거래 방법을 선호하는 거래자에게 적합합니다. 적절한 파라미터 최적화 및 위험 관리를 통해, 이 전략은 다양한 시장 환경에서 안정적인 거래 성능을 달성 할 잠재력을 가지고 있습니다.
/*backtest
start: 2024-05-13 00:00:00
end: 2025-05-12 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Oliver Velez Advanced Strategy v2", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10, pyramiding=2, calc_on_order_fills=true, calc_on_every_tick=true)
// === INPUTS ===
smaLen1 = input.int(20, title="SMA Short")
smaLen2 = input.int(200, title="SMA Long")
atrLen = input.int(14, title="ATR Length")
rr1 = input.float(2.5, title="RR for Partial Profit", step=0.1)
rr2 = input.float(4.0, title="RR for Final Profit", step=0.1)
// === INDICATORS ===
sma20 = ta.sma(close, smaLen1)
sma200 = ta.sma(close, smaLen2)
atr = ta.atr(atrLen)
angle = math.atan(sma20 - sma20[1]) * 180 / math.pi
// === STATES ===
isNarrow = math.abs(sma20 - sma200) / sma200 < 0.015
isWide = math.abs(sma20 - sma200) / sma200 >= 0.02
validSlope = angle > 30
// === CANDLE PATTERNS ===
elephant_long = close > open and (close - open) > 1.5 * atr and high > high[1]
elephant_short = close < open and (open - close) > 1.5 * atr and low < low[1]
color_change_long = close > open and close[1] < open[1]
color_change_short = close < open and close[1] > open[1]
// === LONG ENTRY ===
long_primary = isNarrow and validSlope and close > sma20 and sma20 > sma200 and elephant_long
long_add = isNarrow and color_change_long and close > sma20
long_entry_price = close
long_stop = math.min(low, close - 2 * atr)
long_risk = long_entry_price - long_stop
long_tp1 = long_entry_price + rr1 * long_risk
long_tp2 = long_entry_price + rr2 * long_risk
// === SHORT ENTRY ===
short_primary = isNarrow and validSlope and close < sma20 and sma20 < sma200 and elephant_short
short_add = isNarrow and color_change_short and close < sma20
short_entry_price = close
short_stop = math.max(high, close + 2 * atr)
short_risk = short_stop - short_entry_price
short_tp1 = short_entry_price - rr1 * short_risk
short_tp2 = short_entry_price - rr2 * short_risk
// === LONG EXECUTION ===
if (long_primary)
strategy.entry("Long Entry", strategy.long, comment="Elephant Bar Long")
strategy.exit("Long TP1", from_entry="Long Entry", limit=long_tp1, stop=long_stop)
strategy.exit("Long TP2", from_entry="Long Entry", qty_percent=50, limit=long_tp2)
if (long_add)
strategy.entry("Long Add", strategy.long, comment="Color Change Long")
strategy.exit("Add TP1", from_entry="Long Add", limit=long_tp1, stop=long_stop)
strategy.exit("Add TP2", from_entry="Long Add", qty_percent=50, limit=long_tp2)
// === SHORT EXECUTION ===
if (short_primary)
strategy.entry("Short Entry", strategy.short, comment="Elephant Bar Short")
strategy.exit("Short TP1", from_entry="Short Entry", limit=short_tp1, stop=short_stop)
strategy.exit("Short TP2", from_entry="Short Entry", qty_percent=50, limit=short_tp2)
if (short_add)
strategy.entry("Short Add", strategy.short, comment="Color Change Short")
strategy.exit("Short TP1 Add", from_entry="Short Add", limit=short_tp1, stop=short_stop)
strategy.exit("Short TP2 Add", from_entry="Short Add", qty_percent=50, limit=short_tp2)
// === BREAKEVEN CHECK ===
var float breakeven_price = na
long_breakeven_trigger = high >= long_tp1
short_breakeven_trigger = low <= short_tp1
breakeven_price := long_breakeven_trigger or short_breakeven_trigger ? close : breakeven_price
// === ALERTS ===
alertcondition(long_primary, title="Long Elephant", message="Elephant Bar Long Entry Triggered!")
alertcondition(long_add, title="Color Change Long", message="Color Change Long Entry Triggered!")
alertcondition(long_breakeven_trigger, title="Long Breakeven", message="Move SL to Breakeven for Long")
alertcondition(short_primary, title="Short Elephant", message="Elephant Bar Short Entry Triggered!")
alertcondition(short_add, title="Color Change Short", message="Color Change Short Entry Triggered!")
alertcondition(short_breakeven_trigger, title="Short Breakeven", message="Move SL to Breakeven for Short")
// === PLOTTING ===
plot(sma20, color=color.orange, title="SMA 20")
plot(sma200, color=color.blue, title="SMA 200")
bgcolor(isNarrow ? color.new(color.green, 85) : na)
plotshape(long_primary, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, text="E")
plotshape(long_add, style=shape.circle, location=location.belowbar, color=color.lime, size=size.tiny, text="A")
plotshape(short_primary, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, text="E")
plotshape(short_add, style=shape.circle, location=location.abovebar, color=color.maroon, size=size.tiny, text="A")
// === DASHBOARD ===
var label dash = na
label.delete(dash)
dash := label.new(x=bar_index, y=high, text=
"Oliver Velez Strategy\n" +
"SMA 20 Slope: " + str.tostring(angle, "#.##") + "°\n" +
"State: " + (isNarrow ? "NARROW" : "WIDE") + "\n" +
"Last Entry: " + (long_primary ? "Long E-Bar" : long_add ? "Long Add" : short_primary ? "Short E-Bar" : short_add ? "Short Add" : "None") + "\n" +
"Breakeven: " + (breakeven_price != na ? str.tostring(breakeven_price, "#.##") : "No"), style=label.style_label_left, color=color.new(color.black, 85), textcolor=color.white)