Стратегия торговли линейной регрессионной скользящей средней генерирует сигналы купли-продажи на основе перекресток между линейной регрессионной линией и скользящей средней цены акций.
Стратегия сначала рассчитывает линейную регрессию на n дней и скользящую среднюю стоимость акций на м дней.
Когда скользящая средняя пересекает линию регрессии, она сигнализирует о усилении импульса вверх и генерирует сигнал покупки.
В частности, стратегия следует следующим шагам для определения торговых сигналов:
Вычислить линейную регрессию цен на n дней
Вычислить простую скользящую среднюю lrLine, называемую lrMA
Вычислить экспоненциальную скользящую среднюю цены за m дней, называемую Ema
Когда EMA пересекает IrMA, генерируется сигнал покупки longEntry
Когда EMA пересекает уровень ниже lrMA, генерируется сигнал продажи longExit
Подумайте только о покупке сигналов, когда рынок быстрый
Исполнение сделок на основе сигналов
Используя перекресток между регрессией и скользящими средними для определения входов, стратегия может эффективно отфильтровывать ложные перерывы и выявлять обратные действия для покупки низких и продажи высоких.
Параметры должны быть настроены для увеличения периодов скользящей средней и регрессионной линии и уменьшения частоты торговли. Для контроля рисков должны быть реализованы разумные стоп-потери. Для повышения точности можно улучшить рыночные фильтры.
Стратегия может быть оптимизирована в нескольких аспектах:
Оптимизация скользящей средней путем тестирования различных типов МА
Оптимизация регрессионной линии путем корректировки периода расчета
Оптимизация фильтра рынка путем тестирования различных показателей
Оптимизация параметров посредством строгого обратного тестирования
Оптимизация стоп-лосса путем тестирования различных логик стоп-лосса
Оптимизация затрат путем корректировки частоты торговли на основе затрат
Эти оптимизации могут еще больше улучшить стабильность и рентабельность стратегии.
Стратегия линейной регрессии MA объединяет сильные стороны анализа тенденций и линейной регрессии для эффективного выявления обратного движения и покупки низких продаж высоких. Простая стратегия подходит для выбора акций в среднесрочном и долгосрочном периодах. С настройкой параметров и контролем рисков стратегия может достичь еще большей стабильности. Она обеспечивает жизнеспособную техническую торговую основу для анализа рынка.
/*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)