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


Дата создания: 2024-02-23 12:21:40 Последнее изменение: 2024-02-23 12:21:40
Копировать: 4 Количество просмотров: 619
1
Подписаться
1617
Подписчики

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

Обзор

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

Стратегический принцип

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

Когда быстрая движущаяся средняя сверху нарушает медленную движущуюся среднюю и образует золотую вилку, она рассматривается как позитивный сигнал; когда быстрая движущаяся средняя сверху нарушает медленную движущуюся среднюю и образует мертвую вилку, она рассматривается как нисходящий сигнал.

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

Стратегические преимущества

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

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

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

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

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

Направление оптимизации

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