다중 지표 조합 전략


생성 날짜: 2023-10-07 10:25:40 마지막으로 수정됨: 2023-10-07 10:25:40
복사: 3 클릭수: 669
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

개요

이 전략은 여러 가지 유형의 기술 지표를 조합하여 더 정확한 신뢰할 수 있는 거래 신호를 생성합니다. 전략은 두 부분으로 구성됩니다. 첫 번째 부분은 123 리버스 전략을 사용하고 두 번째 부분은 TEMA 지표를 사용합니다. 두 가지의 거래 신호는 잘못된 신호를 필터링하고 신호 품질을 향상시키기 위해 조합됩니다.

전략 원칙

첫 번째 부분은 123 역전 전략을 사용한다. 이 전략은 스토카스틱 지표에 기초하여, 주가 가격이 2 일 연속으로 종결 가격에 역전이 발생했을 때 (예를 들어 2 일 종결 가격에 의해 뒤집어 떨어지는 경우) 그리고 스토카스틱 지표가 과매매 또는 과매매 신호를 표시했을 때 구매 또는 판매 신호를 발생시킨다.

구체적으로 말해서, 만약 상장 가격이 전날의 상장 가격보다 높고, 스토카스틱 슬로우 라인이 50보다 낮다면, 구매 신호가 발생한다. 만약 상장 가격이 전날의 상장 가격보다 낮고, 스토카스틱 슬로우 라인이 50보다 높다면, 판매 신호가 발생한다.

두 번째 부분은 TEMA 지표를 사용한다. TEMA는 삼중 지수 이동 평균을 나타내며, 계산 방법은 다음과 같다.

TEMA = 3*EMA(CLOSE, N) - 3*EMA(EMA(CLOSE, N), N) + EMA(EMA(EMA(CLOSE, N), N), N)

그 중, N은 변수 길이를 나타냅니다. 종결 가격이 TEMA 지표 값보다 높으면 구매 신호를 생성하고, 종결 가격이 TEMA 지표 값보다 낮으면 판매 신호를 생성합니다.

마지막으로, 두 지표의 조합 신호. 실제 거래 신호는 두 지표가 일치하는 신호를 생성할 때만 (두 개 모두 구매하거나 둘 다 판매) 생성됩니다.

전략적 이점

  • 여러 지표들을 조합하여 잘못된 신호를 필터링하여 신호 품질을 향상시킬 수 있다.
  • 123 역전 전략은 주식 가격의 실제 역전 상황에 기반하여, 트렌드에 따라 높은 가격으로 구매하고 공포로 판매하는 것을 피한다.
  • TEMA는 복수의 평준화를 통해 소음을 줄이고 더 신뢰할 수 있는 신호를 생성한다.
  • 두 가지 다른 유형의 지표의 조합은 거래 신호의 신뢰성을 더 많이 보장합니다.

위험과 최적화

  • 반전 전략 자체는 황소 시장에서 큰 추세를 놓칠 위험이 있습니다. 반전 전략의 매개 변수를 적절히 조정하여 미스 아웃의 확률을 줄일 수 있습니다.
  • TEMA는 트렌드 추적 지표로서, 잘못된 신호를 생성할 가능성이 있다. TEMA의 매개 변수를 적절히 조정하여 지표의 감수성을 최적화 할 수 있다.
  • 두 가지 지표의 경우 매개 변수가 잘못 선택되면 신호가 너무 희박할 수도 있다. 적절한 거래 주파수를 달성하기 위해 매개 변수를 조정해야 한다.
  • 필터를 추가하고 특정 시장 환경에서 전략을 종료하는 것을 고려하여 위험을 제어할 수 있습니다.

요약하다

이 전략은 합리적인 다중 지표 조합을 통해 거래 신호의 질을 향상시키고 매우 효과적인 양적 거래 전략이다. 그러나 여전히 위험 통제에 주의를 기울이고, 적절한 매개 변수를 조정하거나 다른 구성 요소를 추가하여 전략을 다양한 시장에서 안정적으로 작동 할 수 있도록 최적화해야합니다.

전략 소스 코드
/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-06 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 24/11/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
// This study plots the TEMA1 indicator. TEMA1 ia s triple MA (Moving Average),
// and is calculated as 3*MA - (3*MA(MA)) + (MA(MA(MA)))
//
// 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


TEMA(Length) =>
    pos = 0.0
    xPrice = close
    xEMA1 = ema(xPrice, Length)
    xEMA2 = ema(xEMA1, Length)
    xEMA3 = ema(xEMA2, Length)
    nRes = 3 * xEMA1 - 3 * xEMA2 + xEMA3
    pos := iff(close > nRes, 1,
             iff(close < nRes, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & TEMA1", 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, "---- TEMA1 ----")
LengthTEMA = input(26, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posT3A = TEMA(LengthTEMA)
pos = iff(posReversal123 == 1 and posT3A == 1 , 1,
	   iff(posReversal123 == -1 and posT3A == -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 )