이중 회환 균형 전략

저자:차오장, 날짜: 2023-12-15 16:56:20
태그:

img

전반적인 설명

이중 반전 균형 전략은 반전 전략과 경험적 모드 분해 (EMD) 필터링을 모두 활용하는 조합 전략이다. 123 반전 시스템을 사용하여 먼저 거래 신호를 생성하고 EMD 필터링으로 신호를 처리하고 마지막으로 입출출을 확인하기 위해 양쪽의 신호를 결합합니다. 이 하이브리드 접근법은 승률을 향상시킬 수 있습니다.

전략 원칙

123 반전 시스템

123 역전 시스템은 울프 젠슨의 책?? How I Tripled My Money in the Futures Market?? 에서 유래되었다. 역전형 전략에 속한다. 닫기 가격이 2일 연속으로 이전 닫기보다 높고 9일 느린 스토카스틱이 50보다 낮을 때 길어진다. 반대 설정이 발생하면 짧아진다.

경험적 모드 분해 (EMD)

EMD는 적응 데이터 분석 방법이다. 그것은 효과적으로 데이터를 다른 주파수 구성 요소로 분해하고 장기 트렌드를 추출 할 수 있습니다. 여기서 우리는 가격 주파수 구성 요소를 기반으로 거래 신호를 생성하기 위해 길이를 20로 설정하고, 델타를 0.5로, 분수를 0.1로 설정합니다.

신호 조합

이중 반전 균형 전략은 123 반전 시스템과 EMD 모두에서 거래 신호를 결합합니다. 양 시스템에서 신호가 일치 할 때만 항목을 확인합니다. 이 하이브리드 접근법은 승률을 향상시킵니다.

이점 분석

이중 반전 균형 전략은 반전 전략과 디지털 신호 처리 기술 두 가지의 장점을 활용합니다. 반전 시스템은 단기적 반전 기회를 캡처하고 EMD 필터는 장기적인 경향을 캡처합니다. 두 시스템을 함께 사용하면 안정성을 향상시킬 수 있습니다.

또한 123 패턴을 도입하여 바람직하지 않은 윙사우를 방지하고, 적절하게 구성된 EMD 매개 변수는 소음을 필터링하는 데 도움이 됩니다. 이 모든 요소들은 더 높은 승률에 기여합니다.

위험 분석

이 전략의 가장 큰 위험은 역전 실패로 발생합니다. 123 패턴이 그러한 가능성을 줄이기는 하지만 역전 거래의 불확실성은 여전히 높습니다. 또한, EMD 방법은 극도로 변동적인 시장에서 붕괴 될 수 있습니다.

이러한 위험을 제어하기 위해 역전 시스템의 매개 변수를 조정하여 더 신뢰할 수있는 신호를 생성 할 수 있습니다. EMD 대신 다른 필터링 방법이 테스트되어 더 나은 필터링 성능을 달성 할 수 있습니다. 또한 손실을 제한하기 위해 작은 위치 크기를 유지하는 것이 필요합니다.

최적화 방향

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

  1. 최적을 찾기 위해 반전 시스템에 대한 다른 매개 변수 세트를 테스트

  2. 다른 디지털 필터링 방법을 시도하십시오. 예를 들어, 웨이블렛 변환, 힐베르트 변환 등.

  3. 단일 거래 손실을 제어하기 위해 스톱 손실을 추가하십시오.

  4. 더 높은 방향 정확성을 보장하기 위해 다른 표시기를 포함

  5. 포지션 사이즈와 같은 돈 관리 모델을 최적화

요약

이중 반전 균형 전략은 반전 전략과 디지털 신호 처리 기법의 장점을 결합합니다. 적절한 매개 변수 조정 및 위험 통제로 안정적인 거래 성과를 창출합니다. 전략은 매우 확장 가능하며 권장 할 가치가 있습니다.


/*backtest
start: 2023-11-14 00:00:00
end: 2023-12-14 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 30/06/2020
// 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 related article is copyrighted material from Stocks & Commodities Mar 2010
//
// 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

Empirical(Length,Delta,Fraction) =>
    pos = 0
    xBandpassFilter = 0.0
    xPeak = 0.0
    xValley =0.0
    xPrice = hl2
    beta = cos(3.1415 * (360 / Length) / 180)
    gamma = 1 / cos(3.1415 * (720 * Delta / Length) / 180)
    alpha = gamma - sqrt(gamma * gamma - 1)
    xBandpassFilter := 0.5 * (1 - alpha) * (xPrice - xPrice[2]) + beta * (1 + alpha) * nz(xBandpassFilter[1]) - alpha * nz(xBandpassFilter[2])
    xMean = sma(xBandpassFilter, 2 * Length)
    xPeak :=  iff (xBandpassFilter[1] > xBandpassFilter and xBandpassFilter[1] > xBandpassFilter[2], xBandpassFilter[1], nz(xPeak[1])) 
    xValley :=  iff (xBandpassFilter[1] < xBandpassFilter and xBandpassFilter[1] < xBandpassFilter[2], xBandpassFilter[1], nz(xValley[1])) 
    xAvrPeak = sma(xPeak, 50)
    xAvrValley = sma(xValley, 50)
    nAvrPeak = Fraction * xAvrPeak
    nAvrValley = Fraction * xAvrValley
    pos := iff(xMean > nAvrPeak and xMean > nAvrValley, 1,
    	   iff(xMean < nAvrPeak and xMean < nAvrValley, -1, nz(pos[1], 0)))
    pos

strategy(title="Combo Backtest 123 Reversal & Empirical Mode Decomposition", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthEMD = input(20, minval=1)
Delta = input(0.5)
Fraction = input(0.1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posEmpirical = Empirical(LengthEMD,Delta,Fraction)
pos = iff(posReversal123 == 1 and posEmpirical == 1 , 1,
	   iff(posReversal123 == -1 and posEmpirical == -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 )

더 많은