듀얼 모멘텀 지수 및 반전 합성 전략


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

듀얼 모멘텀 지수 및 반전 합성 전략

개요

이중 역량 지수와 역전 복합 전략은 역전 전략과 역량 전략을 결합한 복합 전략이다. 123 역전 전략과 상품 선택 지수 (CSI) 의 두 가지 자작전략을 종합적으로 사용하며, 이중 신호에 따라 진출 시기를 판단한다. 이 전략은 거래 신호의 정확성을 높이기 위해 고안되었다.

전략 원칙

이 전략은 다음의 두 가지 세부 전략으로 구성됩니다.

  1. 123 역전 전략. 그것은 2 일 연속으로 종전 가격이 상승하고 스토치 지표가 50보다 낮을 때 더 많이 한다. 2 일 연속으로 종전 가격이 떨어지고 스토치 지표가 50보다 높을 때 공백한다. 역전 전략에 속한다.

  2. 상품 선택 지수 ((CSI) 전략. 그것은 평균 실제 가격 범위 지표 ((ATR) 와 평균 방향 운동 지표 ((ADX) 를 결합한다. ATR는 시장의 변동성을 반영하고, ADX는 트렌드 강도를 반영한다.

전체 전략은 123 역전 전략의 주체로, CSI 전략은 보조적 확인이다. 두 신호가 일치할 때만 거래 신호를 발산한다. 과잉을 할 때, 2 일 연속으로 종결 가격이 상승하여 stoch이 50보다 낮아지고, CSI에서 이동 평균을 통과한다. 공백을 할 때, 2 일 연속으로 종결 가격이 하락하여 stoch이 50보다 높고, CSI에서 이동 평균을 통과한다.

이렇게 거래 신호의 반전 성질을 보장하는 동시에 CSI 지표 필터를 추가하면 가짜 신호를 줄일 수 있다.

우위 분석

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

  1. 역전과 동력을 결합하여 신호 정확도를 높인다. 123 역전 전략은 주 신호로, 갑작스러운 급격한 상황 역전을 포착할 수 있다. CSI 지표는 부확인으로, 일부 잡음을 필터링할 수 있다.

  2. 복합 필터링을 사용하면 순수 지분을 크게 줄일 수 있다. 비록 자 전략 자체에 일정 비율의 가짜 신호가 존재하지만, 최종 신호는 이중 일치해야 하며, 대부분의 가짜 신호를 필터링하여 불필요한 반복적인 청장을 최소화 할 수 있다.

  3. 子策略参数은 개별적으로 최적화할 수 있다. 123 역전策略과 CSI策略의 각각의参数은 서로 간섭하지 않고 개별적으로 테스트 및 최적화할 수 있다. 이것은 최적의参数组合을 찾는 데 편리함을 제공한다.

  4. 개별적으로 사용할 수 있는 하위 전략. 이 전략은 123 리버스 전략이나 CSI 전략만을 사용하여 개별적으로 거래하는 것을 지원합니다. 이것은 전략의 유연성을 제공합니다.

위험 분석

이 전략은 복합 필터링을 통해 가짜 신호를 크게 감소시켰지만, 다음과 같은 주요 위험은 여전히 존재합니다.

  1. 전략적 신호는 상대적으로 낮은 빈도로 발생한다. 이중 확인 방식을 사용하면 반드시 거래 기회의 일정한 비율을 필터링한다. 이것은 높은 승률을 달성하기 위해 반드시 지불한다.

  2. 두 개의 하위 전략 파라미터가 잘못되면 신호가 희귀하거나 신호가 없을 수도 있다. 파라미터를 엄격하게 테스트하고 최적화하여 최적의 파라미터 조합을 찾아내야 한다.

  3. 123 반전은 역시장운동에 속한다. 연속적이고 급격한 일방적인 가격 돌파가 발생하면 이 전략은 큰 위험에 직면하게 된다. 위험을 통제하기 위해 스톱을 추가하는 것을 고려할 수 있다.

최적화 방향

이 전략의 주요 최적화 공간은 다음과 같습니다.

  1. 각 하위 전략 내의 변수를 최적화하여 최적의 변수 조합을 찾습니다. 스토치 지표 변수, CSI 지표 변수 등이 포함됩니다.

  2. 다양한 시장 상태 필터를 추가하여 테스트한다. 예를 들어, 동향이 우세할 때만 CSI 전략을 사용한다. 흔들리는 시장에서만 123 역전 전략을 사용한다. 이것은 부분적으로 하위 전략의 단점을 극복한다.

  3. 개발 매개 변수 자율 적응 및 동적 최적화 모듈. 전략은 실시간 시장 상태 및 통계 데이터에 따라 매개 변수를 자동으로 조정하여 최적의 매개 변수 조합을 실시간으로 추적 할 수 있습니다.

  4. 다양한 손해제도를 테스트한다. 적절한 손해제도는 위험을 효과적으로 통제하고 불필요한 반복적인 평점을 줄일 수 있다.

요약하다

이중 동량 지수와 역전복 전략은 다중 신호 확인 및 조합 사고를 적용하여 역전 전략과 동량 전략의 각자의 장점을 효과적으로 활용하고, 동시에 서로 필터링하여 양쪽의 단점을 완화하여 높은 효율성과 높은 안정성을 달성한다. 그것은 선택 가능한 전형적인 양화 전략 중 하나이다.

전략 소스 코드
/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 25/10/2019
// 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 Commodity Selection Index ("CSI") is a momentum indicator. It was 
// developed by Welles Wilder and is presented in his book New Concepts in 
// Technical Trading Systems. The name of the index reflects its primary purpose. 
// That is, to help select commodities suitable for short-term trading.
// A high CSI rating indicates that the commodity has strong trending and volatility 
// characteristics. The trending characteristics are brought out by the Directional 
// Movement factor in the calculation--the volatility characteristic by the Average 
// True Range factor.
// Wilder's approach is to trade commodities with high CSI values (relative to other 
// commodities). Because these commodities are highly volatile, they have the potential 
// to make the "most money in the shortest period of time." High CSI values imply 
// trending characteristics which make it easier to trade the security.
// The Commodity Selection Index is designed for short-term traders who can handle 
// the risks associated with highly volatile markets.
//
// 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

fADX(Len) =>
    up = change(high)
    down = -change(low)
    trur = rma(tr, Len)
    plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, Len) / trur)
    minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, Len) / trur)
    sum = plus + minus 
    100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), Len)

CSI(Length, Commission, Margin, PointValue) =>
    pos = 0.0
    K = 100 * ((PointValue / sqrt(Margin) / (150 + Commission)))
    xATR = atr(Length)
    xADX = fADX(Length)
    nADXR = (xADX + xADX[Length]) * 0.5
    xCSI = K * xATR * nADXR
    xMACSI = sma(xCSI, Length)
    pos := iff(xCSI < xMACSI, 1,
    	     iff(xCSI > xMACSI, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Strategy 123 Reversal & Commodity Selection Index", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
PointValue = input(50)
Margin = input(3000)
Commission = input(10)
LengthCSI = input(14)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posCSI = CSI(LengthCSI, Commission, Margin, PointValue)
pos = iff(posReversal123 == 1 and posCSI == 1 , 1,
	   iff(posReversal123 == -1 and posCSI == -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 )