이중 충격 반전 신호 대 잡음비 최적화 조합 전략


생성 날짜: 2023-11-01 16:57:13 마지막으로 수정됨: 2023-11-01 16:57:13
복사: 3 클릭수: 599
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이중 충격 반전 신호 대 잡음비 최적화 조합 전략

개요

이 전략은 이중 흔들림 반전 전략과 신호 잡음 비율 최적화 전략을 조합하여 더 강력하고 안정적인 거래 전략을 형성합니다. 이 전략은 트렌드 반전 시점에서 더 정확한 거래 신호를 발산하는 데 노력하고 있습니다.

전략 원칙

이중 흔들림 역전 전략은 최근 14일간의 빠른 및 느린 K값을 계산하여 가격이 2일 연속으로 역전되었는지 판단한다. 역전이 발생하면, 빠른 K가 50보다 낮으면 구매 신호를, 빠른 K가 50보다 높으면 판매 신호를 나타낸다.

통신소음비율 최적화 전략은 최근 21일간의 통신소음비율 지표를 계산하고 29일간의 간단한 이동평균으로 평형화한다. 통신소음비율이 이동평균을 넘어서면 판매 신호가 되고, 아래로 넘어서면 구매 신호가 된다.

마지막으로, 이 전략은 이중 흔들림 반전 전략과 신호 잡음 비율 최적화 전략이 동시에 동일한 구매 또는 판매 신호를 발신할 때만 해당 구매 또는 판매 작업을 수행한다.

전략적 강점 분석

  1. 여러 전략을 조합하여 더 정확한 거래 신호를 발송할 수 있고, 단일 전략의 잘못된 신호를 피할 수 있다.

  2. 이중 흔들림 역전 전략은 트렌드 역전점을 잡을 수 있고, 신호 잡음 비율 최적화 전략은 가짜 신호를 필터링할 수 있으며, 이 둘을 결합하면 역전점에서 정확한 거래를 할 수 있다.

  3. 계산 파라미터가 최적화 된 후, 예를 들어 14 일 빠른 느린 stoch 파라미트, 21 일 문자 노이즈 비율 주기 등으로, stab는 너무 많은 노이즈에 영향을받지 않고 최근의 추세를 반영 할 수 있습니다.

  4. 이중 확인 신호를 사용하면 거래 위험을 크게 줄이고 불필요한 손실을 줄일 수 있습니다.

전략적 위험 분석

  1. 반전 신호는 지연될 수 있으며, 절대 하위에서 구매할 수 없으며, 하위에서 판매할 수 있다. 지연을 줄이기 위해 파라미터를 조정할 수 있다.

  2. 이중 신호 확인은 거래 기회를 놓칠 수 있으며, 적절한 확증 조건이 완화될 수 있지만, 위험도 높아질 수 있다.

  3. 신뢰-소음 비율 파라미터를 최적화해야 하며, 주기 설정이 부적절하면 중요한 신호를 놓치거나 잘못된 신호를 발산할 수 있다.

  4. 동시에 여러 지표를 모니터링해야 하며, 이는 전략의 복잡성을 증가시키고, 코드 최적화 및 컴퓨팅 자원을 고려해야 한다.

전략 최적화 방향

  1. 더 많은 지표의 조합을 테스트하여 더 나은 조합 신호를 찾습니다. MACD, RSI 등과 같이.

  2. 이중 흔들림 반전 전략의 매개 변수를 최적화하여 반전 신호를 더 정확하고 적시에 만든다.

  3. 통신소음비의 파라미터 주기 최적화, 최적의 균형점을 찾는다.

  4. 단편 거래의 손실을 통제하기 위해 Stop Loss 전략이 추가되었습니다.

  5. 기계 학습과 같은 방법을 사용하여 자동으로 최적화 된 매개 변수를 고려하여 전략을 더 적응시킬 수 있습니다.

요약하다

이 전략은 듀얼 쇼크 리버스 전략과 신호 잡음 비율 최적화 전략을 조합하여 트렌드 리버스 포인트에서 안정적인 거래 신호를 제공합니다. 파라미터가 최적화되면 가짜 신호의 가능성을 크게 줄일 수 있으며, 이중 확인 원칙을 적용하면 거래 위험을 줄일 수 있습니다. 전략은 지표 파라미터를 계속 최적화하고, 스톱스피드를 추가하여 더 나은 효과를 얻을 수 있습니다.

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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 196/01/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 signal-to-noise (S/N) ratio. 
// And Simple Moving Average.
//
// 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

SignalToNoise(length) =>
    StN = 0.0
    for i = 1 to length-1
        StN := StN + (1/close[i])/length
    StN := -10*log(StN)

StN(length,Smooth) =>
    pos = 0.0
    StN = SignalToNoise(length)
    SMAStN = sma(StN, Smooth)
    pos := iff(SMAStN[0] > StN[0] , -1,
    	     iff(SMAStN[0] < StN[0], 1, 0)) 
    pos

strategy(title="Combo Backtest 123 Reversal & Signal To Noise", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
lengthStN = input(title="Days", type=input.integer, defval=21, minval=2)
SmoothStN =  input(title="Smooth", type=input.integer, defval=29, minval=2)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posStN = StN(lengthStN,SmoothStN)
pos = iff(posReversal123 == 1 and posStN == 1 , 1,
	   iff(posReversal123 == -1 and posStN == -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 )