다중 지표 EMA 전략


생성 날짜: 2023-09-28 15:57:34 마지막으로 수정됨: 2023-09-28 15:57:34
복사: 1 클릭수: 766
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

개요

다중 지표 EMA 전략은 EMA, MACD, Oscillator, RSI, Stochastic, Bollinger Bands 등 여러 지표를 통합하여 트렌드 추적 전략을 사용합니다. 이 전략은 여러 지표의 통합 신호를 계산하여 현재 상승 추세 또는 하향 추세에 있는지 판단하여 구매 및 판매 신호를 생성합니다.

전략 원칙

이 전략은 먼저 다음과 같은 여러 지표를 계산합니다.

  • EMA: 일정 주기 동안의 지수 이동 평균 EMA를 계산한다.

  • MACD: MACD 지표의 DIF 선과 DEA 선을 계산한다.

  • 오실레이터: 특정 주기의 폐쇄 가격과 개방 가격의 차이를 계산한다.

  • RSI: 일정 주기 동안의 상대적 강약 지수를 계산한다.

  • Stochastic: 특정 변수의 임의 지표 K와 D 값을 계산한다.

  • 볼린저 밴드 (Bollinger Bands): 일정 주기 동안의 볼린을 계산하는 상반도, 중반도, 하반도.

이 지표들의 현재 상태에 따라 각기 다른 수치를 부여한다. 예를 들어, Stochastic이 20보다 작으면 2로, RSI가 80보다 크면 -2로 부여한다.

다음으로 모든 지표의 수치를 덧셈하여 종합 신호 트리거를 계산한다. 트리거가 7보다 크면 구매 신호를 생성한다. 트리거가 7보다 작으면 판매 신호를 생성한다.

여러 지표의 합성 신호를 계산하여 현재의 트렌드 방향을 더 정확하게 판단하여 더 신뢰할 수있는 거래 신호를 생성 할 수 있습니다.

우위 분석

이 다중 지표 전략의 가장 큰 장점은 여러 지표의 장점을 통합하여 단일 지표로 인한 잘못된 신호를 피하여 더 포괄적이고 정확한 판단을 할 수 있다는 것입니다.

특히, 이 전략의 장점은 다음과 같습니다:

  1. 여러 지표를 통합하여 트렌드를 판단하는 것이 더 신뢰할 수 있습니다. 단일 지표는 잘못된 신호를 일으킬 수 있으며, 여러 지표는 서로 확인하여 오류를 줄일 수 있습니다.

  2. 지표의 다른 특징을 이용하여 트렌드의 다른 단계를 식별한다. 예를 들어 MACD는 트렌드의 시작을 식별할 수 있고, RSI는 과열 여부를 판단할 수 있다.

  3. 다른 변수 설정의 지표는 다른 주기의 특성을 캡처할 수 있다. 예를 들어, 빠른 주기 EMA와 느린 주기 EMA 등이다.

  4. 각 지표의 무게를 사용자 정의할 수 있습니다. 더 중요한 지표에 더 높은 무게를 부여할 수 있습니다.

  5. 백테스트 결과에 따라 지표 조합과 무게 분배를 최적화하여 더 나은 전략 효과를 얻을 수 있습니다.

위험 분석

이 전략은 여러 지표들을 종합적으로 사용하여 추세를 판단하지만, 다음과 같은 위험들이 존재합니다.

  1. 여러 지표의 조합이 부적절하여 각 지표의 장점을 발휘할 수 없거나 판단 충돌을 초래합니다. 각 지표의 적용 환경을 이해해야합니다.

  2. 무게 분배가 불합리하여 각 지표의 중요성을 정확하게 표현할 수 없습니다. 반복적인 테스트를 통해 무게를 최적화해야 합니다.

  3. 단일 주기 파라미터 설정이 적절하지 않을 수 있습니다. 여러 시간 주기 검증을 사용해야 합니다.

  4. 고정된 지표 중량과 매개 변수는 시장의 변화에 적응할 수 없으며, 동적 조정 메커니즘을 도입할 필요가 있다.

  5. 지표 신호가 지연되어 있으면, 다른 기술 방법과 결합하여 손해 중지 시간을 판단한다.

  6. 다중 지표 조합은 전략적 복잡성을 증가시키고, 충분한 역사적 데이터의 지원이 필요하며, 파라미터 최적화가 더 어렵다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화될 수 있습니다.

  1. 더 많은 종류의 지표를 테스트하여 현재 시장 환경에 더 민감한 지표를 찾아보세요.

  2. 각 지표의 주기 변수를 최적화하여 다양한 수준의 트렌드 특성을 포착할 수 있도록 한다.

  3. 각 지표의 중량 분배를 최적화하여 각 지표의 상대적 중요성을 보다 정확하게 표현할 수 있도록 한다.

  4. 동적 조정 메커니즘을 추가하고, 실시간으로 매개 변수와 무게를 최적화하여 시장 변화에 적응하십시오.

  5. 손실을 줄이기 위해 합리적인 스톱포인트를 설정하여 스톱포드 전략과 결합하십시오.

  6. 단일 사이클의 과도한 최적화를 방지하기 위해 다중 시간 사이클 검증을 추가하십시오.

  7. 단계적 최적화 및 조합 최적화 방법을 사용하여 최적의 변수 조합을 찾습니다.

  8. 기계 학습과 같은 고급 방법을 추가하여 더 지능적인 지표 중량 조정을 수행합니다.

  9. 전략의 구매 및 판매 논리를 최적화하고, 트렌드를 추적하면서, 너무 자주 거래되는 것을 피하십시오.

요약하다

다중 지표 EMA 전략은 EMA, MACD, RSI와 같은 여러 지표의 장점을 통합하여 현재 시장 추세 방향을 판단하여 거래 신호를 생성합니다. 단일 지표 전략에 비해 이 전략은 더 포괄적으로 시장을 분석하여 잘못된 신호의 발생을 줄일 수 있습니다. 또한 이 전략은 파라미터 최적화와 같은 방법으로 개선 될 수 있습니다.

전략 소스 코드
/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ally17

//@version=4
// strategy("ELIA MULTI STRATEGY",overlay=true,initial_capital=1000, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.00, default_qty_value=25)

//INPUT
start = timestamp(input(2021, "start year"), 1, 1, 00, 00)
end = timestamp(input(9999, "end year"), 1, 1, 00, 00)

emalen=input(80, title="Ema Len")
macdfast=input(12, title="Macd Fast Len")
macdslow=input(26, title="Macd Fast Len")
macdsig=input(12, title="Macd Signal Len")
occlen=input(15, title="Occ Len")

rsilen=input(2, title="Rsi Len")
stochklen=input(11, title="Stk K Len")
stochdlen=input(3, title="Stk D Len")
stochlen=input(3, title="Stk Smooth Len")
bblength = input(10, minval=1, title="BB Len")
mult = input(2.0, minval=0.001, maxval=50, title="BB Std Dev")

momlen=input(10, title="Mom Len")


//CALCOLI
var trigger = 0.0

var emavar = 0.0
var macdvar = 0.0
var occvar = 0.0

var rsivar = 0.0
var stochvar = 0.0
var bbvar = 0.0

var donvar =0.0

ema = ema(close,emalen)

[macdLine, signalLine, histLine] = macd(close, 12, 26, 9) // MACD

occ = ema(close,occlen) - ema(open,occlen)

rsi = rsi(close, rsilen) // RSI

stoch = sma(stoch(close, high, low, stochklen), stochlen) // Stoch

basis = sma(close, bblength)
dev = mult * stdev(close, bblength)
upper = basis + dev
lower = basis - dev

moment = mom(close, momlen) // Momentum

Obv = obv // OBV


//PLOT


//STRATEGIA
emavar := (close>ema)? 3 : -3
macdvar := (macdLine>signalLine)? 3 : -3
occvar := (occ>0)? 3 : -3

rsivar := (rsi<20)? 2 : (rsi>50 and rsi<80)? 1 : (rsi>80)? -2 : (rsi<50 and rsi>20)? -1 : 0
stochvar := (stoch<20)? 2 : (stoch>80)? -2 : 0
bbvar :=  (close<lower)? 2 : (close>upper)? -2 : 0

trigger := emavar+macdvar+occvar+rsivar+stochvar+bbvar

longcondition = trigger>=7
closelong = trigger<3

shortcondition = trigger<=-7
closeshort = trigger >-3

trendcolor = longcondition ? color.green : shortcondition? color.red : (trigger>3 and trigger<7)? #A2E1BF : (trigger<-3 and trigger>-7)? #E19997 : na
bgcolor(trendcolor, transp=80)


if time > start and time < end
    if longcondition
        strategy.entry("LONG", long=strategy.long)

if closelong
    strategy.close("LONG", comment="CLOSE LONG")
    
if time > start and time < end
    if shortcondition
        strategy.entry("SHORT", long=strategy.short)

if closeshort
    strategy.close("SHORT", comment="CLOSE SHORT")
    
//plotshape(longcondition, color=color.green, text="L", size=size.small, style=shape.triangledown)
//plotshape(shortcondition, color=color.red, "S"(trigger), size=size.small, style=shape.triangledown)
//plotshape(closelong, color=color.purple, text="LC", size=size.small, style=shape.triangledown)
//plotshape(closeshort, color=color.purple, text="SC", size=size.small, style=shape.triangledown)