Количественная торговая стратегия, основанная на двойном пересечении EMA


Дата создания: 2023-11-21 11:41:40 Последнее изменение: 2023-11-21 11:41:40
Копировать: 0 Количество просмотров: 620
1
Подписаться
1617
Подписчики

Количественная торговая стратегия, основанная на двойном пересечении EMA

Обзор

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

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

Эта стратегия основывается на теории двойных средних значений EMA. Двойные средние знаки EMA разделены на длинные и короткие EMA. Параметры коротких EMA установлены на 10 дней, а длинных - на 21 день.

Когда короткая линия EMA пересекает длинную линию EMA, создается сигнал покупки; когда короткая линия EMA пересекает длинную линию EMA, создается сигнал продажи. Эта стратегия одновременно устанавливает порог роста, открывая позиции только тогда, когда рост превышает порог, и закрывая позиции только тогда, когда падение превышает порог.

В частности, условие покупки - короткая линия EMA выше, чем длинная линия EMA, и рост цен на акции превышает установленную положительную отметку; условие ликвидации - короткая линия EMA ниже, чем длинная линия EMA, и рост цен на акции ниже установленной отрицательной отметки.

Стратегические преимущества

  • Относительно простой и надежный метод, использующий теорию гибких винтов с двойной равной линией EMA
  • Увеличение пороговой настройки роста, чтобы избежать ошибочных сделок при слабом росте
  • Строго контролируемая доля максимальных потерь
  • Гибко адаптируемые параметры средней линии EMA для различных циклов

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

  • EMA имеет отставание и может пропустить поворот цены
  • Уровень пересечения имеет определенную задержку, которая может привести к потере оптимального момента открытия позиции
  • Оптимизация параметров зависимости, неправильная настройка параметров может привести к частоте или недостаточному сигналу

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

  • Оптимизация в сочетании с другими показателями, такими как MACD, KD и т. Д., для повышения точности сигнала
  • Добавление стратегий по устранению убытков, таких как отслеживание убытков, чтобы обеспечить максимальную прибыль
  • Оптимизация параметров цикла EMA, установка оптимальных параметров для разных сортов
  • Оптимизация динамической настройки параметров в сочетании с методами реального времени и машинного обучения

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

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

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

//@version=3
strategy(title="ema(ema10-21)", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 15000, commission_type = strategy.commission.percent, commission_value = 0.2)

useTimeLimit    = input(defval = false, title = "Use Start Time Limiter?")
startYear       = input(defval = 2016, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

startTimeOk() => true

lenght0 = input(10)
lenght1 = input(21)

source = close

EmaShort = ema(ema(source, lenght0), lenght0)
EmaLong = ema(ema(source, lenght1),lenght1)
plot(EmaShort, color=red)
plot(EmaLong, color=purple)

growth = ((EmaShort-EmaLong)*100)/((EmaShort+EmaLong)/2)
thresholdUp = input(defval=0.05, title="Threshold Up", type=float, step=0.01)
thresholdDown = input(defval=-0.165, title="Threshold Down", type=float, step=0.001)

if( startTimeOk() )
    buy_condition = EmaShort > EmaLong and growth > thresholdUp
    buy_exit_condition = EmaShort < EmaLong and growth < thresholdDown
    strategy.entry("buy", strategy.long, comment="buy", when=buy_condition)
    strategy.close(id='buy', when=buy_exit_condition)