Com base na estratégia de momentum relativo


Data de criação: 2024-01-29 08:38:04 última modificação: 2024-01-29 08:38:04
cópia: 0 Cliques: 722
1
focar em
1617
Seguidores

Com base na estratégia de momentum relativo

Visão geral

A estratégia de dinâmica relativa usa a dinâmica das ações e índices para avaliar a força das ações em relação ao mercado, comprando quando a dinâmica das ações é maior do que a do mercado e vendendo quando a dinâmica das ações é menor do que a do mercado, para capturar o pico de crescimento das ações.

Princípio da estratégia

A estratégia baseia-se na análise da força e fraqueza das ações em relação ao mercado, com a seguinte lógica:

  1. Calcular a taxa de retorno de uma ação por um determinado período de tempo como ação dinâmica
  2. O índice calcula a taxa de retorno no mesmo período de tempo como a dinâmica do índice
  3. Moving average smoothing para calcular o movimento de uma ação e o movimento do índice
  4. Quando a média móvel da movimentação do índice é colocada sobre a média móvel da movimentação da quantidade de ações, considera-se que a movimentação da ação individual é maior do que a do índice como um todo, tornando-se um sinal de compra
  5. Quando a média móvel da movimentação do índice é percorrida abaixo da média móvel da movimentação da quantidade de ações, considera-se que a movimentação individual é mais fraca do que a do índice como um todo, tornando-se um sinal de venda

Com esta lógica, podemos comprar uma ação em um período de grande crescimento e vendê-la em tempo hábil quando a sua força de crescimento diminui, bloqueando os lucros excedentários durante o seu pico.

Análise de vantagens

A estratégia de dinâmica relativa tem as seguintes vantagens:

  1. Pode capturar os picos de crescimento das ações de forma dinâmica, sem se preocupar com a situação específica, desde que as ações cresçam mais rápido do que o mercado em geral
  2. Processamento de médias móveis para filtrar a interferência de flutuações de curto prazo, aumentando a confiabilidade do sinal
  3. Termos de compra e venda simples e diretos, fáceis de entender
  4. Parâmetros de tempo de cálculo da dinâmica relativa, estratégias de otimização

Análise de Riscos

A estratégia de dinâmica relativa também tem riscos:

  1. A correção de retorno pode ocorrer após o pico de crescimento individual, com risco de insuficiência de contenção
  2. O indicador de dinâmica relativa pode produzir sinais errados, identificando picos de crescimento que não são picos reais
  3. O que é um Stop Loss?

Esses riscos podem ser controlados por meio de métodos como stop loss racional e parâmetros de ajuste apropriado.

Direção de otimização

A estratégia de dinâmica relativa pode ser otimizada em vários aspectos:

  1. Teste diferentes parâmetros de tempo de cálculo de força para encontrar o melhor parâmetro
  2. Teste diferentes tipos e comprimentos de médias móveis para encontrar o parâmetro ideal
  3. Adição de filtros de volume de transação para evitar falsas rupturas por falta de capacidade
  4. Tempo de confirmação de compra em combinação com outros indicadores técnicos

Resumir

A estratégia de dinâmica relativa pode efetivamente obter ganhos extras ao capturar o pico de crescimento de um estoque relativamente grande. A estratégia tem a vantagem de ter uma lógica de compra e venda simples e clara, de ser fácil de operar e de obter melhores resultados com otimização de parâmetros e controle de risco.

Código-fonte da estratégia
/*backtest
start: 2024-01-21 00:00:00
end: 2024-01-28 00:00:00
period: 15m
basePeriod: 5m
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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("Relative Returns Strategy", overlay=false, initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

index_ticker=input("BTC_USDT:swap")
Loopback = input(40, step=20)
useStopAndIndexReturns = input(true)
useStopAndIndexReturnsMa = input(true)

useDifference = not useStopAndIndexReturns

MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
MALength = input(10, minval=10,step=10)

i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Backtest Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "Backtest End Time", type = input.time)
inDateRange = true

f_secureSecurity(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on)
f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma

index = f_secureSecurity(index_ticker, '1D', close, 0)
stock_return = (close - close[Loopback])*100/close
index_return = (index - index[Loopback])*100/index

stock_return_ma = f_getMovingAverage(stock_return, MAType, MALength)
index_return_ma = f_getMovingAverage(index_return, MAType, MALength)
relativeReturns = stock_return - index_return
relativeReturns_ma = f_getMovingAverage(relativeReturns, MAType, MALength)

plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma : stock_return : na, title="StockReturn", color=color.green, linewidth=1)
plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? index_return_ma : index_return : na, title="IndexReturn", color=color.red, linewidth=1)

plot(useDifference?relativeReturns:na, title="Relative-Returns", color=color.blue, linewidth=1)
plot(useDifference?relativeReturns_ma:na, title="MA", color=color.red, linewidth=1)

buyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma > index_return_ma : stock_return > index_return : relativeReturns > relativeReturns_ma)
closeBuyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma < index_return_ma : stock_return < index_return : relativeReturns < relativeReturns_ma)
strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca")
strategy.close("Buy", when=closeBuyCondition)