Эта стратегия определяет направление ценового тренда путем вычисления двух скользящих средних с различными параметрами и сравнения их перекрестных ситуаций, чтобы реализовать тренд после торговли. Когда быстрый скользящий средний прорывается через медленный скользящий средний снизу, он рассматривается как быстрый сигнал. Когда быстрый скользящий средний прорывается через медленный скользящий средний сверху, он рассматривается как медленный сигнал. Эта стратегия может достичь суждения о тенденциях различных циклов путем корректировки параметров.
Эта стратегия использует два набора скользящих средних с различными параметрами для сравнения. Первый скользящий средний параметр устанавливается len1 и type1, а второй скользящий средний параметр устанавливается len2 и type2.
Когда быстрый скользящий средний пересекается над медленным скользящим средним и образует золотой крест, он рассматривается как сигнал для подъема.
В зависимости от направления сигнала кроссовера, будут выполнены длинные или короткие позиции. При запуске бычьего сигнала, если параметр needlong верен, будет открыта длинная позиция с количеством default_qty_value или percentage_of_equity. При запуске медвежьего сигнала, если параметр needshort верен, будет открыта короткая позиция с количеством default_qty_value или percentage_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)