이중 이동 평균 반전 브레이크업 전략

저자:차오장, 날짜: 2023-12-18 10:24:08
태그:

img

전반적인 설명

이중 이동 평균 역전 브레이크아웃 전략은 123 역전 전략과 가격 및 이동 평균 분산 전략 모두를 포함하는 조합 전략입니다. 이 전략의 핵심 아이디어는 123 역전 신호가 가격 및 MA 분산 신호와 일치 할 때만 거래 신호를 생성하는 것입니다.

전략 논리

이중 이동 평균 반전 브레이크오웃 전략은 두 가지 구성 요소로 구성됩니다.

  1. 123 역전 전략

    123 리버설 전략은 9일 스토카스틱 오시레이터 K-라인과 결합하여 두 일 연속적인 클로즈 가격 반전 (즉, 더 높은 클로즈가 더 낮은 클로즈로 이어지거나 더 낮은 클로즈가 더 높은 클로즈로 이어지거나) 을 기반으로 거래 신호를 생성합니다.

  2. 가격 및 이동평균 격차 전략

    가격 & MA 분산 전략은 가격과 특정 기간의 이동 평균 (디폴트 14) 사이의 비율 차이를 계산합니다. 분산이 한 임계치보다 낮을 때 구매 신호를 생성합니다 (디폴트 3%) 분산이 한 임계치보다 높을 때 판매 신호를 생성합니다 (디폴트 0.54%).

이중 이동평균 반전 브레이크업 전략은 위의 두 전략의 신호가 같은 방향으로 정렬될 때만 실제 거래 신호를 생성합니다. 즉 둘 다 구매 또는 둘 다 판매 신호입니다.

이점 분석

이중 이동 평균 반전 브레이크업 전략은 시너지를 위해 반전 및 트렌드 추종 전략의 장점을 결합합니다.

123 리버설은 전환을 활용하기 위해 리버설 신호를 선택합니다. 가격 & MA 디버전스는 장기 트렌드를 추적합니다. 함께 함락되지 않도록 더 큰 트렌드를 타고 짧은 기간의 리버설을 캡처합니다.

또한 양쪽 전략에서 일치된 신호를 요구함으로써 유효하지 않은 거래의 수가 크게 감소하여 신호와 소음 비율을 향상시킬 수 있습니다.

위험 분석

이 두 가지 전략의 장점을 활용하는 동시에 이중 이동 평균 반전 브레이크업 전략은 각 전략과 관련된 위험을 계승합니다.

123 리버스 컴포넌트의 경우, 이틀 연속으로 매일 리버스되는 것은 실제 트렌드 리버스를 보장하지 않습니다. 단기적 인퇴로 인한 잘못된 신호일 수도 있습니다. 또한 스토카스틱 오시레이터의 파라미터 조정이 좋지 않으면 신호 품질이 저하 될 수 있습니다.

가격 & MA 디버전스 부분에서는 부적절한 이동 평균 매개 변수가 지연 신호로 이어질 수 있습니다. 또한, 디버전스 자체는 트렌드 방향을 나타내지 않으며 기계적 신호만을 생성합니다.

요약하자면, 이 전략의 주요 위험은 파라미터 조정이 좋지 않고 신호 발생이 잘못되었기 때문입니다. 위험은 파라미터 최적화, 스톱 로스/프로프트 취득, 수동 개입 등을 통해 완화 될 수 있습니다.

더 나은 기회

이중 이동 평균 반전 브레이크업 전략은 다음 측면으로 향상될 수 있습니다.

  1. 더 나은 신호를 위해 MA 및 오시레이터 매개 변수를 최적화하십시오.
  2. 신호 필터링을 위한 다른 표시기를 추가합니다.
  3. 스톱 로스를 포함하고 이윤을 취합니다.
  4. 추세 결정을 추가하여 비시간 거래를 피합니다.
  5. 수동 개입 및 적응적 매개 변수 조정

다양한 개선 방법의 조합으로 전략 안정성과 수익성이 더욱 향상될 수 있습니다.

결론

이중 이동 평균 반전 브레이크아웃 전략은 반전 및 트렌드 추종 전략의 장점을 결합하여 두 가지 신호 유형이 일치 할 때만 거래를 생성합니다. 함정을 피하기 위해 더 큰 트렌드를 타고 짧은 기간 반전 기회를 잡습니다. 이중 신호 메커니즘은 또한 신뢰성을 향상시킵니다. 풍부한 향상 기회로 다재다능하고 강력한 정량화 된 거래 전략입니다.


/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-17 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 13/04/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
// Percent difference between price and 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


DBP_MA(Length,SellZone,BuyZone) =>
    pos = 0.0
    xSMA = sma(close, Length)
    nRes = abs(close - xSMA) * 100 / close
    pos:= iff(nRes < BuyZone, 1,
           iff(nRes > SellZone, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Difference between price and MA", 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, "---- Difference between price and MA ----")
LengthDBP = input(14, minval=1)
SellZone = input(0.54, minval=0.01, step = 0.01)
BuyZone = input(0.03, minval=0.01, step = 0.01)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posDBP_MA = DBP_MA(LengthDBP,SellZone,BuyZone)
pos = iff(posReversal123 == 1 and posDBP_MA == 1 , 1,
	   iff(posReversal123 == -1 and posDBP_MA == -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 )

더 많은