ATR을 기반으로 한 다중 트렌드 추적 전략 및 손절매 및 손절매 최적화 시스템

ATR SMA TP/SL OHLC MA
생성 날짜: 2024-11-12 16:14:11 마지막으로 수정됨: 2024-11-12 16:14:11
복사: 5 클릭수: 518
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

ATR을 기반으로 한 다중 트렌드 추적 전략 및 손절매 및 손절매 최적화 시스템

개요

이 전략은 평균 실제 파장 (ATR) 지표에 기반한 트렌드 추적 거래 시스템으로, 가격 변동 범위를 동적으로 계산하여 시장 트렌드를 식별하고, 자율적 인 스톱 스로드 메커니즘과 결합하여 위험 관리를 수행합니다. 전략은 다주기 분석 방법을 사용하여, ATR 곱하기 동적으로 거래 신호의 촉발 조건을 조정하여 시장 변동에 대한 정확한 추적을 수행합니다.

전략 원칙

전략의 핵심은 ATR 지표에 기반한 동적 계산으로, 설정된 주기적 파라미터 (기준 10기) 를 통해 시장의 실제 파장을 계산한다. ATR 곱셈 (기준 3.0) 을 사용하여 상하 궤도선을 구성하고, 가격이 궤도선을 돌파했을 때 거래 신호를 유발한다. 구체적으로 다음을 포함한다:

  1. SMA 또는 표준 ATR을 사용하여 파장 기준을 계산
  2. 동적 계산 위아래 궤도선은 트렌드 추적 기준으로
  3. 가격과 궤도 선의 교차로 트렌드 방향을 결정합니다.
  4. 트렌드 전환 지점에서 거래 신호를 트리거
  5. 비율 기반의 동적 스톱 스톱 시스템을 구현합니다.

전략적 이점

  1. 자기 적응력: ATR을 통해 시장의 변동에 동적으로 대응
  2. 리스크 제어: 내장 백분율 스톱 스톱 손실 메커니즘, 거래 당 리스크를 효과적으로 제어
  3. 매개 변수 유연성: ATR 주기, 배수 등과 같은 핵심 매개 변수는 시장 특성에 따라 조정할 수 있다
  4. 시각적으로 명확한: 트렌드 표기 및 신호 팁을 포함한 완벽한 그래픽 인터페이스를 제공합니다.
  5. 시간 관리: 사용자 정의 거래 시간 창을 지원하여 전략 적용성을 향상시킵니다.

전략적 위험

  1. 트렌드 리버스 위험: 흔들리는 시장에서 빈번한 잘못된 신호가 발생할 수 있습니다.
  2. 매개 변수 민감성: ATR 주기 및 곱수의 선택이 전략 성능에 큰 영향을 미칩니다.
  3. 시장 환경 의존성: 높은 변동성 기간 동안 더 큰 지각이 발생할 수 있는 상황
  4. 스톱로스 설정: 고정 비율 스톱로스는 모든 시장 조건에 적합하지 않을 수 있습니다.

전략 최적화 방향

  1. 트렌드 판단의 정확성을 높이기 위해 다중 시간 프레임 분석을 도입합니다.
  2. 트랜지스 메커니즘 확인을 추가하여 신호 신뢰성을 강화
  3. 시장의 변동에 따라 적응 가능한 스톱 스톱 손실 메커니즘 개발
  4. 트렌드 강도 필터를 증가시켜 가짜 신호를 줄여줍니다.
  5. 진입 시점을 최적화하기 위한 변동률 지표

요약하다

이것은 ATR 지표를 통해 시장 변동에 대한 정확한 추적을 구현하고, 스톱 스톱 손실 메커니즘과 결합하여 위험 관리를 수행하는 잘 설계 된 트렌드 추적 전략이다. 전략의 장점은 그것의 적응력이 강하고, 위험이 통제 가능하지만, 여전히 전략의 성능에 대한 시장 환경의 영향을 주의해야 한다. 제안된 최적화 방향에 의해, 전략의 안정성과 수익성이 더욱 향상될 전망이다.

전략 소스 코드
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Custom Buy BID Strategy", overlay=true, shorttitle="Buy BID by MR.STOCKVN")

// Cài đặt chỉ báo
Periods = input.int(title="ATR Period", defval=10)
src = input.source(hl2, title="Source")
Multiplier = input.float(title="ATR Multiplier", step=0.1, defval=3.0)
changeATR = input.bool(title="Change ATR Calculation Method?", defval=true)
showsignals = input.bool(title="Show Buy Signals?", defval=false)
highlighting = input.bool(title="Highlighter On/Off?", defval=true)
barcoloring = input.bool(title="Bar Coloring On/Off?", defval=true)

// Tính toán ATR
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2

// Tính toán mức giá mua bán dựa trên ATR
up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up

dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn

trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Vẽ xu hướng
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_line, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1

// Hiển thị tín hiệu mua
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)

// Cài đặt màu cho thanh nến
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)

// Điều kiện thời gian giao dịch
FromMonth = input.int(defval=9, title="From Month", minval=1, maxval=12)
FromDay = input.int(defval=1, title="From Day", minval=1, maxval=31)
FromYear = input.int(defval=2018, title="From Year", minval=999)
ToMonth = input.int(defval=1, title="To Month", minval=1, maxval=12)
ToDay = input.int(defval=1, title="To Day", minval=1, maxval=31)
ToYear = input.int(defval=9999, title="To Year", minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)

// Cửa sổ thời gian giao dịch
window() => (time >= start and time <= finish)

// Điều kiện vào lệnh Buy
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when=window())

// Điều kiện chốt lời và cắt lỗ có thể điều chỉnh
takeProfitPercent = input.float(5, title="Take Profit (%)") / 100
stopLossPercent = input.float(2, title="Stop Loss (%)") / 100

// Tính toán giá trị chốt lời và cắt lỗ dựa trên giá vào lệnh
if (strategy.position_size > 0)
    strategy.exit("Take Profit", "BUY", limit=strategy.position_avg_price * (1 + takeProfitPercent), stop=strategy.position_avg_price * (1 - stopLossPercent))

// Màu nến theo xu hướng
buy1 = ta.barssince(buySignal)
color1 = buy1[1] < na ? color.green : na
barcolor(barcoloring ? color1 : na)