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


Дата создания: 2023-11-23 11:39:24 Последнее изменение: 2023-11-23 11:39:24
Копировать: 0 Количество просмотров: 374
1
Подписаться
1166
Подписчики

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

Обзор

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

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

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

В частности, расчетная формула для короткой линии: shortline = sma * ((100 + shortlevel) / 100), где shortlevel - это положительное число, которое может быть установлено пользователем, и представляет собой соотношение между короткой линией и движущейся средней линией. Аналогично, расчетная формула для длинной линии: longline = sma * ((100 + longlevel) / 100), longlevel - это отрицательное число, которое может быть установлено пользователем и представляет собой соотношение между длинной линией и движущейся средней линией.

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

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

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

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

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

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

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

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

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

Оптимизация стратегии

Эта стратегия может быть улучшена в следующих областях:

  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()