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

Автор:Чао Чжан, Дата: 2023-11-21 11:41:40
Тэги:

img

Обзор

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

Принципы

Стратегия в основном применяет теорию "золотого креста" и "смертного креста" двойных линий EMA. Двойные линии EMA состоят из длинной EMA и короткой EMA. Краткий параметр EMA установлен на 10 дней, а длинный параметр EMA установлен на 21 день.

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

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

Преимущества

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

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

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

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

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

Резюме

Общая стратегия относительно проста и надежна, используя двойные перекрестки 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)

Больше