Количественная стратегия с пересечением скользящих средних с фильтрацией тренда


Дата создания: 2023-12-01 14:25:08 Последнее изменение: 2023-12-01 14:25:08
Копировать: 0 Количество просмотров: 619
1
Подписаться
1619
Подписчики

Количественная стратегия с пересечением скользящих средних с фильтрацией тренда

Обзор

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

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

Эта стратегия основана на принципе пересечения движущихся средних линий. В частности, вычисляются движущиеся средние линии с двумя различными периодами, которые обычно устанавливаются на 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)