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


Дата создания: 2023-12-04 15:38:09 Последнее изменение: 2023-12-04 15:38:09
Копировать: 5 Количество просмотров: 699
1
Подписаться
1619
Подписчики

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

Обзор

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

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

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

Анализ преимуществ

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

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

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

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

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

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

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

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

//@version=5
strategy(
     "Larry Williams 3 Period EMAs strategy",
     overlay=true,
     calc_on_every_tick=true,
     currency=currency.USD
     )

// Time range for backtesting
startDate = input.int(title="Start Date", defval=1, minval=1, maxval=31)
startMonth = input.int(title="Start Month", defval=1, minval=1, maxval=12)
startYear = input.int(title="Start Year", defval=2018, minval=1800, maxval=2100)

endDate = input.int(title="End Date", defval=31, minval=1, maxval=31)
endMonth = input.int(title="End Month", defval=12, minval=1, maxval=12)
endYear = input.int(title="End Year", defval=2041, minval=1800, maxval=2100)

inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and
     (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))

// EMA
period = 3

emaH = ta.ema(high, period)
emaL = ta.ema(low, period)

// PLOT:
// Draw the EMA lines on the chart
plot(series=emaH, color=color.green, linewidth=2)
plot(series=emaL, color=color.red, linewidth=2)

// Conditions
if(inDateRange and close < emaL)
    strategy.entry("Long", strategy.long, comment="Long")
if(close > emaH)
    strategy.close("Long", comment="Close Long")

// Uncomment to enable short entries
//if(inDateRange and close > emaH)                                    
//    strategy.entry("Short", strategy.short, comment="Short")    
//if(close < emaL)
//    strategy.close("Short", comment="Close Short")