부피 밸런스에 기반한 VB 전략

저자:차오장, 날짜: 2023-10-30 17:03:02
태그:

img

이 전략은 시장에서 구매력과 판매력을 결정하기 위해 볼륨 잔액 지표에 기초하여 설계되었습니다.

전략 논리

부피 잔액 (VB) 지표는 가격의 부피 변화의 동력을 반영합니다.

  1. 보통 가격의 내일 변동율을 가격 동력으로 계산합니다.

  2. 매출력과 매출력을 매출량과 가격 동력의 곱으로 판단합니다.

  3. 지표는 0축 위와 아래로 변동합니다. 구매력과 판매력을 측정하는 기준은 지표 값의 긍정과 부정입니다.

이 전략은 VB 지표를 구성하고 신호선을 설정합니다. VB 지표가 신호선을 넘을 때 구매 신호가 생성됩니다. VB 지표가 신호선을 넘을 때 판매 신호가 생성됩니다.

이 법규의 주요 단계는 다음과 같습니다.

  1. 보통 가격의 일내 변동율을 가격 동력으로 계산합니다.

  2. 범위에 대한 절단 범위 계수를 설정합니다. 범위를 넘는 과도한 운동량은 계수로 간주됩니다.

  3. 절단 후 정량화된 모멘텀 vcp를 계산합니다.

  4. 수량화된 지표 vfi를 얻기 위해 vcp를 합시다.

  5. 신호 라인의 길이를 설정하고 vfima를 얻습니다.

  6. 거래 신호를 생성하기 위해 VB 지표 vfi와 신호 라인 vfima를 비교합니다.

장점

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

  1. 가격 자체에 영향을 받지 않고, 구매력과 판매력을 판단하기 위해 부피-가격 관계를 사용하십시오.

  2. 정량화 된 운동량 계산 범위는 이상 변동의 영향을 피하기 위해 매개 변수로 제어 할 수 있습니다.

  3. VB 지표 자체와 신호 라인 사이의 비교를 결합하면 합리적인 입력 시기를 설정할 수 있습니다.

  4. 지표 계산 방법은 간단하고 명확하며 실시간 거래에서 쉽게 작동합니다.

  5. 전략 성능을 최적화하기 위해 사용자 정의 가능한 지표 매개 변수 및 신호 라인 매개 변수

위험성

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

  1. VB 지표는 비정상적인 가격 변동에 민감합니다. 적절한 절단 매개 변수를 설정해야합니다.

  2. 시나리오 신호로부터 가격의 오차가 발생할 확률은 높습니다. 맹목적으로 따르는 것은 피해야 합니다.

  3. 표시기 매개 변수와 신호 라인 매개 변수는 잘못된 신호를 방지하기 위해 적절한 최적화가 필요합니다.

  4. 양량 가격 특성이 명백한 제품에 더 적합합니다. 유동성이 낮은 제품에 적합하지 않습니다.

  5. 시장 전환을 알릴 수 있는 지표의 오차에 주의를 기울여야 합니다.

위험은 매개 변수 범위를 조정하고 다른 필터를 사용하여 적절한 느슨한 스톱 손실 등을 허용함으로써 제어 할 수 있습니다.

최적화 방향

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

  1. 감수성과 안정성을 균형을 맞추기 위해 정량화 된 모멘텀에 대한 계산 매개 변수를 최적화합니다.

  2. 시그널 라인 매개 변수를 최적화해서 지연과 노이즈를 균형 잡습니다.

  3. 확인을 위해 볼륨 스프레드 분석과 같은 다른 지표를 추가합니다.

  4. 불리한 거래를 피하기 위해 트렌드 및 지원/저항 지표를 추가합니다.

  5. 시장의 변동성을 기반으로 동적 스톱 로스를 설정합니다.

  6. 최적의 매개 변수 조합을 찾기 위해 기계 학습을 사용하세요.

  7. 다양한 제품과 시간 프레임에서 역 테스트하여 견고성을 평가합니다.

  8. 이윤 곡선에 영향을 미치는 지표 매개 변수를 비교하여 최적을 찾습니다.

요약

이 전략은 볼륨 잔액 지표에 기초하여 구매/판매 힘을 판단합니다. 간단한 지표 설계 및 조정 가능한 매개 변수와 같은 장점이 있으며 잘못된 신호와 같은 위험도 있습니다. 여러 측면의 추가 최적화 및 검증은 라이브 성능을 향상시킬 수 있습니다.


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("VB Strategy", overlay=true)

length = input(130, title="거래량 길이")
coef = input(0.2, title="계수")
vcoef = input(2.5, title="최대 계수")
signalLength=input(5)
smoothVFI=input(false, type=bool, title="부드럽게")
//볼밴
length2 = input(20, minval=1, title="볼밴 길이")

ma(x,y) => smoothVFI ? sma(x,y) : x

typical=hlc3
inter = log( typical ) - log( typical[1] )
vinter = stdev(inter, 30 )
cutoff = coef * vinter * close
vave = sma( volume, length )[1]
vmax = vave * vcoef
vc = iff(volume < vmax, volume, vmax)
mf = typical - typical[1]
vcp = iff( mf > cutoff, vc, iff ( mf < -cutoff, -vc, 0 ) )

vfi = ma(sum( vcp , length )/vave, 3)
vfima=ema( vfi, signalLength )
d=vfi-vfima

upper = vfima + stdev(vfi, length2)
lower = vfima - stdev(vfi, length2)

buysignal = cross(vfi, lower) and crossunder(vfi, lower) == 1 ? vfima : na

sellsignal = cross(vfi, upper) and crossover(vfi, upper) == 1 ? vfima : na

//times = timestamp("GMT+6", 2017, 12, 6, 00, 00)

//if (buysignal and times <= time)
if (buysignal)
    if(strategy.position_size < 0)
        strategy.close("SHORT")
        
    if(strategy.position_size > 0)
        strategy.order("LONG", true, 1, when = (low+high)/2)
        
    if(strategy.position_size == 0)
        strategy.entry("LONG", strategy.long, when = (low+high)/2)

//if (sellsignal and times <= time)
if (sellsignal)
    if(strategy.position_size > 0)
        strategy.close("LONG")
        
    if(strategy.position_size < 0)
        strategy.order("SHORT", false, 1, when = (low+high)/2)
        
    if(strategy.position_size == 0)
        strategy.entry("SHORT", strategy.short, when = (low+high)/2)


더 많은