Тенденционный фильтр перемещающейся средней кроссоверной количественной стратегии

Автор:Чао Чжан, Дата: 2023-12-01 14:25:08
Тэги:

img

Обзор

Количественная стратегия пересечения скользящих средних (англ. Trend Filter Moving Average Crossover Quantitative Strategy) - это средне- и долгосрочная количественная стратегия торговли. Она определяет направление тренда рынка через пересечение быстрых и медленных скользящих средних и входит на рынок с предпосылкой выявления эффективного тренда. В то же время эта стратегия также устанавливает длинный цикл скользящей средней в качестве фильтра тренда, так что действительные торговые сигналы могут генерироваться только тогда, когда цены проходят через эту скользящую среднюю.

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

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

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

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

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

  2. Определение скользящей средней перекрестности является ясным и простым в понимании и реализации.

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

  4. Гибкая корректировка параметров скользящей средней применима к различным сортам и временным циклам.

  5. Стоп-лосс и прибыль могут быть настроены для контроля единой прибыли и убытка.

Анализ рисков

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

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

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

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

Уменьшение риска:

  1. Принять длинные циклы скользящих средних или увеличить условия фильтрации тренда.

  2. Включить другие показатели для определения основной тенденции, такие как энергетические показатели, показатели волатильности и т.д.

  3. Улучшить адаптивность параметров скользящих средних циклов.

  4. Увеличить механизмы оптимизации параметров и обратной связи для динамической корректировки параметров стратегии.

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

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

  2. Увеличить адаптивную функциональность цикла скользящей средней.

  3. Включить индикаторы волатильности для определения этапов тренда, улучшая достоверность перекрестных скользящих средних.

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

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

Резюме

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


/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

////////////////////////////////////////////////////////////////////////////////
// Booz Strategy
// Developed for Godstime
// Version 1.1
// 11/28/2021
////////////////////////////////////////////////////////////////////////////////

//@version=4
strategy("Booz Strategy", "", true)

// ----------------------------- Inputs ------------------------------------- //
source_ma_type = input("EMA", "Source MA Type", options=["SMA", "EMA"])
source_ma_length = input(50, "Source MA Length")
fast_ma_length = input(20, "Fast MA Length")
slow_ma_length = input(50, "Slow MA Length")        
use_trend_filter = input(true, "Trend Filter")
trend_filter_ma_type = input("EMA", "Trend Filter MA Type", options=["SMA", "EMA"])
trend_filter_ma_length = input(200, "Trend Filter MA Period")
show_mas = input(true, "Show MAs")
swing_trading_mode = input(false, "Swing Trading")

// -------------------------- Calculations ---------------------------------- //
fast_ma = ema(close, fast_ma_length)
slow_ma = ema(close, slow_ma_length)
source_ma = source_ma_type == "EMA"? ema(close, source_ma_length): 
                                     sma(close, source_ma_length)
trend_filter_ma = trend_filter_ma_type == "EMA"? ema(close, trend_filter_ma_length): 
                                                 sma(close, trend_filter_ma_length)

// --------------------------- Conditions ----------------------------------- //
uptrend = not use_trend_filter or close > trend_filter_ma
buy_cond = crossover(fast_ma, slow_ma) and uptrend

downtrend = not use_trend_filter or close < trend_filter_ma
sell_cond = crossunder(fast_ma, slow_ma) and downtrend

// ---------------------------- Plotting ------------------------------------ //
bgcolor(use_trend_filter and downtrend? color.red: use_trend_filter? color.green: na)
plot(show_mas? fast_ma: na, "Fast MA", color.green)
plot(show_mas? slow_ma: na, "Slow MA", color.red)
plot(show_mas? source_ma: na, "Source MA", color.purple)
plot(show_mas? trend_filter_ma: na, "Trend Filter MA", color.blue)


// ---------------------------- Trading  ------------------------------------ //
// Inputs
sl_perc = input(1.0, "Stop Loss (in %)", group="Backtest Control")/100
tp_perc = input(1.0, "Take Profit (in %)", group="Backtest Control")/100
leverage = input(10, "Leverage", maxval=100, group="Backtest Control")
bt_start_time = input(timestamp("2021 01 01"), "Backtest Start Time", input.time, group="Backtest Control")
bt_end_time = input(timestamp("2021 12 31"), "Backtest End Time", input.time, group="Backtest Control")

// Trading Window
in_trading_window = true
trade_qty = 1

// Long Side
strategy.entry("Long Entry", strategy.long, trade_qty, when=buy_cond and in_trading_window)
long_tp = strategy.position_avg_price * (1 + tp_perc)
long_sl = strategy.position_avg_price * (1 - sl_perc)
if not swing_trading_mode
    strategy.exit("Long Exit", "Long Entry", limit=long_tp, stop=long_sl)

// Short Side
strategy.entry("Short Entry", strategy.short, trade_qty, when=sell_cond and in_trading_window)
short_tp = strategy.position_avg_price * (1 - tp_perc)
short_sl = strategy.position_avg_price * (1 + sl_perc)
if not swing_trading_mode
    strategy.exit("Short Exit", "Short Entry", limit=short_tp, stop=short_sl)

// End of trading window close
strategy.close_all(when=not in_trading_window)

Больше