DMI와 이동평균 조합 전략

저자:차오장, 날짜: 2023-09-19 21:51:14
태그:

전반적인 설명

이 전략은 123 역전 전략, DMI 전략 및 이동 평균 전략을 결합하여 효과적인 조합 전략을 형성합니다. 트렌드 역전 지점에서 역전 작업을 수행하고 트렌드가 계속되면 트렌드를 따라갈 수 있습니다. 한편, 트렌드 승률을 향상시키기 위해 시장 트렌드 방향을 필터하고 식별하는 이동 평균을 사용합니다.

전략 논리

  1. 123 역전 전략: 닫기 가격이 2 일 연속으로 이전 닫기보다 높고 9 일 느린 K 라인이 50 이하일 때 길게 이동; 닫기 가격이 2 일 연속으로 이전 닫기보다 낮고 9 일 빠른 K 라인이 50 이상일 때 짧게 이동.

  2. DMI 전략: +DI가 -DI를 넘을 때 장거리; -DI가 +DI를 넘을 때 단거리.

  3. 이동평균 전략: 닫기 가격이 MA를 넘을 때 장거리; 닫기 가격이 MA를 넘을 때 단거리.

  4. 세 가지 전략이 일관된 신호를 내면 포지션을 열고, 그렇지 않으면 포지션을 닫습니다.

이 전략은 트렌드 전략과 역전 전략을 결합하여 역전 기회와 트렌드를 따르는 기회를 포착 할 수 있습니다. 이동 평균 필터는 잘못된 신호를 줄일 수 있습니다. 여러 전략이 서로를 확인하고 신호 신뢰성을 향상시킵니다.

이점 분석

  1. 복수의 전략을 결합하면 승률이 향상됩니다. 전환점을 감지하기 위해 123 회전, 트렌드를 감지하기 위해 DMI 및 신호를 필터링하기 위해 MA 필터.

  2. 역전과 트렌드 전략을 결합하면 역전과 트렌드를 유연하게 파악할 수 있습니다.

  3. MA 필터는 단기 변동의 잘못된 신호를 줄여줍니다.

  4. 여러 전략을 결합하면 신호를 확인하고 단일 전략의 실패를 피합니다.

  5. 여러 매개 변수는 최적화되어 최상의 매개 변수 조합과 더 높은 안정성을 제공합니다.

위험 분석

  1. 역전 전략은 범위에 묶인 트렌드에 갇히기 쉽다. 트렌드 전략과 결합하면 피할 수 있습니다.

  2. DMI는 초기 트렌드 기회를 놓칠 수 있습니다. 감수성을 향상시키기 위해 DMI 매개 변수를 짧게 할 수 있습니다.

  3. MA는 지연 효과를 가지고 신호 생성 지연을 일으킬 수 있습니다. 반응 속도를 높이기 위해 MA 기간을 단축 할 수 있습니다.

  4. 전략 을 조합 함 으로 승률 이 높아지는 것 이긴 하지만, 복잡성 도 증가 한다. 매개 변수 를 신중 하게 테스트 하는 것 이 필요하다.

  5. 이 전략은 거래 비용에 민감합니다. 과도한 거래를 피하기 위해 손해를 줄여야 합니다.

최적화 방향

  1. 각 전략의 매개 변수를 최적화하여 최상의 조합을 찾습니다.

  2. MACD, RSI와 같은 다른 지표를 추가하여 신호를 필터하고 안정성을 향상시킵니다.

  3. 위험을 통제하기 위해 트레일링 스톱 로스 같은 스톱 로스 전략을 추가합니다.

  4. 포지션 사이징을 최적화하여 고정/동적 사이징과 같이 수익을 향상시킵니다.

  5. 적응력을 높이기 위해 특정 제품에 대한 세밀한 조정 매개 변수

  6. 의사결정을 지원하고 성능을 향상시키기 위해 기계 학습 모델을 추가합니다.

결론

이 전략은 역전, 트렌드 및 MA 필터 전략을 효과적으로 결합하여 유연한 조합 시스템을 형성합니다. 역전 및 트렌드 다음 기회를 모두 포착하고 여러 전략을 통해 신호 신뢰성을 향상시킬 수 있습니다. 매개 변수, 스톱 로스, 포지션 사이징 등에 대한 추가 개선이 여전히 가능합니다. 숙련 된 응용으로이 실용적이고 확장 가능한 전략은 라이브 거래에서 상당한 이익을 창출 할 수 있습니다.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 15/10/2019
// 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
// The related article is copyrighted material from Stocks & Commodities Aug 2009 
//
// 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

fFilter(xSeriesSum, xSeriesV, Filter) =>
    iff(xSeriesV > Filter, xSeriesSum, 0)

DMIMA(Length_MA, Length_DMI) =>
    pos = 0.0
    xMA = sma(close, Length_MA)
    up = change(high)
    down = -change(low)
    trur = rma(tr, Length_DMI)
    xPDI = fixnan(100 * rma(up > down and up > 0 ? up : 0, Length_DMI) / trur)
    xNDI = fixnan(100 * rma(down > up and down > 0 ? down : 0, Length_DMI) / trur)
    nPDI = xPDI
    nNDI = xNDI
    nMA = xMA
    nPDI_1 = xPDI[1]
    nNDI_1 = xNDI[1]
    nMA_1 = xMA[1]
    bMDILong = iff(nPDI > nNDI and nPDI_1 < nNDI_1, true, 
                 iff(nPDI < nNDI and nPDI_1 > nNDI_1, false, false)) 
    bMDIShort = iff(nPDI > nNDI and nPDI_1 < nNDI_1, false, 
                  iff(nPDI < nNDI and nPDI_1 > nNDI_1, true, false)) 
    bMALong = iff(close > nMA and close[1] < nMA_1, true, 
                 iff(close < nMA and close[1] > nMA_1, false, false))
    bMAShort = iff(close > nMA and close[1] < nMA_1, false, 
                 iff(close < nMA and close[1] > nMA_1, true, false))
    pos := iff(bMDILong and bMALong, 1, 
         iff(bMDIShort and bMAShort, -1, nz(pos[1], 0)))
    pos

strategy(title="Combo Backtest 123 Reversal & DMI & Moving Average", 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_MA = input(30, minval=1)
Length_DMI = input(14, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posDMIMA = DMIMA(Length_MA,Length_DMI)
pos = iff(posReversal123 == 1 and posDMIMA == 1 , 1,
	   iff(posReversal123 == -1 and posDMIMA == -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 )

더 많은