O recurso está a ser carregado... Carregamento...

Estratégia quantitativa que combina a reversão da média e a tendência

Autora:ChaoZhang, Data: 2023-09-14 20:45:20
Tags:

Este artigo explica em detalhes uma estratégia de negociação quantitativa que combina a reversão média e as técnicas de tendência.

I. Lógica da estratégia

A estratégia usa principalmente a média móvel simples e o indicador RSI para gerar sinais de negociação:

  1. Quando o preço está abaixo da SMA de 200 períodos, julga o mercado atual como tendência de queda.

  2. Quando o RSI está abaixo de 20, é preciso uma reversão da média da tendência.

  3. Quando o preço está acima da SMA de 200 períodos, julga o mercado atual como tendência de alta.

  4. Quando o preço cruza acima da SMA, é preciso seguir a tendência.

  5. As saídas são desencadeadas quando o RSI excede 80 ou o preço cai abaixo da SMA em uma certa porcentagem.

  6. O dimensionamento das posições para a reversão média e para a tendência pode ser ajustado separadamente.

A estratégia combina técnicas de reversão média e de tendência e aplica-as em diferentes fases do mercado.

II. Vantagens da Estratégia

As principais vantagens são:

  1. A combinação de duas técnicas melhora a adaptabilidade da estratégia.

  2. Pode encontrar oportunidades de negociação em tendências e mercados variados.

  3. Os riscos podem ser controlados ajustando o tamanho das posições.

  4. Configurações de parâmetros simples facilitam a sua implementação.

III. Riscos potenciais

No entanto, os riscos são:

  1. Indicadores como SMA e RSI são suscetíveis a falhas.

  2. A comutação entre dois modos pode ter atrasos.

  3. Certas reduções têm de ser suportadas para obter ganhos a longo prazo.

IV. Resumo

Em resumo, este artigo explicou uma estratégia quantitativa utilizando técnicas de reversão média e tendência. Pode negociar em diferentes estágios do mercado para melhorar a adaptabilidade. Mas riscos como falha do indicador e mudança de modo atrasada precisam ser gerenciados.


/*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)

Mais.