Эта стратегия генерирует длинные или короткие сигналы входа, когда быстрое 30-дневное простое скользящее среднее и медленное 33-дневное простое скользящее среднее цены на акции пересекаются. Она выходит из позиции сразу же, когда происходит противоположный сигнал. Это может эффективно улавливать изменение тенденций.
Основой этой стратегии является расчет быстрого 30-дневного MA и медленного 33-дневного MA. Быстрая линия может быстрее реагировать на изменения цен, в то время как медленная линия имеет лучший эффект фильтрации. Когда быстрая линия проходит через медленную линию вверх, генерируется сигнал покупки. Это указывает на то, что цена начинает расти, и быстрая линия отреагировала, в то время как медленная линия все еще отстает. Когда быстрая линия проходит через медленную линию вниз, генерируется сигнал продажи. Это указывает на то, что цена начинает снижаться, в то время как быстрая линия отреагировала, но медленная линия все еще отстает.
Благодаря такой быстрой и медленной конструкции кроссовера MA, он может генерировать торговые сигналы, когда начинается новый тренд, и выходить на противоположные сигналы, эффективно захватывая средне- и долгосрочные ценовые тенденции.
Стратегия имеет следующие преимущества:
Эта стратегия также сопряжена с некоторыми рисками:
Такие методы, как оптимизация параметров, установка уровня стоп-лосса, торговля только тогда, когда тенденция ясна и т. Д. могут быть использованы для контроля и снижения этих рисков.
Стратегия может быть оптимизирована в следующих аспектах:
Благодаря тестированию и оптимизации правила стратегии могут постоянно совершенствоваться, чтобы получить более надежные торговые сигналы в различных рыночных условиях.
В целом, эта стратегия двойного пересечения 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)