더블 이동 평균 3개 지수 지표 거래 전략


생성 날짜: 2023-12-15 15:39:45 마지막으로 수정됨: 2023-12-15 15:39:45
복사: 0 클릭수: 603
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

더블 이동 평균 3개 지수 지표 거래 전략

개요

이 전략은 쌍평선 지표와 삼진평선 지표를 사용하여 무작위 지표와 결합하여 안정적이고 신뢰할 수있는 추세를 추적하는 거래 전략을 형성합니다. 주요 아이디어는 평선 지표 판단이 금 포크 또는 사다리 발생하면 거래 신호를 발산하는 것입니다. 무작위 지표는 과매도 과매도 상황을 판단하는 데 보조적으로 사용되며 시장의 급격한 변동이있을 때 잘못된 신호를 발생하지 않습니다.

원칙

이 전략은 크게 4가지로 구성되어 있습니다.

  1. 쌍평선 지표: 각각 50주기 및 100주기 지수 이동 평균 ((EMA) 을 계산하여, 단기 EMA 상에서 장기 EMA를 통과하면 구매 신호를 생성하고, 하위 EMA를 통과하면 판매 신호를 생성한다.

  2. 3개의 지수 지수: 50주기, 100주기, 200주기 각각의 지수 이동 평균을 계산하여 시장 추세 방향을 판단하기 위해. 50EMA>100EMA>200EMA가 다목시장이고, 50EMA<100EMA<200EMA가 공목시장이다.

  3. 무작위 지표: RSI의 6일 K값과 D값을 계산하여 오버 바이 오버 소드를 판단한다. D값을 K값 위에 통과하면 오버 소드, D값을 아래로 통과하면 오버 바이이다.

  4. 거래 신호: 쌍평평선 지표가 신호를 생성하는 동시에 시장이 3 지수평선 다단 또는 공백 상태에 부합하며, 무작위 지표가 오버 바이 오버 세를 표시하지 않을 때 진정한 거래 지시가 발령됩니다.

장점

이 전략은 평균선 지표와 무작위 지표의 장점을 통합하여 거래 신호를 발송 할 때 트렌드 방향을 고려하고 시장의 과매매 상태를 참고하여 소음을 잘 필터링하여 명확한 추세를 추적 할 수 있습니다. 또한, 전체적인 추세를 판단하기 위해 3 개의 지수 평균선을 사용하여 신호를 더 신뢰할 수 있습니다. 이 전략은 간단하고 이해하기 쉽고 실행 할 수 있으며 최적화 할 수 있습니다.

위험과 대책

이 전략의 가장 큰 위험은 지표 판단에 의존한다는 점이며, 지표가 잘못된 신호를 내면 거래 실패로 이어질 수 있다. 또한, 더 긴 주기 평균 지표를 사용하여 전체적인 추세를 판단할 때, 단기 기회도 놓칠 수 있다. 주요 위험 대책은 다음과 같다:

  1. 지표 파라미터를 최적화하고, 쌍평균선과 삼진평균선의 주기적 조합을 조정하여 시장 특성에 더 잘 맞게 만듭니다.

  2. 더 많은 지표와 결합하여 CANCEL 작업을 수행하고, 시장의 급격한 변동이 있다고 판단되면 현재 거래를 중단합니다.

  3. 단선 다단계 전략에 보조하여, 장선 다단계 시장에서 단기 기회를 활용하여 수익을 창출하십시오.

최적화 방향

이 전략은 다음의 몇 가지 측면에서 최적화될 수 있습니다.

  1. 이중 평균선과 3 지수 평균선의 주기 변수를 조정하고, 시장 특성에 따른 지표를 최적화한다.

  2. VOLUME 및 MACD와 같은 지표 판단을 증가시켜 가격 이상으로 인해 잘못된 신호가 발생하지 않도록하십시오.

  3. 촛불 모드를 사용하여 트렌드를 확인하고, 단기 철회 후의 잘못된 신호를 피하십시오.

  4. 주식, 외환 등으로 확장하여 전략의 적합성을 테스트하십시오.

  5. VIX 지표와 결합하여 전체 시장의 변동성을 판단하고 포지션 규모를 제어한다.

요약하다

이 전략은 쌍평선 지표를 사용하여 거래 신호를 발산하고, 삼진평선 및 무작위 지표를 보조 판단으로 사용하여 안정적인 트렌드 추적 전략을 구축합니다. 그것은 이해하기 쉽고, 실행하기 쉽고, 시장 특성에 대한 일치도가 높고, 수익이 안정적입니다. 권장되는 정량화 전략입니다.

전략 소스 코드
/*backtest
start: 2023-12-07 00:00:00
end: 2023-12-12 08:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='5212 EMA Strategy', shorttitle='5212 EMA', overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=10, calc_on_every_tick=false)

//**Backtest Date sof
useStartPeriodTime  = input.bool(true                       , 'Start Date & Time'   , group='Date Range'    , inline='Start Period')
startPeriodTime     = input(timestamp('16 Apr 2021')   , ''                    , group='Date Range'    , inline='Start Period')
useEndPeriodTime    = input.bool(false                      , 'End Date & Time'     , group='Date Range'    , inline='End Period')
endPeriodTime       = input(timestamp('31 Dec 2222')   , ''                    , group='Date Range'    , inline='End Period')
enableHighlight     = input.bool(false                      , 'Highlight'           , group='Date Range'    , inline='Highlight')
highlightType       = input.string('Anchors'                , ''                    , group='Date Range'    , inline='Highlight'    , options=['Anchors', 'Background'])
highlightColor      = input.color(color.white               , ''                    , group='Date Range'    , inline='Highlight')
start = useStartPeriodTime ? startPeriodTime >= time : false
end = useEndPeriodTime ? endPeriodTime <= time : false
calcPeriod = true
// var line startAnchor    = line.new(na, na, na, na, xloc.bar_time, extend.both, highlightColor, width=2)
// var line endAnchor      = line.new(na, na, na, na, xloc.bar_time, extend.both, highlightColor, width=2)
// useBgcolor = false
// if enableHighlight
//     if highlightType == 'Anchors'
//         if useStartPeriodTime
//             line.set_xy1(startAnchor, startPeriodTime, low)
//             line.set_xy2(startAnchor, startPeriodTime, high)
//         if useEndPeriodTime
//             line.set_xy1(endAnchor, calcPeriod ? time : line.get_x1(endAnchor), low)
//             line.set_xy2(endAnchor, calcPeriod ? time : line.get_x1(endAnchor), high)

//     if highlightType == 'Background'
//         useBgcolor := true
//         useBgcolor

// bgcolor(useBgcolor and calcPeriod ? color.new(highlightColor,90) : na, editable=false)
//**Backtest Date eof

src         =input(close    , 'Source'      , group='Support')
showEMA     = input(true    , 'Show EMA'    , group='Support')

//**Stochastic RSI sof
smoothK     = input.int(6   , "K"               , group='Stochastic RSI'    , minval=1)
smoothD     = input.int(6   , "D"               , group='Stochastic RSI'    , minval=1)
lengthRSI   = input.int(28  , "RSI Length"      , group='Stochastic RSI'    , minval=1)
lengthStoch = input.int(28  , "Stoch Length"    , group='Stochastic RSI'    , minval=1)

rsi1    = ta.rsi(src, lengthRSI)
k       = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d       = ta.sma(k, smoothD)
//**STochastic RSI eof

//** EMA sof
emain01     = input.int(50  , "EMAma Girang"    , group='Moving Average Exponential'    , minval=1)
emain02     = input.int(100 , "EMAma Muda"      , group='Moving Average Exponential'    , minval=1)
emain03     = input.int(200 , "EMAma Tua"       , group='Moving Average Exponential'    , minval=1)

ema01 = ta.ema(src, emain01)
ema02 = ta.ema(src, emain02)
ema03 = ta.ema(src, emain03)
plot(showEMA ? ema01 : na, 'EMAma Girang'   , color = color.new(color.orange, 0))
plot(showEMA ? ema02 : na, 'EMAma Muda'     , color = color.new(color.blue, 0))
plot(showEMA ? ema03 : na, 'EMAma Tua'      , color = color.new(color.red, 0))
//** EMA eof

//**Condition sof
emaLong     = ema01 > ema02 and ema02 > ema03 and low > ema03
emaShort    = ema01 < ema02 and ema02 < ema03 and high < ema03

longCond    = ta.crossover(k,d) and k <= 23 and emaLong
shortCond   = ta.crossunder(k,d) and k >= 77 and emaShort

longClose   = ta.crossunder(k,d) and k <= 77
shortClose  = ta.crossover(k,d) and k >= 23
longCross   = ta.crossover(ema01, ema02)
shortCross  = ta.crossunder(ema01, ema02)
//**Condition eof

//**Strategy sof
if calcPeriod and longCond
    strategy.entry('long', strategy.long, when=longCond, comment='EN Long')
strategy.close('long', when=shortClose, comment='EX Long')
strategy.close('long', when=shortCross, comment='MD Short')

if calcPeriod and shortCond
    strategy.entry('short', strategy.short, when=shortCond, comment='EN Short')
strategy.close('short', when=longClose, comment='EX Short')
strategy.close('short', when=longCross, comment='MD Long')

if calcPeriod == false and ta.crossover(ema01, ema02) or ta.crossunder(ema01, ema02)
    strategy.cancel('long')
    strategy.cancel('short')
//**Strategy eof

//**Label sof
entryText       = str.tostring(strategy.position_avg_price, '##.###')
longText    = 'Long Entry : ' + entryText 
shortText   = 'Short Entry : ' + entryText
noTrade     = 'Sleeping Mode'

LongTrade = strategy.position_size > 0
ShortTrade = strategy.position_size < 0

Tekslabel = LongTrade ? longText : ShortTrade ? shortText : noTrade

xPosition = timenow + math.round(ta.change(time)*1)
yPosition = ta.highest(1)
labelColor = LongTrade ? color.new(color.aqua, 0) : ShortTrade ? color.new(color.red, 0) : color.new(color.gray, 0)
textColor   = LongTrade ? color.new(color.black, 0) : ShortTrade ? color.new(color.white, 0) : color.new(color.white, 0)

// lab_l = label.new(
//           xPosition, yPosition, Tekslabel,
//           color=labelColor, 
//           textcolor=textColor, 
//           style =  label.style_label_left,
//           textalign=text.align_left,
//           xloc=xloc.bar_time, yloc = yloc.price)

// label.delete(lab_l[1])
//**Strategy eof