양적 범위 돌파에 기반한 적응형 변동성 전략


생성 날짜: 2024-02-22 16:50:46 마지막으로 수정됨: 2024-02-22 16:50:46
복사: 0 클릭수: 563
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

양적 범위 돌파에 기반한 적응형 변동성 전략

개요

이 전략은 최근 일정 주기 동안의 거래량의 최고값과 최저값을 계산함으로써, 적응된 변동 범위를 형성하고, 현재 주기에서의 거래량이 이 범위를 돌파할 때 거래 신호를 발생시킨다. 신호 방향은 음의 결정에 따라, 간단하고 효과적인 추적 시장의 갑작스러운 대의 전략에 속한다.

전략 원칙

핵심 논리는 최근 N 주기 동안의 양과 음의 거래량의 최대 최소 값을 계산하여 자기 적응 변동 범위를 형성한다. 이 범위를 기반으로 그 시기에 돌파구가 발생했는지 판단한다. 동시에 신양선 신호를 통합하여 판단을 완료한다.

계산 과정은 다음과 같습니다.

  1. 가장 높은 거래량과 가장 낮은 거래량을 계산하기
  2. 현재 주기의 거래량 (Volume) 이 Highest보다 크는지 판단합니다.
  3. 현재 양선 또는 음선인지 결합하여 돌파 신호 판단을 완료합니다.
  4. 더 많은 공백 신호를 생성

우위 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 시장의 변화에 민감한 적응 범위 설정
  2. 높은 변동성 돌발 상황을 포착하여 유출율을 낮추는 것
  3. 가짜 돌파구를 피하기 위한 비정상적인 판단과 함께
  4. 간단하고 이해하기 쉽고 수정할 수 있도록
  5. 다양한 품종에 적응할 수 있는 융통성 있는 매개 변수

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. 이 경우, 수직선에 있는 모든 변수들을 조정해야 합니다.
  2. 대주기 흔들림 시장에서 빈번한 잘못된 신호가 발생할 수 있다.
  3. 정상과 비정상적인 돌파구를 구분할 수 없고, 다른 지표나 패턴 판단과 결합해야 한다.
  4. 매 돌파구마다 하나의 진입 기회가 있기 때문에 트렌드를 추적할 수 없습니다.

다른 지표 필터링과 함께 매개 변수 주기 조정으로 최적화 할 수 있습니다.

최적화 방향

이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.

  1. 다른 시장 주기에 맞춰 변수를 조정하는 간격 길이를 추가합니다
  2. 평균선, 브린 밴드 등의 지표를 추가하고, 신호를 필터링합니다.
  3. K선 형태를 결합하여 오작동을 방지하기 위한 최적화
  4. 트렌드를 추적할 수 있도록 재입장 및 중지 모듈을 추가

요약하다

이 전략은 전반적으로 간단하고 실용적이며, 자기 적응 범위와 수량 가치 합성 판단을 통해 급격한 일방적인 상황을 효과적으로 포착할 수 있다. 그러나 또한 약간의 잘못된 정보의 위험이 있으며, 적절한 매개 변수를 조정하고 다른 도구의 사용과 함께 사용해야, 최대한의 효과를 낼 수 있다.

전략 소스 코드
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
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/
// © EvoCrypto

//@version=4
strategy("Ranged Volume Strategy - evo", shorttitle="Ranged Volume", format=format.volume)

// INPUTS {
Range_Length    =   input(5,        title="Range Length",                       minval=1)

Heikin_Ashi     =   input(true,     title="Heikin Ashi Colors")
Display_Bars    =   input(true,     title="Show Bar Colors")
Display_Break   =   input(true,     title="Show Break-Out")
Display_Range   =   input(true,     title="Show Range")
// }

// SETTINGS {
Close           =   Heikin_Ashi ? security(heikinashi(syminfo.tickerid), timeframe.period, close)    : close
Open            =   Heikin_Ashi ? security(heikinashi(syminfo.tickerid), timeframe.period, open)     : open

Positive        =    volume
Negative        =   -volume

Highest         =   highest(volume, Range_Length)
Lowest          =   lowest(-volume, Range_Length)

Up              =   Highest > Highest[1] and Close > Open
Dn              =   Highest > Highest[1] and Close < Open

Volume_Color    =   
 Display_Break and Up   ? color.new(#ffeb3b, 0)     : 
 Display_Break and Dn   ? color.new(#f44336, 0)     : 
 Close > Open           ? color.new(#00c0ff, 60)    : 
 Close < Open           ? color.new(#000000, 60)    : na 
// }

//PLOTS {
plot(Positive,                      title="Positive Volume",    color=Volume_Color,             style=plot.style_histogram,  linewidth=4)
plot(Negative,                      title="Negative Volume",    color=Volume_Color,             style=plot.style_histogram,  linewidth=4)

plot(Display_Range ? Highest : na,  title="Highest",            color=color.new(#000000, 0),    style=plot.style_line,       linewidth=2)
plot(Display_Range ? Lowest  : na,  title="Lowest",             color=color.new(#000000, 0),    style=plot.style_line,       linewidth=2)

barcolor(Display_Bars ? Volume_Color : na)
// }

if (Up)
    strategy.entry("Long Entry", strategy.long)
if (Dn)
    strategy.entry("Short Entry", strategy.short)