이중 이동 평균 크로스오버 전략

저자:차오장, 날짜: 2023-09-17 22:35:07
태그:

이 전략은 서로 다른 기간의 두 이동 평균의 교차를 기반으로 거래 신호를 생성합니다.

전략 논리

이 전략은 사용자가 이동 평균의 종류와 길이를 선택할 수 있습니다. 유형에는 SMA, EMA, VWMA 등이 있습니다. 길이는 이동 평균의 기간을 결정합니다.

두 개의 이동 평균은 사용자의 선택에 따라 계산됩니다. 더 빠른 선이 느린 선 위에 넘어가면 황금 십자가가 형성되어 구매 신호가 생성됩니다. 더 빠른 선이 느린 선 아래에 넘어가면 죽음의 십자가가 형성되어 판매 신호가 생성됩니다.

단기 평균 가격이 장기 평균 가격보다 높으면 상승 추세로 간주되며 긴 포지션을 취해야 합니다. 단기 평균 가격이 장기 가격보다 낮으면 하락 추세로 간주되어 짧은 포지션을 취해야 합니다.

이점 분석

  • 전략 논리는 간단하고 명확하고 이해하기 쉽고 실행하기 쉽습니다.
  • 이동 평균은 시장 소음을 효과적으로 필터링하고 트렌드를 식별할 수 있습니다.
  • 허가 유형과 매개 변수는 다양한 제품과 시간대에 적응하도록 유연하게 선택할 수 있습니다.
  • 다양한 지표를 조합하여 최적화 할 수 있습니다.

위험 분석

  • 시장이 변동할 때 여러 가지 잘못된 신호를 생성할 수 있습니다.
  • 부적절한 매개 변수 선택은 전략 성능이 떨어질 수 있습니다.
  • 신호가 늦어지고, 전환점을 적시에 파악할 수 없습니다.
  • 급격한 가격 충격에 노출되어 있습니다.

리스크는 매개 변수를 최적화하고 신호를 생성하기 위한 다른 지표를 결합하고, 스톱 로스/프로피트 취득 등을 통해 관리될 수 있습니다.

최적화 방향

  • 최적의 매개 변수를 찾기 위해 다양한 유형의 MA와 길이를 테스트합니다.
  • 신호 필터링을 위한 다른 지표, 예를 들어 부피, 변동성 지표를 추가합니다.
  • 스톱 로스/프로피스 로직을 추가해서 마이너 다운로드를 줄이세요.
  • 부적절한 시장 조건을 피하기 위해 동향 평가를 포함합니다.
  • 자금 관리를 최적화합니다. 포지션 사이즈, 위험 예산.

결론

이 전략은 이중 MAs 크로스오버를 가진 신호를 생성하는 간단하고 명확한 논리를 가지고 있습니다. 유연한 매개 변수 조정 및 최적화를위한 다른 전략과 조합을 허용하지만 시장 범위의 위험을 모니터링하고 돈 관리가 중요합니다. 전반적으로 고려할 가치가있는 전략입니다.


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

//@version=2
strategy(title = "Noro's MAs Tests", shorttitle = "MAs tests", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)


len = input(30, defval = 30, minval = 2, maxval = 1000, title = "MA length")
type = input(1, defval = 1, minval = 1, maxval = 7, title = "Type")
src = input(close, defval = close, title = "Source")

//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)

//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
kama = nz(kama[1]) + nsmooth * (src - nz(kama[1]))

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0

plot(ma, color = blue, linewidth = 3, transp = 0)

trend = low > ma ? 1 : high < ma ? -1 : trend[1]

longCondition = trend == 1 and trend[1] == -1
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = trend == -1 and trend[1] == 1
if (shortCondition)
    strategy.entry("Short", strategy.short)
    
    
    
    

더 많은