이 전략은 다른 매개 변수 설정을 가진 두 개의 이동 평균을 계산하고 트레이딩 후 트렌드를 구현하기 위해 크로스오버 상황을 비교하여 가격 트렌드 방향을 결정합니다. 빠른 이동 평균이 아래에서 느린 이동 평균을 뚫을 때 상승 신호로 판단됩니다. 빠른 이동 평균이 위에서 느린 이동 평균을 뚫을 때 하락 신호로 판단됩니다. 이 전략은 매개 변수를 조정함으로써 다른 주기의 트렌드를 판단 할 수 있습니다.
이 전략은 비교를 위해 서로 다른 매개 변수 설정을 가진 두 개의 이동 평균 세트를 사용합니다. 첫 번째 이동 평균 매개 변수는 len1과 type1에 의해 설정되며 두 번째 이동 평균 매개 변수는 len2와 type2에 의해 설정됩니다. 여기서 len1과 len2는 각각 두 이동 평균의 사이클 길이를 나타내며 type1과 type2는 이동 평균의 알고리즘 유형을 나타냅니다.
빠른 이동 평균이 느린 이동 평균을 넘어서 황금 십자가를 형성하면 상승 신호로 판단됩니다. 빠른 이동 평균이 느린 이동 평균을 넘어서 죽은 십자가를 형성하면 하향 신호로 판단됩니다.
크로스오버 신호의 방향에 따라 긴 또는 짧은 포지션이 실행됩니다. 올림 신호가 발생하면, 만약 니드롱 매개 변수가 사실이라면, 롱 포지션이 퀄리티 default_qty_value 또는 퀄리티 %_of_equity로 열립니다. 하락 신호가 발생하면, 만약 니드 쇼트 매개 변수가 사실이라면, 퀄리티 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)