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

Автор:Чао Чжан, Дата: 2023-11-23 11:39:24
Тэги:

img

Обзор

Эта стратегия называется Динамическая стратегия скользящей средней. Основная идея заключается в использовании направления скользящей средней и ее отношения с ценой для определения тренда. Входить на рынок в соответствии с направлением тренда и закрывать позиции, когда нет тренда.

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

Стратегия использует исходные цены в течение длительного периода для расчета скользящей средней, где исходные цены могут быть OHLC4, HLC3, ценой закрытия и т. Д. Полученная скользящая средняя определяется как sma. Затем длинная линия и короткая линия графизируются на основе процента от стоимости скользящей средней, чтобы определить, находимся ли мы в настоящее время в восходящей или нисходящей тенденции.

В частности, короткая линия рассчитывается как: короткая линия = sma * ((100 + короткий уровень) / 100), где короткий уровень является положительным числом, установленным пользователем, представляющим процент, который короткая линия находится выше скользящей средней. Длинная линия аналогична, рассчитывается как: длинная линия = sma * ((100 + длинный уровень) / 100), где длинный уровень является отрицательным числом, установленным пользователем, представляющим процент, который длинная линия находится ниже скользящей средней.

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

Независимо от того, длинный или короткий, когда цена возвращается к скользящей средней, это означает, что тенденция заканчивается.

Таким образом, направление тренда и соответствующие записи и существуют определяются динамическими отношениями между длинными/короткими линиями и линией скользящей средней.

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

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

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

Риски

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

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

Улучшение

Стратегия может быть дополнительно оптимизирована в следующих аспектах:

  1. Добавьте логику остановки потери. Поскольку скользящие средние имеют отставание в оценке тенденций, невозможно полностью избежать ловушки. Поэтому соответствующие остановки могут еще больше снизить риски.

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

  3. Помимо позиций длинной/короткой линии, алгоритмы также могут оценивать силу тренда, чтобы избежать ошибок от слабых сигналов тренда.

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

Заключение

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


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's ShiftMA Strategy v1.1", shorttitle = "ShiftMA str 1.1", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, title = "Length")
src = input(ohlc4, title = "Source")
shortlevel = input(10.0, title = "Short line (red)")
longlevel = input(-5.0, title = "Long line (lime)")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//SMAs
sma = sma(src, per) 
//sma = lowest(low, per)
shortline = sma * ((100 + shortlevel) / 100)
longline = sma * ((100 + longlevel) / 100)
plot(shortline, linewidth = 2, color = red, title = "Short line")
plot(sma, linewidth = 2, color = blue, title = "SMA line")
plot(longline, linewidth = 2, color = lime, title = "Long line")

//plot(round(buy * 100000000), linewidth = 2, color = lime)
//plot(round(sell * 100000000), linewidth = 2, color = red)

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[per])) and size == 0 and needlong
    strategy.entry("L", strategy.long, lot, limit = longline, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size == 0 and needshort
    strategy.entry("S", strategy.short, lot, limit = shortline, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size > 0 
    strategy.entry("Close", strategy.short, 0, limit = sma, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size < 0 
    strategy.entry("Close", strategy.long, 0, limit = sma, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Больше