이중 이동 평균 역전 거래 전략

저자:차오장, 날짜: 2024-01-15 12:35:29
태그:

img

전반적인 설명

이중 이동 평균 반전 거래 전략은 볼링거 밴드 반전 거래 전략과 이중 기하급수적 이동 평균 거래 전략을 결합하여 포괄적인 신호 판단 거래 전략을 설계합니다. 주식, 외화 및 암호화폐와 같은 시장에서 사용할 수 있습니다.

전략 원칙

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

  1. 볼링거 밴드 반전 거래 전략

    볼링거 밴드 지표의 두 줄 - %K 라인 및 %D 라인을 사용하십시오. 닫기 가격이 전날의 닫기보다 낮고 %K 라인이 %D 라인의 위에 있는 2 일 연속으로 닫을 때 장거리 이동; 닫기 가격이 전날의 닫기보다 높고 %K 라인이 %D 라인의 아래에 있는 2 일 연속으로 닫을 때 단기 이동.

  2. 이중 지수적 이동 평균 전략

    20일 및 20일*2 이중 지수 이동 평균을 계산합니다. 가격이 이중 이동 평균을 넘거나 밑을 넘을 때 거래 신호가 생성됩니다.

결합된 신호 판단 규칙: 두 전략의 거래 신호가 일치할 때만 실제 거래 신호가 생성됩니다.

이점 분석

이 결합 전략의 가장 큰 장점은 높은 신뢰성 및 적은 잘못된 신호입니다. 왜냐하면 두 가지 다른 유형의 전략의 신호가 동시에 발사되어야하기 때문에 단일 전략에서 나타날 수있는 잘못된 신호의 일부를 필터링합니다.

또한, 역전과 트렌드 전략을 결합함으로써, 단기적 역전과 중기적 트렌드를 모두 파악할 수 있습니다.

위험 분석

이 전략의 주요 위험은 시장이 장기적으로 변동할 때 두 전략이 일관된 신호를 생성하지 못할 수 있으며 이로 인해 시장 조건이 유효하지 않다는 것입니다. 이 시점에서 거래자는이 전략의 사용을 중단하고 명확한 추세가 형성 될 때까지 기다려야합니다.

또한, 중장기 지표로서, 이중 이동 평균은 단기 반전이 급격하게 발생하면 실패 할 수 있습니다. 이것은 거래자가 더 많은 지표로 더 넓은 시장 추세를 판단해야합니다.

최적화 방향

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

  1. 더 많은 매개 변수를 추가로 중지 손실 가격, 트레일링 중지 손실 가격 범위 등 전략을 더 제어 할 수 있습니다.

  2. 더 많은 지표를 추가하여 여러 필터 기준을 형성하고 더 시끄러운 거래를 제거하십시오. 예를 들어 MACD, KD 및 기타 지표와 결합하십시오.

  3. 가장 좋은 매개 변수 조합을 찾기 위해 볼링거 기간, 이동 평균 기간 등 지표 매개 변수를 최적화하십시오.

  4. 이 전략의 효과를 각각 다른 제품 (주식, 외환, 암호화폐 등) 에서 테스트하고 가장 적합한 제품을 선택하십시오.

결론

이중 이동 평균 반전 전략은 반전 및 트렌드 전략을 결합하여 비교적 신뢰할 수 있는 복합 거래 신호를 생성합니다. 증권 가격의 단기 반전 및 중기 트렌드에 관심이있는 거래자에게 적합합니다. 그러나 전략이 장기 범위 시장에서 실패 할 수 있습니다. 매개 변수를 최적화하고 더 많은 지표를 추가함으로써이 전략의 실용성이 더욱 향상 될 수 있습니다.


/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 12/04/2019
// This is combo strategies for get 
// a cumulative signal. Result signal will return 1 if two strategies 
// is long, -1 if all strategies is short and 0 if signals of strategies is not equal.
//
// 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.
//
// Secon strategy
// This indicator plots 2/20 exponential moving average. For the Mov 
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
// Please, use it only for learning or paper trading. Do not for real trading.
//
// 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

EMA2_20(MA_Length, MA_xPrice) =>
    xXA = ema(MA_xPrice, MA_Length)
    nHH = max(high, high[1])
    nLL = min(low, low[1])
    nXS = iff((nLL > xXA)or(nHH < xXA), nLL, nHH)
    pos = 0.0
    pos := iff(nXS > close[1] , -1, iff(nXS < close[1] , 1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal and 2/20 EMA", shorttitle="Combo Backtest", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
MA_Length = input(20, minval=1)
reverse = input(false, title="Trade reverse")
MA_xPrice = close
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posEMA2_20 = EMA2_20(MA_Length, MA_xPrice)
pos = iff(posReversal123 == 1 and posEMA2_20 == 1 , 1,
	   iff(posReversal123 == -1 and posEMA2_20 == -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 ? red: possig == 1 ? green : blue ) 

더 많은