Стратегия двойного перемещающегося среднего кроссовера

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

img

Обзор

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

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

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

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

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

Стратегия имеет следующие преимущества:

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

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

Эта стратегия также сопряжена с некоторыми рисками:

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

Такие методы, как оптимизация параметров, установка уровня стоп-лосса, торговля только тогда, когда тенденция ясна и т. Д. могут быть использованы для контроля и снижения этих рисков.

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

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

  1. Оптимизировать периоды MA и типы перекрестного использования для поиска оптимальной комбинации параметров
  2. Добавление других фильтров технических индикаторов, например, объем торговли, MACD и т.д., для уменьшения ложных сигналов
  3. Добавить адаптивный механизм остановки потери вместо просто противоположной сигнальной остановки потери
  4. Набор параметров проектирования и правила остановки потерь для различных продуктов
  5. Включить методы машинного обучения для динамической настройки параметров

Благодаря тестированию и оптимизации правила стратегии могут постоянно совершенствоваться, чтобы получить более надежные торговые сигналы в различных рыночных условиях.

Резюме

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


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

//@version=3
//future strategy
//strategy(title = "es1!_1minute_hull", default_qty_type = strategy.fixed, initial_capital=250000,  overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2, calc_on_order_fills=false, calc_on_every_tick=false,pyramiding=0)
//strategy.risk.max_position_size(2)
//stock strategy
strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=1000000, overlay = false)//, calc_on_order_fills=true, calc_on_every_tick=true)
//forex strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true,initial_capital=250000, default_qty_type = strategy.percent_of_equity)
//crypto strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true, commission_type=strategy.commission.percent,commission_value=.005,default_qty_value=10000)
//strategy.risk.allow_entry_in(strategy.direction.long) // There will be no short entries, only exits from long.




testStartYear = 2010
testStartMonth = 1
testStartDay = 1
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)


testEndYear = 2039
testEndMonth = 1
testEndDay = 1
testPeriodEnd = timestamp(testEndYear,testEndMonth,testEndDay,0,0)


testPeriod() =>
    //true
    time >= testPeriodStart and time <= testPeriodEnd ? true : false

fast_length = 30
slow_length = 33

ema1 = 0.0
ema2 = 0.0

volumeSum1 = sum(volume, fast_length)
volumeSum2 = sum(volume, slow_length)

//ema1 := (((volumeSum1 - volume) * nz(ema1[1]) + volume * close) / volumeSum1)
ema1 :=  ema(close,fast_length)
//ema2 := (((volumeSum2 - volume) * nz(ema2[1]) + volume * close) / volumeSum2)
ema2 :=  ema(close,slow_length)



plot(ema1,color=#00ff00, linewidth=3)
plot(ema2, color=#ffff00, linewidth=3)

go_long = crossover(ema1,ema2)
go_short = crossunder(ema1,ema2)

if testPeriod()
    strategy.entry("long_ride", strategy.long, when=go_long)
    strategy.entry("short_ride", strategy.short,when=go_short)
    
        
    strategy.close("long_ride",when=go_short)
    strategy.close("short_ride",when=go_long)
    

Больше