Este artigo descreve em detalhes uma estratégia de negociação quantitativa que utiliza a regressão de média e a técnica de acompanhamento de tendências. A estratégia visa a negociação inversa em condições de tendência e a negociação simultânea de tendências de seguimento.
Princípios estratégicos
A estratégia gera sinais de negociação principalmente através de médias móveis simples e indicadores RSI:
Quando o preço está abaixo da média móvel de 200 ciclos, é considerado que está em fase descendente;
Quando o RSI está abaixo de 20, execute uma retracção do valor médio em contraposição;
Quando o preço está acima da média móvel de 200 ciclos, é considerado que está em fase de alta;
Quando os preços atravessam a média móvel, execute uma operação de acompanhamento de tendência em movimento.
A condição de parada é o RSI acima de 80 ou o preço abaixo da média móvel por uma certa amplitude.
Posições de negociação com retorno de valor médio e seguimento de tendência podem ser configuradas separadamente.
A estratégia utiliza a regressão de média e a técnica de acompanhamento de tendências para realizar as operações apropriadas em diferentes fases.
A vantagem estratégica
A estratégia tem as seguintes vantagens:
A combinação de duas técnicas diferentes pode aumentar a adaptabilidade da estratégia.
O mercado de ações é um mercado de ações, onde as oportunidades de negociação podem ser encontradas em mercados de tendência e de turbulência.
O risco pode ser controlado em diferentes modalidades através de ajustes de posição.
A configuração dos parâmetros é simples e fácil de implementar.
C. Riscos potenciais
Mas a estratégia também traz os seguintes riscos:
Indicadores como as médias móveis e o RSI são vulneráveis a falsas rupturas;
A transição entre os dois tipos de transação pode estar atrasada;
Os benefícios a longo prazo são obtidos através de uma certa retirada.
Quatro conteúdos, resumo
Este artigo detalha uma estratégia de negociação quantitativa que utiliza a regressão do valor médio e a tecnologia de acompanhamento de tendências. A estratégia pode ser negociada em diferentes fases do mercado, aumentando a adaptabilidade. Mas também precisa evitar o risco de falhas de indicadores e atrasos de mudança de modelo.
/*backtest
start: 2022-09-07 00:00:00
end: 2023-04-05 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/
// © I11L
//@version=5
strategy("Mean Reversion and Trendfollowing", overlay=true, pyramiding=1, default_qty_value=100000, initial_capital=100000, default_qty_type=strategy.cash, process_orders_on_close=false, calc_on_every_tick=false)
// Input for the starting date
start_date = input(timestamp("1 Feb 2000 12:00"), title="Starting Date")
enableMeanReversion = input.bool(true)
enableTrendfollowing = input.bool(true)
trendPositionFactor = input.float(1)
meanReversionPositionFactor = input.float(0.5)
// Convert the input string to a timestamp
start_ts = timestamp(year(start_date), month(start_date), dayofmonth(start_date), 0, 0)
// Check if the current bar's time is greater than or equal to the start timestamp
start_condition = time >= start_ts
var tradeOrigin = ""
sma200 = ta.sma(close,200)
rsi2 = ta.rsi(close,2)
isMeanReversionMode = close < sma200 or not(enableTrendfollowing)
isTrendfollowingMode = close > sma200 or not(enableMeanReversion)
isRsiBuy = rsi2 < 20 and enableMeanReversion
isRsiClose = rsi2 > 80 and enableMeanReversion
isSmaBuy = close > sma200 and enableTrendfollowing
isSmaClose = close < sma200 * 0.95 and enableTrendfollowing
isBuy = (isMeanReversionMode and isRsiBuy) or (isTrendfollowingMode and isSmaBuy)
positionSizeFactor = isSmaBuy ? trendPositionFactor : meanReversionPositionFactor
// Only execute the strategy after the starting date
if (start_condition)
if (isBuy and strategy.opentrades == 0)
tradeOrigin := isSmaBuy ? "SMA" : "RSI"
strategy.entry("My Long Entry Id", strategy.long, qty=(strategy.equity / close) * positionSizeFactor, comment=str.tostring(positionSizeFactor))
isClose = tradeOrigin == "SMA" ? isSmaClose : isRsiClose
if (isClose)
strategy.exit("Exit", limit = close)
plot(sma200)
plot(sma200 * 0.95, color=color.orange)