ATR 채널 기반 브레이크아웃 진입 트렌드 전략


생성 날짜: 2024-01-03 11:53:52 마지막으로 수정됨: 2024-01-03 11:53:52
복사: 1 클릭수: 722
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

ATR 채널 기반 브레이크아웃 진입 트렌드 전략

개요

이 전략은 ATR 통로와 틈새 이론을 사용하며, 통로를 돌파할 때 트렌드에 들어가며, 트렌드 추적 전략에 속한다. 전략은 간단하고 이해하기 쉽고,均線通道와 ATR 지표를 사용하여 트렌드 방향을 판단하고, 중요한 지점에서 거래 신호를 발산한다.

전략 원칙

이 전략은 높은, 낮은, 닫기 가격과 ATR 지표를 사용하여 위아래를 구성하여 ATR 채널을 형성한다. 채널 폭은 ATR 변수의 크기에 따라 결정된다. 가격이 채널을 뚫을 때, 트렌드 시작으로 판단되며, 이 시점에는 장악 또는 하락의 방향으로 들어간다. 전략은 두 개의 거래 신호로 나뉘며, 가격이 1 개의 ATR 폭을 뚫을 때 트렌드 초반으로 간주되며, 이 때 1 개의 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)