이중 이동 평균 크로스오버 역전 전략

저자:차오장, 날짜: 2023-11-24 17:03:47
태그:

img

전반적인 설명

이중 이동 평균 크로스오버 역전 전략은 트렌드를 따르는 전략으로 123 역전 전략과 디나폴리 유도 오시레이터 전략을 결합하여 시장 추세를 추적하기 위해 이중 이동 평균 크로스오버를 통해 거래 신호를 생성합니다.

전략 논리

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

  1. 123 역전 전략: 이 전략은 스토카스틱 지표를 사용하여 신호를 생성합니다. 스토카스틱 빠른 라인이 느린 라인 아래와 50 아래에서있을 때 두 일 연속 하락 후 닫기 가격이 상승 할 때 구매 신호를 보내며, 스토카스틱 빠른 라인이 느린 라인 위에 있고 50 위에있을 때 닫기 가격이 상승 한 두 일 연속 하락 할 때 판매 신호를 보내습니다.

  2. 디나폴리 디트렌드 오시레이터 전략: 이 전략은 가격이 이동 평균 라인을 일정 값으로 초과하거나 그 이하로 떨어지면 거래 신호를 생성하기 위해 가격의 이동 평균 라인을 이용합니다. 구체적으로, 가격이 이동 평균 라인의 긍정적 인 트리거 값을 초과 할 때 구매 신호를 보내고 가격이 이동 평균 라인의 부정적인 트리거 값을 넘어설 때 판매 신호를 발송합니다.

위의 두 전략 중 각각이 별도의 거래 신호를 생성 한 후, 이 전략은 그것들을 통합하고 두 신호가 일치 할 때, 즉 이중 이동 평균이 같은 방향으로 신호를 형성 할 때만 실제 거래 명령을 발송합니다. 그렇지 않으면 아무런 조치도 취하지 않습니다.

이점 분석

이 전략은 이중 이동 평균 거래 신호를 결합하여 시장 트렌드를 효과적으로 추적 할 수 있으며 다음과 같은 장점을 가지고 있습니다.

  1. 동력과 트렌드를 판단하는 데 스토카스틱 지표의 강점을 최대한 활용하고 단일 지표에서 유도 신호로 인한 손실을 피하십시오.

  2. 디나폴리 지표는 트렌드를 효과적으로 식별하고 무작위 변동으로 인한 불필요한 포지션 개척을 피할 수 있습니다.

  3. 이중 이동 평균 크로스오버는 잘못된 신호를 효과적으로 줄이고 신호 품질을 향상시켜 시장 방향을 판단하는 강력한 증거를 제공할 수 있습니다.

  4. 전략의 조정 가능한 매개 변수는 사용자가 개인 취향에 따라 매개 변수 조합을 선택하여 다양한 시장 환경에 유연하게 적응할 수 있도록 허용합니다.

위험 분석

이 전략은 또한 다음과 같은 위험을 가지고 있습니다.

  1. 황소 시장에서 전략은 과도하게 신중한 지표 매개 변수 설정으로 인해 구매 기회를 놓칠 수 있습니다. 매개 변수를 적절히 조정하여 전략을 더 공격적으로 만들 수 있습니다.

  2. 곰 시장에서는 이중 이동 평균 크로스오버 신호가 뒤떨어질 수 있으며, 이로 인해 과잉 구매 및 과잉 판매 조건이 발생할 수 있습니다. 이동 평균 기간은 전략을 더 민감하게 만들기 위해 적절하게 단축되어야합니다.

  3. 큰 일방적인 시장 움직임의 경우, 이중 이동 평균 크로스오버 신호는 느려질 수 있습니다. 손실을 제어하기 위해 중지 설정해야합니다.

최적화

전략은 다음과 같은 방법으로 최적화 될 수 있습니다.

  1. 최적의 매개 변수 조합을 찾기 위해 스토카스틱 및 디나폴리 지표의 매개 변수를 테스트하고 최적화하십시오.

  2. 전략의 내부 논리를 풍부하게하고 신호의 정확성을 향상시키기 위해 볼륨 지표와 같은 다른 보조 판단 지표를 추가하십시오.

  3. 기계 학습 방법을 사용하여 전략 매개 변수와 신호 생성 규칙을 훈련하고 최적화하여 시장 변화에 완전히 적응하도록하십시오.

  4. 중장기 및 장기 신호를 구별하기 위해 고급 기술 지표로 지역 구조를 평가하여 전략이 여러 시간 프레임에서 작동 할 수 있습니다.

결론

이중 이동 평균 크로스오버 역전 전략은 두 가지 지표를 통합하여 이중 이동 평균 크로스오버 거래 신호를 형성하여 시장 추세를 효과적으로 추적하고 위험을 제어하면서 비교적 좋은 수익을 얻을 수 있습니다. 이것은 신뢰할 수있는 추세를 따르는 전략입니다. 전략은 매개 변수 최적화 및 보조 지표를 추가하여 지속적으로 개선 및 업그레이드 할 수 있습니다. 광범위한 응용 가능성이 있습니다.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 18/02/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
// DiNapoli Detrended Oscillator Strategy
//
// 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

DiNapoli(Length, Trigger) =>
    pos = 0.0
    xSMA = sma(close, Length)
    nRes = close - xSMA
    pos := iff(nRes > Trigger, 1,
    	     iff(nRes <= Trigger, -1, nz(pos[1], 0)))    
    pos

strategy(title="Combo Backtest 123 Reversal & DiNapoli Detrended Oscillator", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthDiN = input(14, minval=1)
TriggerDiN = input(0)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posDiN = DiNapoli(LengthDiN, TriggerDiN)
pos = iff(posReversal123 == 1 and posDiN == 1 , 1,
	   iff(posReversal123 == -1 and posDiN == -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 )

더 많은