듀얼 오시슬레이션 역전 신호/음소 비율 최적화 컴보 전략

저자:차오장, 날짜: 2023-11-01 16:57:13
태그:

img

전반적인 설명

이 전략은 더 강력하고 안정적인 거래 전략을 형성하기 위해 이중 오스실레이션 역전 전략과 신호-소음 비율 최적화 전략을 결합합니다. 전략은 트렌드 역전 지점에서 더 정확한 거래 신호를 생성하는 것을 목표로합니다.

전략 논리

듀얼 오스실레이션 역전 전략은 지난 14일 동안의 빠르고 느린 K 값을 계산하여 2일 연속 거래일에 반전이 있는지 여부를 결정합니다. 빠른 K가 50보다 낮을 때 반전이 발생하면 구매 신호입니다. 빠른 K가 50보다 높으면 판매 신호입니다.

신호-소음 비율 최적화 전략은 지난 21 일 동안의 신호-소음 비율을 계산하고 29 일 간 간단한 이동 평균으로 평평화합니다. 신호-소음 비율이 이동 평균 이상으로 넘으면 판매 신호입니다. 아래로 넘으면 구매 신호입니다.

마지막으로, 이 전략은 두 전략이 동일한 신호를 발산할 때만 구매 또는 판매 거래를 시작합니다.

이점 분석

  1. 여러 전략을 결합하면 더 정확한 거래 신호를 생성하고 하나의 전략에서 잘못된 신호를 피할 수 있습니다.

  2. 이중 오스실레이션 역전 전략은 트렌드 역전 지점을 잡습니다. 신호-음향 비율 최적화는 잘못된 신호를 필터링합니다. 함께 작동하면 역전에서 정확하게 거래 할 수 있습니다.

  3. 최적화된 매개 변수들, 예를 들어 14일간의 빠른/슬로우 스토카스틱과 21일간의 신호-소음 기간은 너무 많은 소음 없이 최근 트렌드를 포착합니다.

  4. 이중 확인 신호는 거래 위험을 크게 줄이고 불필요한 손실을 피합니다.

위험 분석

  1. 반전 신호는 절대적 바닥 또는 최고치를 지연하고 놓칠 수 있습니다. 지연을 단축하기 위해 매개 변수를 조정할 수 있습니다.

  2. 이중 신호 확인은 일부 거래 기회를 놓칠 수 있습니다. 확인 조건은 완화 될 수 있지만 또한 위험을 증가시킬 수 있습니다.

  3. 신호 대 소음 비율 매개 변수는 최적화가 필요합니다. 부적절한 기간은 신호가 누락되거나 잘못된 신호를 일으킬 수 있습니다.

  4. 여러 지표를 모니터링하면 복잡성이 증가합니다. 코드 최적화와 컴퓨팅 자원은 고려해야합니다.

최적화 방향

  1. MACD, RSI 등과 같은 더 나은 콤보 신호를 찾기 위해 더 많은 지표 조합을 테스트하십시오.

  2. 더 정확하고 신속한 신호를 위해 역전 전략의 매개 변수를 최적화합니다.

  3. 최적의 균형을 찾기 위해 신호와 소음 비율 기간을 최적화하십시오.

  4. 단일 트레이드에 대한 잠재적 손실을 제어하기 위해 스톱 로스 전략을 추가합니다.

  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 )

더 많은