리소스 로딩... 로딩...

변동성 범위 브레이크업 거래 전략

저자:차오장, 날짜: 2023-09-21 20:38:29
태그:

전반적인 설명

이 전략은 가격의 역사적 변동성 범위를 기반으로 거래 신호를 생성합니다. 특정 기간 동안 가장 높은 가격과 가장 낮은 가격의 차이를 계산하고 이동 평균을 사용하여 변동성 범위를 형성합니다. 가격은 범위의 상부 또는 하부 범위를 통과 할 때 거래 신호가 유발됩니다. 트렌드를 따르는 브레이크아웃 전략에 속합니다.

전략 논리

핵심 지표는 가격의 역사적 변동성입니다. 구체적인 계산은:

  1. HL라고 불리는 지난 N 바의 최고와 최저 가격의 차이를 계산합니다.

  2. N 바, avg ((H, L) 에서 가장 높은 가격과 가장 낮은 가격의 평균을 계산합니다.

  3. 변동성 = HL / AVG ((H, L)

여기서 N는 변동성 길이가 매개 변수입니다.

변동성을 얻은 후, 폭은 다음과 같이 계산됩니다.

상단역 = 현재 종료 + 현재 종료 * 변동성

하위 폭 = 현재 종료 - 현재 종료 * 변동성

그 다음 WMA에 의해 평균 길이가 설정된 기간으로 띠가 평평화됩니다.

가격이 상위 범위를 넘을 때, 장거리, 하위 범위를 넘을 때, 단거리.

출구 신호는 출구 유형으로 정의됩니다.

  1. 출구 유형이 변동성 MA라면, 가격이 WMA 아래로 넘어갈 때 출구한다.

  2. 출구 유형이 범위를 넘어서면 가격이 다시 범위를 넘어가면 출구합니다.

장점

  • 변동성은 트렌드를 잘 잡습니다.
  • WMA는 밴드를 더 안정적이고 신뢰할 수있게 만듭니다.
  • 브레이크오프 신호는 트렌드 전환을 잡습니다.
  • WMA/밴드 기반의 출구는 손실을 빠르게 절감합니다.
  • 다른 시장에 대한 매개 변수 조정을위한 많은 공간

위험성

  • 파업은 가격 반전으로 윙사브를 할 수 있습니다.
  • 트렌드 전환에 큰 손실 위험이 있습니다.
  • WMA 는 때때로 트렌드 변곡 을 감지 하는 데 지연 합니다
  • 매개 변수 최적화는 쉽지 않습니다. 많은 시행착오가 필요합니다.
  • 더 큰 마취, 좋은 위험 관리가 필요합니다

위험은 다음과 같이 감소 할 수 있습니다.

  • 보다 신뢰할 수 있는 대역을 위한 매개 변수 최적화
  • 다른 지표들을 추가하여 화이트사 (whipsaws) 를 피합니다.
  • 작은 규모와 더 나은 위험 관리
  • 재입국을 고려합니다.

최적화 방향

이 전략은 다음과 같이 개선될 수 있습니다.

  1. 매개 변수 조정

최적의 조합을 찾기 위해 다른 길이 값을 테스트합니다.

  1. 다른 지표를 추가합니다.

예를 들어, 가격이 상단 범위를 넘어서면 MACD도 황금색 교차인지 확인하십시오.

  1. 더 나은 스톱 로스

단순한 범위를 끊는 정지 대신 후속 정지로 최적화합니다.

  1. 재입국

정지 후 다시 트렌드를 잡기 위해 재입구 규칙을 설정합니다.

  1. 위치 크기

시장 변동성에 따라 크기를 동적으로 조정합니다.

요약

이 전략은 일반적으로 트렌드 시장을 위해 트렌드 강도를 측정하기 위해 변동성 기반 밴드와 WMA를 사용하여 브레이크아웃 신호에 대한 신뢰할 수있는 거래 범위를 형성하여 잘 작동합니다. 그러나 후진 트렌드 탐지, 개선 가능한 스톱 등과 같은 몇 가지 문제가 있습니다. 실제 데이터를 사용하여 매개 변수 및 규칙을 조정하고 잘못된 신호를 줄이고 다양한 시장 조건에서 견고하게 만드는 광범위한 백테스팅과 최적화가 필요합니다. 또한 엄격한 위험 관리는 장기 수익성의 핵심입니다.


/*backtest
start: 2023-09-13 00:00:00
end: 2023-09-20 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © wbburgin

//@version=5
strategy("Volatility Range Breakout Strategy [wbburgin]", shorttitle = "VRB Strategy [wbburgin]", overlay=true,
 pyramiding=20,max_bars_back=2000,initial_capital=10000)

wma(float priceType,int length,float weight) =>
    norm = 0.0
    sum = 0.0
    for i = 0 to length - 1
        norm := norm + weight
        sum := sum + priceType[i] * weight
    sum / norm

// This definition of volatility uses the high-low range divided by the average of that range.
volatility(source,length) =>
    h = ta.highest(source,length)
    l = ta.lowest(source,length)
    vx = 2 * (h - l) / (h + l)
    vx

vm1 = input.int(100,"Average Length")
volLen = input.int(100,"Volatility Length")
vsrc = input.source(close,"Volatility Source")
cross_type = input.source(close,"Exit Source")
exit_type = input.string("Volatility MA",options=["Volatility MA","Range Crossover"],title="Exit Type")

volatility = volatility(vsrc,volLen)

highband1 = close + (close * volatility)
lowband1 = close - (close * volatility)
hb1 = wma(highband1,vm1,volatility)
lb1 = wma(lowband1,vm1,volatility)
hlavg = math.avg(hb1,lb1)

upcross = ta.crossover(high,hb1)    //Crossing over the high band of historical volatility signifies a bullish breakout
dncross = ta.crossunder(low,lb1)    //Crossing under the low band of historical volatility signifies a bearish breakout

vlong = upcross
vshort = dncross
vlong_exit = switch
    exit_type == "Volatility MA" => ta.crossunder(cross_type,hlavg)
    exit_type == "Range Crossover" => ta.crossunder(cross_type,hb1)
vshort_exit = switch
    exit_type == "Volatility MA" => ta.crossover(cross_type,hlavg)
    exit_type == "Range Crossover" => ta.crossover(cross_type,lb1)

if vlong
    strategy.entry("Long",strategy.long)
if vlong_exit
    strategy.close("Long")
if vshort
    strategy.entry("Short",strategy.short)
if vshort_exit
    strategy.close("Short")

plot(hlavg,color=color.white,title="Weighted Volatility Moving Average")
t = plot(hb1,color=color.new(color.red,50),title="Volatility Reversal Band - Top")
b = plot(lb1,color=color.new(color.green,50),title="Volatility Reversal Band - Bottom")

alertcondition(vlong,"Volatility Long Entry Signal")
alertcondition(vlong_exit,"Volatility Long Exit Signal")
alertcondition(vshort,"Volatility Short Entry Signal")
alertcondition(vshort_exit,"Volatility Short Exit Signal")

fill(t,b,color=color.new(color.aqua,90))

더 많은