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