역사적 변동성 범위 돌파 거래 전략


생성 날짜: 2023-09-21 20:38:29 마지막으로 수정됨: 2023-09-21 20:38:29
복사: 1 클릭수: 677
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

개요

이 전략은 가격의 역사적인 변동 영역을 기반으로 거래 신호를 결정한다. 그것은 일정 기간 동안의 최고 가격과 최저 가격의 차이를 계산하고 이동 평균을 통해 변동 영역을 형성한다. 가격이 이 영역의 상하 궤도를 돌파 할 때 거래 신호를 생성한다. 가격 돌파를 기반으로 한 트렌드 추적 전략에 속한다.

전략 원칙

이 전략의 핵심 지표는 가격의 역사적인 변동률이다. 구체적인 계산 방법은 다음과 같다:

  1. 지난 N근 Bar의 최고 가격과 최저 가격의 차이를 계산하고, HL로 기록합니다.

  2. 지난 N근 Bar의 최고 가격과 최저 가격의 평균값을 계산합니다

  3. 변동률 = HL / avg (H, L)

여기서 N은 “Volatility Length”의 변수이다.

그 다음으로, 변동률을 계산합니다.

상향 = 현재 클로즈 + 현재 클로즈 * 변동률

하도 = 현재 클로즈 - 현재 클로즈 * 변동률

상하 레일은 WMA 평선으로 매끄럽게 처리되며, 파라미트는 “Average Length”이다.

가격이 상승할 때 더 많이 하고, 하락할 때 더 적게 한다.

평고지 신호는 “Exit Type” 파라미터에 따라 주어진다:

  1. Exit Type는 Volatility MA일 때, 가격이 WMA 평균 평평점 포지션으로 돌아갑니다.

  2. 엑시트 타입이 레인지 크로스오버였을 때, 가격은 상하 경유선 평준을 돌파했다.

전략적 이점

  • 가격 변동률을 사용하여 트렌디한 행동을 잡는 것이 좋습니다.
  • WMA 일선형 처리는 더 안정적이고 안정적인 구간을 제공합니다.
  • 트렌드 전환점을 파악하는 데 있어 획기적인 진입
  • 평평선 또는 상하 레일을 깨고 적시에 손실을 줄 수 있다
  • 매개 변수를 최적화할 수 있는 넓은 공간, 다양한 시장에 맞게 조정할 수 있다

전략적 위험

  • 격차를 뚫고 올라가면 다시 떨어질 수 있습니다.
  • 트렌드 반전으로 큰 손실이 발생할 수 있습니다.
  • WMA 평균선은 때때로 트렌드 회전을 인식하기에 민감하지 않습니다.
  • 매개 변수를 최적화하기 어렵고 많은 시도와 오류가 필요합니다.
  • 위험성이 높은 환불, 재무 관리에 주의가 필요하다

위험은 다음과 같은 방법으로 줄일 수 있습니다.

  • 최적화 변수, 더 안정적이고 안정적인 구간
  • 다른 지표에 대한 판단을 더하면 상승이 다시 떨어지지 않습니다.
  • 거래 규모를 축소하고 자금 관리에 집중
  • 재입학제도에 가입하는 것을 고려하세요.

최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 변수 최적화

다양한 Length 변수를 테스트하여 최적의 변수 조합을 찾습니다.

  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))