Стратегия выбора временного диапазона адаптивного бэктестинга на основе двойной суперпозиции MA


Дата создания: 2024-01-05 12:12:10 Последнее изменение: 2024-01-05 12:12:10
Копировать: 0 Количество просмотров: 589
1
Подписаться
1621
Подписчики

Стратегия выбора временного диапазона адаптивного бэктестинга на основе двойной суперпозиции MA

Обзор

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

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

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

Стратегия состоит из модуля выбора диапазона дат отсчета и модуля стратегии торговли двойной МА.

Модуль выбора диапазона дат отслеживания

  1. Существует четыре варианта выбора диапазона дат: все исторические данные (ALL), последние дни (DAYS), последние недели (WEEKS) и ручной диапазон дат (MANUAL).
  2. В зависимости от выбранного диапазона, с помощью временного ящика переводить динамические настройки для отсчета времени начала и окончания.
  3. Функция фильтрует K-линии, только в выбранном диапазоне дат.

Модуль стратегии торговли двойными МА

  1. Быстрый MA - fastMA, по умолчанию 14; медленный MA - slowMA, по умолчанию 28.
  2. Когда быстрый МА проходит медленный МА, делаем больше; когда быстрый МА проходит медленный МА, мы делаем равновесие.
  3. Нарисуй медленно кривую MA.

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

  1. Возможность гибкого выбора различных временных диапазонов отслеживания, без ограничений, для удовлетворения различных экспериментальных потребностей.
  2. Можно проверить эффективность различных циклических параметров в одном и том же промежутке времени, результаты имеют сопоставимость.
  3. Простая модификация логики сделки может быть использована в качестве основы для других стратегий.
  4. Стратегия двойного мастерства проста, понятна и доступна.

Анализ рисков и решений

  1. Стратегия двойных МА является более грубой, и существует проблема частого купли-продажи. Можно рассмотреть оптимизацию, например, включение механизма остановки убытков.
  2. Необходимо соблюдать осторожность при настройке диапазона дат вручную, чтобы избежать использования ошибочных дат.
  3. Слишком длинный период отсчета всей истории увеличивает тестовый цикл. Можно рассмотреть возможность увеличения скольжения или снижения комиссионных для частых сделок.

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

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

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

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

Исходный код стратегии
/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title = "How To Auto Set Date Range", shorttitle = " ", overlay = true)

// Revision:        1
// Author:          @allanster 

// === INPUT MA ===
fastMA = input(defval = 14, title = "FastMA", type = input.integer, minval = 1, step = 1)
slowMA = input(defval = 28, title = "SlowMA", type = input.integer, minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
useRange     = input(defval = "WEEKS", title = "Date Range", type = input.string, confirm = false, options = ["ALL", "DAYS", "WEEKS", "MANUAL"])
nDaysOrWeeks = input(defval = 52, title = "# Days or Weeks", type = input.integer, minval = 1)
FromMonth    = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay      = input(defval = 15, title = "From Day", minval = 1, maxval = 31)
FromYear     = input(defval = 2019, title = "From Year", minval = 2014)
ToMonth      = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay        = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
ToYear       = input(defval = 9999, title = "To Year", minval = 2014)

// === FUNCTION EXAMPLE ===
window() => true

// === LOGIC ===
buy  = crossover(sma(close, fastMA), sma(close, slowMA))         // buy when fastMA crosses over slowMA
sell = crossunder(sma(close, fastMA), sma(close, slowMA))        // sell when fastMA crosses under slowMA

// === EXECUTION ===
strategy.entry("L", strategy.long, when=window() and buy)        // buy long when "within window of time" AND crossover
strategy.close("L", when=window() and sell)                      // sell long when "within window of time" AND crossunder         

// === PLOTTING ===
plot(sma(close, fastMA), title = 'FastMA', color = color.aqua, linewidth = 2, style = plot.style_line)    // plot FastMA
plot(sma(close, slowMA), title = 'SlowMA', color = color.yellow, linewidth = 2, style = plot.style_line)  // plot SlowMA