ATR 채널 브레이크오웃 트렌드를 따르는 전략

저자:차오장, 날짜: 2024-01-03 11:53:52
태그:

img

전반적인 설명

이 전략은 ATR 채널과 브레이크아웃 이론을 활용하여 채널이 깨질 때 트렌드를 추적합니다. 트렌드를 따르는 전략에 속합니다. 이 전략은 간단하고 이해하기 쉽습니다. 이동 평균 채널과 ATR 지표를 사용하여 트렌드 방향을 결정하고 주요 지점에서 거래 신호를 발산합니다.

원칙

이 전략은 ATR 채널을 형성하기 위해 높은, 낮은, 가까운 가격과 ATR 지표를 가진 상위 및 하위 밴드를 구성합니다. 채널 폭은 ATR 매개 변수 크기로 결정됩니다. 가격이 채널을 통과 할 때, 그것은 트렌드의 시작으로 판단되며, 그 지점에는 긴 또는 짧은 포지션이 입력됩니다. 전략에는 두 계층의 거래 신호가 있습니다. 가격이 한 ATR 폭을 통과 할 때, 그것은 구매 / 판매 포인트의 첫 번째 계층을 유발하는 신흥 트렌드로 간주됩니다. 가격이 두 ATR 폭을 통과 할 때, 그것은 구매 / 판매 포인트의 두 번째 계층을 유발하는 가속 트렌드로 간주됩니다.

이점 분석

이 전략의 주요 장점은 다음과 같습니다.

  1. 채널을 구성하기 위해 ATR 지표를 사용하면 단순한 이동 평균보다 시장 변동성이 더 좋습니다.
  2. 두 계층의 구매/판매 지점은 통제 가능한 위험과 함께 단계적 진입을 허용합니다.
  3. 브레이크아웃 이론은 주요 트렌드 포인트를 정확하게 파악합니다.
  4. 간결한 코드는 이해하기 쉽고 구현하기 쉽습니다.

위험 분석

이 전략의 주요 위험은 다음과 같습니다.

  1. 단일 지표에 의존하는 것은 ATR가 실패할 경우 고도의 실패 확률을 의미합니다.
  2. 스톱 로스 및 포지션 관리의 부족은 충분한 리스크 통제를 초래합니다.
  3. 유틸리티는 검증이 필요하고 실시간 거래 조건에서 낮은 성과를 낼 수 있습니다.
  4. 부적절한 매개 변수는 윙사 또는 오버 트레이딩을 유발할 수 있습니다.

최적화 방향

이 전략의 최적화 방향은 다음과 같습니다.

  1. 잘못된 판단을 방지하기 위해 여러 지표가 있는 필터를 추가합니다.
  2. 위험 통제를 강화하기 위해 스톱 로스 모듈을 추가합니다.
  3. 위치 제어와 돈 관리
  4. 다른 제품에 대한 매개 변수 조정
  5. 실시간 거래의 거래 빈도와 포지션 크기를 줄이는 것

요약

이 전략의 전반적인 틀은 명확하고 개념의 증명으로 사용할 수 있습니다. 그러나 실질적인 최적화를 허용하는 라이브 거래에서 격차가 있습니다. 위험 통제 및 거래 빈도가 추가로 개선 될 수 있다면 응용 전망이 좋을 것입니다.


/*backtest
start: 2023-12-03 00:00:00
end: 2024-01-02 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Myhaj_Lito

//@version=5
strategy("Renko Trend Strategy",shorttitle = "RENKO-Trend str.",overlay = true)
TF = input.timeframe(title='TimeFrame', defval="60")
ATRlength = input.int(title="ATR length", defval=60, minval=2, maxval=1000)

HIGH = request.security(syminfo.tickerid, TF, high)
LOW = request.security(syminfo.tickerid, TF, low)
CLOSE = request.security(syminfo.tickerid, TF, close)
ATR = request.security(syminfo.tickerid, TF, ta.atr(ATRlength))


RENKOUP = float(na)
RENKODN = float(na)
H = float(na)
COLOR = color(na)
BUY = int(na)
SELL = int(na)
UP = bool(na)
DN = bool(na)
CHANGE = bool(na)

RENKOUP := na(RENKOUP[1]) ? (HIGH + LOW) / 2 + ATR / 2 : RENKOUP[1]
RENKODN := na(RENKOUP[1]) ? (HIGH + LOW) / 2 - ATR / 2 : RENKODN[1]
H := na(RENKOUP[1]) or na(RENKODN[1]) ? RENKOUP - RENKODN : RENKOUP[1] - RENKODN[1]
COLOR := na(COLOR[1]) ? color.white : COLOR[1]
BUY := na(BUY[1]) ? 0 : BUY[1]
SELL := na(SELL[1]) ? 0 : SELL[1]
UP := false
DN := false
CHANGE := false

// calculating 
if not CHANGE and close >= RENKOUP[1] + H * 2
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1] + ATR * 2
    RENKODN := RENKOUP[1] + ATR
    COLOR := color.rgb(0, 255, 170,60)
    SELL := 0
    BUY += 2
    BUY


if not CHANGE and close >= RENKOUP[1] + H
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1] + ATR
    RENKODN := RENKOUP[1]
    COLOR := color.rgb(0, 230, 38,60)
    SELL := 0
    BUY += 1
    BUY

if not CHANGE and close <= RENKODN[1] - H * 2
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1] - ATR * 2
    RENKOUP := RENKODN[1] - ATR
    COLOR := color.rgb(255, 92, 43,60)
    BUY := 0
    SELL += 2
    SELL
if not CHANGE and close <= RENKODN[1] - H
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1] - ATR
    RENKOUP := RENKODN[1]
    COLOR := color.rgb(245, 69, 69,60)
    BUY := 0
    SELL += 1
    SELL
//// STRATEGY 
if(UP)
    strategy.entry("Long",strategy.long)
if(DN)
    strategy.entry("Short",strategy.short)


// ploting 

bgcolor(COLOR)


더 많은