스토카스틱 지표와 결합된 이중 이동 평균 전략

저자:차오장, 날짜: 2024-01-12 11:16:52
태그:

img

전반적인 설명

이 문서에서는 이중 이동 평균 전략과 스토카스틱 지표를 결합한 양적 거래 전략을 소개합니다. 이 전략은 트렌드 다음 이동 평균의 능력과 스토카스틱의 과잉 구매 과잉 판매 특성을 활용하여 거래 신호를 생성합니다.

전략 원칙

이 전략은 두 부분으로 구성됩니다.

  1. 이중 이동 평균 전략

    빠른 이동 평균과 느린 이동 평균을 사용하여 골든 크로스 구매 신호와 죽은 크로스 판매 신호를 생성합니다. 빠른 이동 평균은 가격 트렌드 변화를 더 빨리 포착 할 수 있으며 느린 평균은 가짜 신호를 필터합니다.

  2. 스토카스틱 지표

    스토카스틱의 오시슬레이션 특징을 활용하여 과잉 구매 및 과잉 판매 상황을 식별합니다. 느린 라인보다 높은 스토카스틱은 과잉 구매 신호를 나타냅니다. 느린 라인보다 낮은 스토카스틱은 과잉 판매 신호를 나타냅니다.

두 부분의 신호는 최종 거래 신호를 형성하기 위해 결합됩니다. 이중 이동 평균 전략은 주요 추세를 추적하고 스토카스틱은 불리한 시장 조건을 피하는 데 도움이됩니다.

이점 분석

  • 이중 이동 평균과 스토카스틱의 장점을 결합하여 더 안정적입니다.
  • 트렌드를 따르는 이동 평균, 확인을 위한 스토카스틱, 좋은 효과
  • 사용자 정의 가능한 매개 변수는 다른 시장 조건에 적응합니다.

위험 분석

  • 이중 이동 평균은 쉽게 잘못된 신호를 생성할 수 있습니다.
  • 부적절한 스토카스틱 매개 변수 설정은 트렌드를 놓칠 수 있습니다.
  • 시장 변화에 적응하기 위해 매개 변수를 조정해야 합니다.

위험은 매개 변수 조합을 최적화하고 손실을 제어하는 데 Stop Loss를 추가함으로써 줄일 수 있습니다.

최적화 방향

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

  1. 전략에 다른 이동 평균 매개 변수의 영향을 테스트합니다.
  2. 다른 스토카스틱 매개 변수의 전략의 안정성에 대한 영향을 테스트합니다.
  3. 승률을 높이기 위해 트렌드 필터링 지표를 추가합니다.
  4. 손실을 통제하기 위해 동적인 후속 스톱 손실 메커니즘을 구축합니다.

요약

이 전략은 이중 이동 평균과 스토카스틱의 장점을 결합합니다. 주요 시장 추세를 추적하면서 불리한 반전을 피합니다. 매개 변수 최적화를 통해 더 나은 전략 결과를 얻을 수 있습니다. 정지 및 트렌드 필터를 추가하면 전략을 더 견고하게 할 수 있습니다.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 24/11/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
// As the name suggests, High low bands are two bands surrounding the underlying’s 
// price. These bands are generated from the triangular moving averages calculated 
// from the underlying’s price. The triangular moving average is, in turn, shifted 
// up and down by a fixed percentage. The bands, thus formed, are termed as High 
// low bands. The main theme and concept of High low bands is based upon the triangular 
// 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

    
HLB(Length, PercentShift) =>
    pos = 0.0
    xTMA = sma(sma(close, Length), Length)
    xHighBand = xTMA + (xTMA * PercentShift / 100)
    xLowBand = xTMA - (xTMA * PercentShift / 100)
    pos :=iff(close > xHighBand, 1,
           iff(close <xLowBand, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & High Low Bands", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
Length_HLB = input(14, minval=1)
PercentShift = input(1, minval = 0.01, step = 0.01)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posHLB = HLB(Length_HLB, PercentShift)
pos = iff(posReversal123 == 1 and posHLB == 1 , 1,
	   iff(posReversal123 == -1 and posHLB == -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 )

더 많은