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


Дата создания: 2024-02-04 15:57:12 Последнее изменение: 2024-02-04 15:57:12
Копировать: 0 Количество просмотров: 504
1
Подписаться
1617
Подписчики

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

Обзор

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

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

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

Эта стратегия анализирует информацию в трех измерениях: общая тенденция, краткосрочная средняя линия и сущность K-линии, что повышает надежность торговых сигналов. Торговый сигнал подается, когда все три направления совпадают, эффективно отфильтровывая часть шума.

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

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

  2. Перед отправкой торгового сигнала производится многомерное суждение, эффективно фильтруется ложный сигнал, повышается выигрышность.

  3. Параметры оптимизации имеют большое пространство и могут быть оптимизированы путем корректировки длины скользящей средней, цвета K-линейных объектов, определения числа корней.

  4. Стратегическая логика четкая, понятная и подходит для начинающих.

Стратегический риск

  1. В условиях сильных колебаний, легко формируетсяosing streak, что приводит к большим отступлениям. Можно соответствующим образом изменить параметры скользящей средней или добавить стоп-убытки, чтобы избежать.

  2. На этапе горизонтальной сборки легко образоваться whipsaw, что приводит к убыткам. Можно соответствующим образом скорректировать коренное число суждений о цвете объекта K-линии или закрыть обратную сделку.

  3. Необходимо обеспечить полное отслеживание, чтобы параметры были настроены разумно, иначе это может существенно повлиять на эффективность стратегии.

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

  1. Попробуйте различные типы скользящих средних, такие как индексальные скользящие средние, Кауфман адаптивные скользящие средние и т.д.

  2. Добавление контроля за объемом сделок, например, фиксированный объем сделок или корректировка по учетной записи.

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

  4. Можно тестировать различные сорта, чтобы оценить стабильность и адаптивность стратегии.

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs 1.5", shorttitle = "Trend MAs 1.5", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, "long")
needshort = input(true, "short")
type = input(7, defval = 7, minval = 1, maxval = 7, title = "Type of Slow MA")
src = input(close, defval = close, title = "Source of Slow MA")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")

fastsma = ema(src, fastlen)

//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)

//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
kama = nz(kama[1]) + nsmooth * (src - nz(kama[1]))

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Trend
ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0
trend = low > ma ? 1 : high < ma ? -1 : trend[1]

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0

//Signals
up = trend == 1 and (low < fastsma or usefastsma == false) and redbars == 1 ? 1 : 0
dn = trend == -1 and (high > fastsma or usefastsma == false) and greenbars == 1 ? 1 : 0

//Lines
colorfastsma = usefastsma == true ? red : na
plot(fastsma, color = colorfastsma, title = "Fast MA")
plot(ma, color = blue, linewidth = 3, transp = 0, title = "Slow MA")

//Trading
longCondition = up == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

shortCondition = dn == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)