
이 전략은 두 가지 다른 파라미터 설정을 계산한 이동 평균을 계산하고 그 교차 상황을 비교하여 가격 트렌드 방향을 판단하여 트렌드 추적 거래를 가능하게 한다. 빠른 이동 평균이 아래에서 느린 이동 평균을 돌파할 때, 낙관적 신호로 판단한다. 빠른 이동 평균이 위에서 아래로 느린 이동 평균을 돌파할 때, 낙관적 신호로 판단한다. 이 전략은 파라미터 설정을 통해 서로 다른 주기의 추세를 판단할 수 있다.
이 정책은 두 개의 다른 파라미터 세트의 이동 평균을 비교합니다. 첫 번째 이동 평균은 len1과 type1에 의해 설정되며 두 번째 이동 평균은 len2와 type2에 의해 설정됩니다. len1과 len2는 두 개의 이동 평균의 주기 길이를 나타냅니다.
빠른 이동 평균이 아래에서 느린 이동 평균을 뚫고 황금 포크를 형성할 때, 호불호 신호로 판단한다. 빠른 이동 평균이 위에서 아래에서 느린 이동 평균을 뚫고 죽은 포크를 형성할 때, 하향 신호로 판단한다.
교차 신호의 방향에 따라, 더하거나 더 적은 작업을 수행한다. 상위 신호가 발동되면, needlong 파라미터가 true라면, default_qty_value의 수 또는 포지션%_of_equity의 비율에 따라 더한다. 하향 신호가 발동되면, needshort 파라미터가 true라면, default_qty_value의 수 또는 포지션%_of_equity의 비율에 따라 더 한다.
이동 평균은 지연성이 있으며 가격 전환점을 놓칠 수 있습니다. 해결 방법: 이동 평균 주기를 적절히 줄이거나 다른 지표와 함께 사용하십시오.
높은 변동률과 빈번하게 변하는 시장에는 적용되지 않습니다. 해결책: 필터링을 늘리고, 불안정한 상황에서 거래하는 것을 피하십시오.
잘못된 신호의 위험이 있습니다. 해결 방법: 다른 필터링 지표와 결합하여 신호의 신뢰성을 높인다.
이 전략은 두 개의 이동 평균의 교차 상황을 비교하여 가격 추세를 판단하고, 그에 따른 보이스 / 보이스 / 보이스 작업을 수행하여 추세를 포착하고 추적하여 이익을 얻을 수 있습니다. 전략의 장점은 신호 규칙이 간단하고 명확하며, 매개 변수가 조정 가능하며, 적용성이 강하며, 여러 가지 시장 환경에 최적화된 조정을 할 수 있습니다. 이동 평균의 지연 및 동요의 위험을 예방하는 데 주의를 기울여야하며, 다른 지표를 추가하여 신호 품질을 향상시킬 수 있습니다.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "Noro's MAs Cross Tests v1.0", shorttitle = "MAs Cross tests 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0)
needlong = input(true, "long")
needshort = input(true, "short")
len2 = input(15, defval = 15, minval = 2, maxval = 1000, title = "Fast MA length")
type2 = input(1, defval = 1, minval = 1, maxval = 7, title = "Fast MA Type")
src2 = input(close, defval = close, title = "Fast MA Source")
len1 = input(30, defval = 30, minval = 2, maxval = 1000, title = "Slow MA length")
type1 = input(1, defval = 1, minval = 1, maxval = 7, title = "Slow MA Type")
src1 = input(close, defval = close, title = "Slow MA Source")
col = input(false, defval = false, title = "Color of bar")
o = input(false, title = "1 SMA, 2 EMA, 3 VWMA, 4 DEMA, 5 TEMA, 6 KAMA, 7 Price Channel")
//DEMA 1
dema1 = 2 * ema(src1, len1) - ema(ema(close, len1), len1)
//TEMA 1
xEMA1 = ema(src1, len1)
xEMA2 = ema(xEMA1, len1)
xEMA3 = ema(xEMA2, len1)
tema1 = 3 * xEMA1 - 3 * xEMA2 + xEMA3
//KAMA 1
xvnoise = abs(src1 - src1[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src1 - src1[len1])
nnoise = sum(xvnoise, len1)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2)
kama1 = nz(kama1[1]) + nsmooth * (src1 - nz(kama1[1]))
//PriceChannel 1
lasthigh1 = highest(src1, len1)
lastlow1 = lowest(src1, len1)
center1 = (lasthigh1 + lastlow1) / 2
//DEMA 2
dema2 = 2 * ema(src2, len2) - ema(ema(close, len2), len2)
//TEMA 2
xEMA12 = ema(src2, len2)
xEMA22 = ema(xEMA12, len2)
xEMA32 = ema(xEMA22, len2)
tema2 = 3 * xEMA12 - 3 * xEMA22 + xEMA32
//KAMA 2
xvnoise2 = abs(src2 - src2[1])
nfastend2 = 0.20
nslowend2 = 0.05
nsignal2 = abs(src2 - src2[len2])
nnoise2 = sum(xvnoise2, len2)
nefratio2 = iff(nnoise2 != 0, nsignal2 / nnoise2, 0)
nsmooth2 = pow(nefratio2 * (nfastend2 - nslowend2) + nslowend2, 2)
kama2 = nz(kama2[1]) + nsmooth2 * (src2 - nz(kama2[1]))
//PriceChannel 2
lasthigh2 = highest(src2, len2)
lastlow2 = lowest(src2, len2)
center2 = (lasthigh2 + lastlow2) / 2
//MAs
ma1 = type1 == 1 ? sma(src1, len1) : type1 == 2 ? ema(src1, len1) : type1 == 3 ? vwma(src1, len1) : type1 == 4 ? dema1 : type1 == 5 ? tema1 : type1 == 6 ? kama1 : type1 == 7 ? center1 : 0
ma2 = type2 == 1 ? sma(src2, len2) : type2 == 2 ? ema(src2, len2) : type2 == 3 ? vwma(src2, len2) : type2 == 4 ? dema2 : type2 == 5 ? tema2 : type2 == 6 ? kama2 : type2 == 7 ? center2 : 0
plot(ma1, color = blue, linewidth = 3, transp = 0)
plot(ma2, color = red, linewidth = 3, transp = 0)
//Signals
trend = ma2 > ma1 ? 1 : ma2 < ma1 ? -1 : trend[1]
up = trend == 1 and ((close < open and close[1] < open[1]) or col == false)
dn = trend == -1 and ((close > open and close[1] > open[1]) or col == false)
if up
strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
if dn
strategy.entry("Short", strategy.short, needshort == false ? 0 : na)