Тенденция в соответствии со стратегией, основанной на перекрестном перемещении скользящих средних

Автор:Чао Чжан, Дата: 2024-02-23 12:21:40
Тэги:

img

Обзор

Эта стратегия определяет направление ценового тренда путем вычисления двух скользящих средних с различными параметрами и сравнения их перекрестных ситуаций, чтобы реализовать тренд после торговли. Когда быстрый скользящий средний прорывается через медленный скользящий средний снизу, он рассматривается как быстрый сигнал. Когда быстрый скользящий средний прорывается через медленный скользящий средний сверху, он рассматривается как медленный сигнал. Эта стратегия может достичь суждения о тенденциях различных циклов путем корректировки параметров.

Принцип стратегии

Эта стратегия использует два набора скользящих средних с различными параметрами для сравнения. Первый скользящий средний параметр устанавливается len1 и type1, а второй скользящий средний параметр устанавливается len2 и type2.

Когда быстрый скользящий средний пересекается над медленным скользящим средним и образует золотой крест, он рассматривается как сигнал для подъема.

В зависимости от направления сигнала кроссовера, будут выполнены длинные или короткие позиции. При запуске бычьего сигнала, если параметр needlong верен, будет открыта длинная позиция с количеством default_qty_value или percentage_of_equity. При запуске медвежьего сигнала, если параметр needshort верен, будет открыта короткая позиция с количеством default_qty_value или percentage_of_equity.

Преимущества

  1. Поддержка комбинации 7 различных типов скользящих средних для гибкой адаптации к рыночным условиям
  2. Настройка параметров двух скользящих средних для оценки долгосрочных и среднесрочных тенденций
  3. Простые и понятные правила оценки сигналов, которые легко понять и применить
  4. Поддерживает длинные и короткие позиции, может осуществлять транзакции по отслеживанию трендов

Риски и решения

  1. Движущиеся средние имеют отстающие свойства и могут пропустить точки переворота цены
    Решение: адекватно сократить циклы скользящей средней или использовать в сочетании с другими показателями

  2. Не подходит для рынков с высокой волатильностью и частыми реверсиями
    Решение: Добавить условия фильтрации, чтобы избежать торговли на колеблющихся рынках

  3. Есть определенные риски ложных сигналов.
    Решение: Добавить другие индикаторы фильтрации для комбинации для улучшения надежности сигнала

Руководство по оптимизации

  1. Оптимизировать комбинацию циклов скользящих средних и проверить влияние параметров длинного и короткого циклов на доходность стратегии
  2. Испытать производительность различных типов скользящих средних для поиска оптимального алгоритма скользящих средних
  3. Добавление переменной объема торговли или полос Боллинджера для комбинации для улучшения качества сигнала
  4. Оптимизировать стратегию управления позициями с целью улучшения подхода %_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)

Больше