이중 트렌드 신호를 통합한 역전 지수 정량 전략


생성 날짜: 2023-12-26 15:47:36 마지막으로 수정됨: 2023-12-26 15:47:36
복사: 0 클릭수: 536
avatar of ChaoZhang ChaoZhang
1
집중하다
1623
수행원

이중 트렌드 신호를 통합한 역전 지수 정량 전략

개요

이 전략의 이름은 융합 이중 트렌드 신호의 역전수화 전략 이다. 그것은 두 가지 다른 전략 신호를 융합한다. 하나는 무작위 지표에 기반한 단기 역전 신호이며, 다른 하나는 거래량에 기반한 장기 트렌드 신호이며, 둘은 안정적인 입시 신호를 형성한다.

전략 원칙

이 전략은 두 부분으로 이루어져 있다. 첫 번째 부분은 9일 스토흐 지표를 사용하여 단기 반전 신호를 생성한다. 구체적으로, 종결 가격보다 하루 전날 상승한 상태에서 9일 빠른 선이 50보다 낮고 느린 선이 50보다 높을 때 더 많이 한다. 종결 가격보다 하루 전날 낮은 상태에서 9일 빠른 선이 50보다 높고 느린 선이 50보다 낮아 공백을 한다. 이렇게 스토흐 지표의 금색 포크를 이용하여 단기 반전 신호를 생성한다.

제2부에서는 마이너스 거래량 지수 ((NVI) 를 사용하여 장기적인 트렌드 신호를 형성한다. NVI의 계산 공식은, 당일 거래량이 전날보다 적으면, 당일 종결 가격 변화를 축적한다. 당일 거래량이 전날보다 크거나 같으면, 전날의 값을 유지한다.

마지막으로, 이 전략은 두 가지 신호를 결합한다. 단기 반전 신호와 장기 트렌드 신호가 동향될 때만 진입 신호가 형성된다. 이것은 가짜 신호를 필터링하고 안정성을 강화하는 데 도움이 된다.

우위 분석

이 전략의 가장 큰 장점은 신호의 안정성이다. 단기 반전 신호는 시장의 단기 조정, 장기 트렌드 신호는 큰 추세가 변하지 않는 것을 보장한다. 두 가지의 조합은 신호의 안정성을 크게 강화하고, 오류 보고율이 높은 단기 신호를 효과적으로 필터링한다.

또한, 이 전략의 매개 변수는 적고, 최적화하기 쉽다. 사용자는 단지 NVI의 매개 변수를 조정할 필요가 있어 다른 시장의 특성에 적응할 수 있다.

위험 분석

이 전략의 가장 큰 위험은 두 가지 신호 사이에 시간 차이가 있을 수 있다는 것입니다. 단기 반전 신호와 장기 트렌드 신호 사이에 약간의 지연이 있을 수 있으며, 이는 한동안 두 가지 신호가 일치하지 않아 안정적인 입구 신호가 형성되지 않습니다.

또한, NVI 지표는 비정상적으로 큰 거래량 변화에 민감하게 반응하여 잘못된 장기적 추세 판단을 초래할 수 있습니다.

이러한 위험을 줄이기 위해, NVI 지표 파라미터를 적절히 조정하거나, 단위 손실을 제어하기 위해 스톱을 추가할 수 있다.

최적화 방향

이 전략은 다음의 몇 가지 측면에서 최적화될 수 있습니다.

  1. 스토흐 지표의 파라미터를 최적화하여 역전환 캡처 능력을 향상시킨다.

  2. NVI 지표의 길이를 최적화하여 장기적인 트렌드를 식별할 수 있는 능력을 강화한다.

  3. 트랜지먼트 필터링 조건을 추가하여 트랜지먼트 비정상적인 가짜 신호를 제거합니다.

  4. 단독 손실을 통제하기 위한 전략이 추가되었습니다.

요약하다

이 전략은 단기 반전과 장기 트렌드를 고려하여 안정적인 입구 메커니즘을 설계하여 잘못된 보고율을 효과적으로 제어하고 신호의 안정성을 향상시킬 수 있습니다. 다음 단계는 매개 변수를 조정하고 필터 조건을 추가하여 전략의 안정성을 더욱 향상시킬 수 있습니다.

전략 소스 코드
/*backtest
start: 2023-12-18 00:00:00
end: 2023-12-21 05:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 29/03/2021
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// The theory behind the indexes is as follows: On days of increasing 
// volume, you can expect prices to increase, and on days of decreasing 
// volume, you can expect prices to decrease. This goes with the idea of 
// the market being in-gear and out-of-gear. Both PVI and NVI work in similar 
// fashions: Both are a running cumulative of values, which means you either 
// keep adding or subtracting price rate of change each day to the previous day`s 
// sum. In the case of PVI, if today`s volume is less than yesterday`s, don`t add 
// anything; if today`s volume is greater, then add today`s price rate of change. 
// For NVI, add today`s price rate of change only if today`s volume is less than 
// yesterday`s.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos


NVI(EMA_Len) =>
    pos = 0.0
    nRes = 0.0
    xROC = roc(close, EMA_Len)
    nRes := iff(volume < volume[1], nz(nRes[1], 0) + xROC, nz(nRes[1], 0))
    nResEMA = ema(nRes, EMA_Len)
    pos := iff(nRes > nResEMA, 1,
    	     iff(nRes < nResEMA, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Negative Volume Index", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- Negative Volume Index ----")
EMA_Len = input(50, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posNVI = NVI(EMA_Len)
pos = iff(posReversal123 == 1 and posNVI == 1 , 1,
	   iff(posReversal123 == -1 and posNVI == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1 ) 
    strategy.entry("Long", strategy.long)
if (possig == -1 )
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )