
이중 이동 평균 트렌드 추적 전략 (Dual Moving Average Trend Tracking Strategy) 은 빠른 이동 평균과 느린 이동 평균의 조합을 사용하여 트렌드 방향을 판단하고, K 선의 개체 색을 입력 신호로 결합한 양적 거래 전략이다. 이 전략은 동시에 트렌드 추적과 역전 거래의 특징을 가지고 있다.
이 전략은 길이 20의 느린 이동 평균을 사용하여 전체 트렌드 방향을 판단하며, 가격이 상위권으로 갈 때 상승 트렌드로 판단하고, 가격이 하위권으로 갈 때 하위 트렌드로 판단한다. 또한, 길이 5의 빠른 이동 평균을 입시 필터로 사용하여, 가격이 빠른 이동 평균을 돌파 할 때만 거래를 발송한다. 또한, 이 전략은 가장 가까운 N 근원 K 선의 실물 색상을 검사하며, 실물 색상이 연속적으로 빨간색으로 바뀌면 상승 트렌드를 결합하여 다중 신호를 발송하고, 실물 색상이 연속적으로 녹색으로 바뀌면 하위 트렌드를 결합하면 허공 신호를 발송하여 가짜 돌파를 방지한다.
이 전략은 3차원의 정보를 종합적으로 판단하여 전체적인 추세, 단기 평균선, K선 엔터티를 판단하여 거래 신호의 신뢰성을 높인다. 세 가지 방향이 일치할 때 거래 신호가 발송되며, 일부 소음을 효과적으로 필터링한다.
트렌드 추적 및 반전 거래의 특징을 가지고 있으며, 다양한 시장 환경에 적응할 수 있다.
거래 신호가 발신되기 전에 다차원 판단을 하고, 가짜 신호를 효과적으로 필터링하여 승률을 높인다.
변수 최적화 공간은 넓고, 이동 평균 길이를 조정하거나, K선 개체 색상 판단 루트 수와 같은 변수를 최적화 할 수 있다.
전략 논리는 명확하고 간결하며 이해하기 쉽고 초보자 학습에 적합하다.
큰 흔들림의 경우, 오징 스트리크가 형성되기 쉽고, 더 큰 회수를 가져옵니다. 이동 평균 파라미터를 적절히 조정하거나 중지 손실을 피하기 위해 추가 할 수 있습니다.
가로판 정리 단계에서 휘프사우가 형성되어 손실을 초래한다. K선 엔티티 색상의 판단의 근수를 적절히 조정하거나 역거래를 종료할 수 있다.
충분한 재검토가 필요하며, 변수 설정이 합리적인지 확인해야 합니다. 그렇지 않으면 전략의 성능에 큰 영향을 미칠 수 있습니다.
다른 종류의 이동 평균을 시도해 보세요. 지수 이동 평균, 카우프만 적응 이동 평균 등등.
거래량을 고정하거나 계정 이해관계에 따라 조정하는 것과 같은 거래량 제어를 추가합니다.
추가된 스톱드 메커니즘. 가격이 느린 이동 평균 아래로 다시 떨어지면 스톱드 탈퇴를 고려할 수 있다.
다양한 종을 테스트하여 전략의 안정성과 적응성을 판단할 수 있습니다.
트렌드 판단과 역거래를 결합한 듀얼 모블레이드 평균선 트렌드 추적 전략은 중장선 트렌드 여분의 효과를 효과적으로 포착할 수 있으며, 짧은 선에서도 추가 수익을 얻을 수 있다. 매개 변수 최적화 및 메커니즘 강화를 통해 수익을 창출할 수 있는 공간을 더욱 확대할 수 있다. 이 전략의 논리는 간단하고 명확하며, 초보자 학습 연구에 매우 적합하다. 그러나 모든 전략은 다양한 품종과 매개 변수에서 충분한 검증이 필요하며, 안정성과 수익성을 보장한다.
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "Noro's Trend MAs 1.5", shorttitle = "Trend MAs 1.5", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)
//Settings
needlong = input(true, "long")
needshort = input(true, "short")
type = input(7, defval = 7, minval = 1, maxval = 7, title = "Type of Slow MA")
src = input(close, defval = close, title = "Source of Slow MA")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
fastsma = ema(src, fastlen)
//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
//Trend
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
trend = low > ma ? 1 : high < ma ? -1 : trend[1]
//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0
//Signals
up = trend == 1 and (low < fastsma or usefastsma == false) and redbars == 1 ? 1 : 0
dn = trend == -1 and (high > fastsma or usefastsma == false) and greenbars == 1 ? 1 : 0
//Lines
colorfastsma = usefastsma == true ? red : na
plot(fastsma, color = colorfastsma, title = "Fast MA")
plot(ma, color = blue, linewidth = 3, transp = 0, title = "Slow MA")
//Trading
longCondition = up == 1
if (longCondition)
strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
shortCondition = dn == 1
if (shortCondition)
strategy.entry("Short", strategy.short, needshort == false ? 0 : na)