Стратегия торговли с возвратом скользящей средней


Дата создания: 2023-10-25 10:58:02 Последнее изменение: 2023-10-25 10:58:02
Копировать: 0 Количество просмотров: 1191
1
Подписаться
1617
Подписчики

Стратегия торговли с возвратом скользящей средней

Обзор

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

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

Сначала стратегия рассчитывает линейную регрессионную линию для n-дневных цен на акции и m-дневную среднюю линию. Линейная регрессионная линия отражает долгосрочные статистические тенденции цен на акции, а средняя линия отражает краткосрочные движения цен на акции.

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

В частности, стратегия оценивает торговые сигналы следующими шагами:

  1. Вычислить n-дневную линейную регрессию цены акций LRLine

  2. Вычислить m-дневную простую скользящую среднюю LRMA с линейной регрессией

  3. m-дневный индекс для расчета цены акций

  4. При использовании LRMA на эме создается сигнал longEntry

  5. Когда Ema проходит LRMA, генерируется сигнал longExit

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

  7. Выполнение сделок покупки и продажи по сигналу

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

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

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

Стратегический риск

  • Частые пересечения средних и регрессивных линий при резких колебаниях цен на акции могут привести к ошибочным сигналам
  • Недостаточное определение рынка может привести к ошибочному выбору времени покупки или продажи.
  • Неправильные параметры могут повлиять на эффективность стратегии
  • Частые транзакции с высокими затратами

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

Оптимизация стратегии

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

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

  2. Оптимизация регрессионной линии: адаптация цикла вычисления регрессионной линии для поиска циклических параметров, которые наилучшим образом отражают долгосрочные тенденции акции.

  3. Оптимизация масс-дискриминации: тестирование различных масс-дискриминационных индикаторов для поиска масс-дискриминационных сигналов, наиболее подходящих для стратегии.

  4. Параметровая оптимизация: с помощью различных комбинаций параметров для поиска оптимальной параметровой конфигурации.

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

  6. Оптимизация затрат на транзакции: в зависимости от различных моделей комиссионных сделок, частота транзакций должна быть скорректирована для снижения затрат на транзакции.

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

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

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

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © lazy_capitalist

//@version=5
strategy('Linear Regression MA', overlay=true, initial_capital=10000)
datesGroup = "Date Info"
startMonth = input.int(defval = 1,    title = "Start Month",  minval = 1, maxval = 12,  group=datesGroup)
startDay   = input.int(defval = 1,    title = "Start Day",    minval = 1, maxval = 31,  group=datesGroup)
startYear  = input.int(defval = 2022, title = "Start Year",   minval = 1970,            group=datesGroup)

averagesGroup = "Averages"
lrLineInput     = input.int(title="Linear Regression Line",   defval=55, minval = 1, group=averagesGroup)
lrMAInput       = input.int(title="Linear Regression MA",     defval=55, minval = 1, group=averagesGroup)
emaInput        = input.int(title="EMA Length",               defval=55, minval = 1, group=averagesGroup)


tradesGroup = "Execute Trades"
executeLongInput    = input.bool(title="Execute Long Trades",       defval=true)
executeShortInput   = input.bool(title="Execute Short Trades",      defval=true)
executeStopLoss     = input.bool(title="Execute Stop Loss",         defval=true)

fourHrSMAExpr       = ta.sma(close, 200)
fourHrMA            = request.security(symbol=syminfo.tickerid, timeframe="240", expression=fourHrSMAExpr)

bullish             = close > fourHrMA ? true : false


maxProfitInput              = input.float(  title="Max Profit (%)",         defval=10.0,    minval=0.0)   * 0.01
stopLossPercentageInput     = input.float(  title="Stop Loss (%)",          defval=1.75,    minval=0.0)   * 0.01

start       = timestamp(startYear, startMonth, startDay, 00, 00)            // backtest start  window
window()    => time >= start ? true : false                              // create function "within window of time"
showDate    = input(defval = true, title = "Show Date Range")

lrLine = ta.linreg(close, lrLineInput, 0)
lrMA   = ta.sma(lrLine, lrMAInput)
ema     = ta.ema(close, emaInput)

longEntry   = ema   < lrMA
longExit    = lrMA  < ema

shortEntry  = lrMA  < ema
shortExit   = ema   < lrMA


maxProfitLong   = strategy.opentrades.entry_price(0) * (1 + maxProfitInput)
maxProfitShort  = strategy.opentrades.entry_price(0) * (1 - maxProfitInput)

stopLossPriceShort  = strategy.position_avg_price * (1 + stopLossPercentageInput)
stopLossPriceLong   = strategy.position_avg_price * (1 - stopLossPercentageInput)

if(executeLongInput and bullish)
    strategy.entry( id="long_entry", direction=strategy.long,   when=longEntry and window(),    qty=10,  comment="long_entry")
    strategy.close( id="long_entry", when=longExit,     comment="long_exit")
    // strategy.close( id="long_entry", when=maxProfitLong <= close, comment="long_exit_mp")
    
if(executeShortInput and not bullish)
    strategy.entry( id="short_entry", direction=strategy.short,   when=shortEntry and window(),    qty=10,  comment="short_entry")
    strategy.close( id="short_entry", when=shortExit,     comment="short_exit")
    // strategy.close( id="short_entry", when=maxProfitShort <= close, comment="short_exit_mp")

if(strategy.position_size > 0 and executeStopLoss)
    strategy.exit(  id="long_entry",        stop=stopLossPriceLong,             comment="exit_long_SL")
    strategy.exit(  id="short_entry",       stop=stopLossPriceShort,            comment="exit_short_SL")
    
// plot(series=lrLine,     color=color.green)
plot(series=lrMA,       color=color.red)
plot(series=ema,        color=color.blue)