추세 및 반전을 위한 적응형 변동성 돌파


생성 날짜: 2024-01-25 12:43:43 마지막으로 수정됨: 2024-01-25 12:43:43
복사: 1 클릭수: 619
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

추세 및 반전을 위한 적응형 변동성 돌파

개요

이 전략은 우선 물가 지표 VFI와 이동 평균을 결합하여 추세 판단을 구성하고, 브린 밴드 지표 판단 반전 사건을 결합하여, 추세 거래와 충격 거래의 유기적 결합을 실현한다.

전략 원칙

이 전략은 다음과 같은 부분들로 구성됩니다.

  1. VFI 지표 판단 트렌드. 전형적인 가격의 대수 변화율과 거래량 변화와 결합하여 가격 트렌드를 판단하고, 수량 가격의 합리적인 매칭을 달성한다.

  2. EMA 격차 지표 추세 판단 △ 20 일선과 50 일선의 격차 비율을 계산하여 중장선 추세 방향을 판단 △

  3. 부린띠 지표 판단 역전 ᄂ. 부린띠의 중간 궤도는 20일 간소 이동 평균이며, 대역폭은 중간 궤도의 1.5배 표준 차이가 ᄂ. 가격이 상하 궤도를 돌파할 때 거래 신호를 발산 ᄂ.

  4. VFI 지표의 폭은 반전을 판단한다. VFI 값이 상하한계 ((0·20) 에 가까울 때 트렌드 반전의 가능성이 높다고 본다.

거래 기간을 충족하는 조건으로, 가격이 부린 반도를 돌파하고 VFI, EMA 격차 지표가 동방향으로 부진하면 더 많이; 가격이 부린 반도를 돌파하거나 VFI가 특정 하락치를 달성하면 평점.

전략적 이점

  1. VFI 지표의 도입은 물가관계를 더 합리적으로 맞추고, 가격을 맹목적으로 따르지 않도록 해준다.

  2. VFI와 결합된 EMA 차이의 판단은 트렌드 판단을 더 안정적이고 신뢰할 수 있게 한다.

  3. 브린 띠는 VFI 지표의 반전 판단과 결합되어, 전략이 시장의 양방향 변동에 더 적합하게 만든다.

전략적 위험

  1. 하지만, 이 지표는 가짜 돌파의 위험을 완전히 피할 수 없습니다.

  2. EMA의 차이는 다소 지연되어 단기 변동에 대한 신속한 반응이 불가능하다.

  3. 부린 띠 파라미터를 잘못 설정하면 거래 빈도 또는 캡처드 마켓의 위험이 발생할 수 있습니다.

위험과 대응하는 방법:

  1. 더 많은 지표의 판단 경향과 결합하여 단일 지표의 의존을 피하십시오.

  2. EMA 파라미터는 너무 크거나 너무 작아서는 안되며, 적절히 파라미터를 조정한다.

  3. 다른 시장 상황에서의 브린 대수 변수의 전략에 대한 영향을 테스트한다.

전략 최적화 방향

  1. 계속 VFI 파라미터를 최적화하여 더 민감하게 처리하십시오.

  2. 가격 통로 또는 Envelopes 지표에 기반한 돌파구 판단을 추가하십시오.

  3. OBV, PVT 등과 같은 더 많은 물가 지표의 도입을 테스트하십시오.

  4. 기계 학습과 AI 기술을 도입하여 매개 변수의 동적 최적화를 구현한다.

요약하다

이 전략은 종합적으로 트렌드 판단과 반전 판단을 고려하고, VFI, EMA 차수 및 브린 밴드 지표를 사용하여 시장의 양방향 변동에 대한 포착을 구현했다. 다음 단계는 파라미터 설정을 최적화하고 판단 기반을 풍부하게하고 적용 범위를 확장하여 전략의 안정적인 수익성을 향상시킬 것이다.

전략 소스 코드
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 00:00:00
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/
// © beststockalert

//@version=4

strategy(title="Super Bollinger Band Breakout", shorttitle = "Super BB-BO", overlay=true)
source = close

length = input(130, title="VFI length")
coef = input(0.2)
vcoef = input(2.5, title="Max. vol. cutoff")
signalLength=input(5)


// session 


pre = input( type=input.session, defval="0400-0935")
trade_session = input( type=input.session, defval="0945-1700")
use_trade_session = true
isinsession = use_trade_session ? not na(time('1', trade_session)) : true


is_newbar(sess) =>
    t = time("D", sess)
    not na(t) and (na(t[1]) or t > t[1])


is_session(sess) =>
    not na(time(timeframe.period, sess))

preNew = is_newbar(pre)
preSession = is_session(pre)

float preLow = na
preLow := preSession ? preNew ? low : min(preLow[1], low) : preLow[1]

float preHigh = na
preHigh := preSession ? preNew ? high : max(preHigh[1], high) : preHigh[1]



//   vfi 9lazybear 
ma(x,y) => 0 ? 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) //min( 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 )


//ema diff


ema20 = ema(close,20)
ema50 = ema(close,50)


diff = (ema20-ema50)*100/ema20
ediff = ema(diff,20)

//
basis = sma(source, 20)
dev = 1.5 * stdev(source, 20)

upper = basis + dev
lower = basis - dev


ema9 = ema(source, 9)

if ( ((crossover(source, upper) and diff>ediff and diff>0) or (close>upper and (vfi >0 or vfima>0 or ediff>0.05) and (vfi<14 or vfima<14)) ))
    strategy.entry("Long", strategy.long)


if (crossunder(source, lower) or vfi>19 or vfima>19 or diff<(ediff+0.01) )
    strategy.close("Long")