Кроссоверная тенденция EMA в соответствии со стратегией

Автор:Чао Чжан, Дата: 2023-12-27 16:31:15
Тэги:

img

Обзор

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

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

Основным показателем этой стратегии является EMA.

EMA (t) = C (t) ×2/ (n+1) + EMA (t-1) × (n-1) / (n+1)

где t - текущий тик, C ((t) - текущая цена закрытия, а n - значение параметра N. EMA - это метод скользящей средней с взвешенным коэффициентом, придающий большее значение последним ценам, тем самым быстрее реагируя на последние изменения цен.

Стратегия строит быстрые и медленные EMA и принимает быстрый переход EMA выше медленной EMA в качестве сигнала покупки, а быстрый переход EMA ниже медленной EMA в качестве сигнала продажи.

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

Преимущества этой стратегии:

  1. Логика проста и легко понять и реализовать;
  2. Использовать простую и практичную EMA для оценки ценовых тенденций, избегая пропусков основных тенденций;
  3. Немногие параметры для корректировки и оптимизации, в основном опираясь на быстрые и медленные EMA;
  4. Способность следить за восходящими тенденциями после покупки;
  5. Способность избегать отказов после продажи, снижая риски;
  6. Достаточные данные обратного теста с высокой надежностью.

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

Основными рисками являются:

  1. высокая вероятность ложных сигналов от EMA;
  2. Частый сигнал, когда рынок находится в диапазоне, так как EMA легко перекрещиваются;
  3. Невозможно своевременно остановить потерю, когда внезапные события вызывают резкое изменение направления;
  4. Ограниченное пространство для оптимизации, что фактическая производительность может быть ниже результатов обратных испытаний.

Для снижения вышеуказанных рисков могут быть приняты следующие меры оптимизации:

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

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

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

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

Резюме

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


/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("EMA交叉策略by GPT",
     format = format.inherit,
     overlay = true,
     default_qty_type= strategy.percent_of_equity,
     default_qty_value = 100,
     currency = currency.USD,
     initial_capital = 1000000)


// 定義回測交易開始和結束時間的變數
start_time = input(title="開始時間", type=input.time, defval=timestamp("01 Jan 2020 00:00 +0000"))
end_time = input(title="結束時間", type=input.time, defval=timestamp("31 Dec 2050 23:59 +0000"))


// 判斷是否在回測交易時間範圍內
in_range = true


// Define input variables
fast_length = input(title="Fast EMA Length", type=input.integer, defval=5)
slow_length = input(title="Slow EMA Length", type=input.integer, defval=20)


// Define EMAs
fast_ema = ema(close, fast_length)
slow_ema = ema(close, slow_length)


// Define buy and sell signals
buy_signal = crossover(fast_ema, slow_ema)
sell_signal = crossunder(fast_ema, slow_ema)


// Buy signal
if in_range and buy_signal
    strategy.entry("Buy", strategy.long, when=in_range)
   
// Sell signal
if in_range and sell_signal
    strategy.close("Buy", when=sell_signal)

Больше