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

Автор:Чао Чжан, Дата: 2023-12-04 15:38:09
Тэги:

img

Обзор

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

Логика стратегии

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

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

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

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

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

Руководство по оптимизации

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

Заключение

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


/*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")

Больше