
A estratégia de negociação de regressão de linha média determina os sinais de compra e venda através do cálculo da linha de regressão linear e do cruzamento da linha média do preço da ação. A estratégia combina a análise de regressão de linha média e de regressão linear, levando em conta a tendência do preço da ação e as características estatísticas, para determinar efetivamente o ponto de reversão do preço da ação e realizar baixos e altos.
A estratégia começa por calcular a linha de regressão linear para o preço de uma ação em n dias e a linha média diária em m dias. A linha de regressão linear reflete a tendência estatística de longo prazo do preço da ação e a linha média reflete o movimento de curto prazo do preço da ação.
Quando a linha de regresso linear atravessa a linha média, indica que o preço da ação aumentou, gerando um sinal de compra. Quando a linha de regresso linear atravessa a linha média, indica que o preço da ação diminuiu, gerando um sinal de venda.
A estratégia, especificamente, julga os sinais de negociação através das seguintes etapas:
Calcule a linha de regressão linear de n dias do preço da ação
Calcule a média móvel simples de m dias da linha de regressão linear LRMA
Índice m-dia de medias móveis para ações
Quando o ema usa o LRMA, gera um sinal de compra longEntry
Quando o ema atravessa o LRMA, gera um sinal de venda de longExit
Ao mesmo tempo, combinando com o julgamento do mercado de ações, só se deve considerar um sinal de compra quando o mercado de ações é um mercado de ações em alta.
Execução de transações de compra e venda com base em sinais
O cruzamento de linhas de média e de regressão permite determinar o momento de compra e venda, filtrar e capturar os pontos de inversão e comprar baixo e vender alto.
Ajuste de parâmetros a serem considerados, aumento apropriado dos parâmetros de média e de regressão, redução da frequência de negociação. Configure de forma razoável a estratégia de controle de risco de stop loss. Otimize as regras de julgamento de grandes apostas e aumente a precisão.
A estratégia pode ser melhorada em vários aspectos:
Optimização de indicadores de mediana: experimente diferentes tipos de mediana, como médias móveis ponderadas, para encontrar a melhor média para o estoque.
Otimização da linha de regressão: ajuste o ciclo de cálculo da linha de regressão, procurando o parâmetro de ciclo que melhor reflita a tendência de longo prazo da ação.
Optimização de tomada de decisão em grandes apostas: teste diferentes indicadores de tomada de decisão em grandes apostas para encontrar o sinal de tomada de decisão mais adequado para a estratégia.
Optimização de parâmetros: busca a melhor configuração de parâmetros através de diferentes combinações de parâmetros.
Otimização da estratégia de stop loss: teste diferentes métodos de stop loss e defina a melhor lógica de stop loss para controlar o risco.
Otimização de custos de transação: Adapte a frequência de transação para reduzir os custos de transação de acordo com os diferentes modelos de taxas de transação.
Otimizando os pontos acima, pode-se melhorar ainda mais a estabilidade e a taxa de retorno da estratégia.
Esta estratégia de negociação de regressão de linha média integra a análise de regressão de linha média e linear, que permite identificar efetivamente os pontos de reversão dos preços das ações e orientar os preços baixos e altos. A estratégia é mais simples e confiável e é adequada para a negociação de ações opcionais de linha média e longa.
/*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)