Стратегия выбора диапазона даты адаптивного обратного теста на основе двойного MA

Автор:Чао Чжан, Дата: 2024-01-05 12:12:10
Тэги:

img

Обзор

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

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

Принцип стратегии

Стратегия состоит из двух модулей: выбор диапазона дат обратного тестирования и стратегия двойной торговли MA.

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

  1. Предоставляет четыре варианта выбора диапазона дат: все данные истории (ALL), последние указанные дни (DAYS), последние указанные недели (WEEKS), ручно указанный диапазон дат (MANUAL).
  2. Динамически устанавливает время начала и окончания обратного теста на основе конверсии временной метки выбранного диапазона.
  3. Использует функцию window ((() для фильтрации свечей и выполняет обратные тесты только в пределах выбранного диапазона дат.

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

  1. Период быстрого MA - fastMA, по умолчанию 14; период медленного MA - slowMA, по умолчанию 28.
  2. Долгое положение, когда быстрая МА пересекает медленную МА; близкое положение, когда быстрая МА пересекает медленную МА.
  3. Графики быстрых и медленных кривых MA.

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

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

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

  1. Стратегия двойного MA является грубой с частыми проблемами покупки/продажи.
  2. Ручное установление диапазона дат требует осторожности, чтобы избежать ошибок.
  3. Долгая история обратного теста увеличивает тестовый цикл.

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

  1. Добавьте логику стоп-лосса, чтобы снизить риск потери.
  2. Фильтрные запасы с запасами по высокой индексной значимости для повышения стабильности.
  3. Добавить фильтры для удаления нестабильных сигналов в течение определенных периодов, чтобы уменьшить ненужные сделки.
  4. Проверка показателей запасов для поиска лучших сортов.

Заключение

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


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


Больше