Estratégia de negociação de taxa de variação

Autora:ChaoZhang, Data: 28 de setembro de 2023
Tags:

Resumo

Esta estratégia calcula a taxa de mudança ao longo do tempo para determinar os sinais de compra/venda.

Estratégia lógica

A estratégia baseia-se principalmente nos seguintes indicadores:

  1. Média móvel simples rápida (default 14 dias): para avaliar a tendência a curto prazo
  2. Média móvel simples lenta (default 100 dias): para avaliar a tendência a longo prazo
  3. Média móvel simples de referência (default 30 dias): para determinar a direção geral
  4. Taxa de variação: calculada com base no preço mais alto/mais baixo durante o período de observação (default 12 bars) para julgar a magnitude da flutuação dos preços

Regras específicas de entrada:

  1. Preço abaixo da SMA de referência
  2. ROC acima do limiar de ROC baixo pré-definido (default 2,3%)
  3. Aumento rápido da SMA e queda lenta da SMA, indicando potencial cruzamento

Regras específicas de saída:

  1. Preço acima da SMA de referência
  2. ROC acima do limiar ROC elevado pré-definido (default 4,7%)
  3. 3 barras ascendentes consecutivas
  4. Lucro corrente > 0
  5. SMA rápida acima da SMA lenta

O valor da posição é a percentagem (default 96%) do capital próprio total para alavancagem.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. O uso de ROC para detectar oscilações permite capturar movimentos de alta/baixa para maiores retornos.

  2. A combinação de SMA rápida/lenta ajuda a identificar com mais precisão os pontos baixos/altos.

  3. A SMA de referência fornece uma direção geral para evitar a distração por ruídos de curta duração.

  4. O trailing stop loss bloqueia os lucros e reduz o risco de queda.

  5. A alavancagem do dimensionamento da posição amplifica os lucros.

Em geral, a estratégia utiliza ROC, SMA e outras ferramentas de forma eficaz para capitalizar as oscilações de preços.

Análise de riscos

A estratégia apresenta igualmente os seguintes riscos:

  1. Os parâmetros incorretos de ROC e SMA podem causar sinais perdidos ou maus negócios.

  2. O tamanho excessivo da posição aumenta o risco.

  3. O percentual de stop loss pode ser ajustado.

  4. Tendência a flutuações em mercados variados, deve incorporar filtros de tendências e gestão de riscos.

  5. A robustez deve ser verificada através de negociações em tempo real entre mercados.

Os riscos podem ser geridos através da otimização de parâmetros, dimensionamento de posições, ajustes de stop loss, testes de robustez, etc.

Orientações de otimização

A estratégia pode ser melhorada nos seguintes aspectos:

  1. Adicionar outros indicadores técnicos como volatilidade, volume para melhorar a precisão do sinal.

  2. Otimizar o número de transacções reduzindo a frequência de negociação para minimizar os impactos da serra.

  3. Incorporar técnicas de ruptura em torno dos níveis-chave de preços.

  4. Usar aprendizagem de máquina para otimizar automaticamente parâmetros.

  5. Teste a robustez em diferentes mercados e prazos.

  6. Ajustar parâmetros especializados para diferentes produtos como ações, forex etc.

  7. Refinar continuamente os sinais e os controlos de risco com base nos resultados em tempo real.

Resumo

Esta estratégia identifica oportunidades de negociação em torno de oscilações de curto prazo usando análise de ROC e SMA. Ajuda a capitalizar os movimentos rápidos, mas também requer controles de risco adequados. Parâmetros de ajuste fino, dimensionamento de posição, stop loss e teste de robustez podem melhorar sua estabilidade e adaptabilidade. A estratégia serve como um modelo de referência para negociação quantificada, mas precisa de personalização para diferentes mercados.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// Author: Sonny Parlin (highschool dropout)
// Best if run on 5m timeframe
strategy(shorttitle="ROC+Strategy", title="Rate of Change Strategy",
                                      overlay=true,  currency=currency.USD,
                                      initial_capital=10000)

// Inputs and variables
ss = input(14, minval=10, maxval=50, title="SMA Fast (days)")
ff = input(100, minval=55, maxval=200, title="SMA Slow (days)")
ref = input(30, minval=20, maxval=50, title="SMA Reference (days)")
lowOffset = input(0.023, "ROC Low (%)", minval=0, step=0.01)
highOffset = input(0.047, "ROC High (%)", minval=0, step=0.01)
orderStake = input(0.96, "Order Stake (%)", minval=0, step=0.01)
lookback = input(12, "Lookback Candles", minval=1, step=1) 

// SMA
smaFast = sma(close, ss)
smaSlow = sma(close, ff)
smaRef = sma(close, ref)
ROC = (max(close[lookback],close) - min(close[lookback],close)) / max(close[lookback],close)

// Set up SMA plot but don't show by default
plot(smaFast, "smaFast", color=#00ff00, display = 0)
plot(smaSlow, "smaSlow", color=#ff0000, display = 0)
plot(smaRef, "smaRef", color=#ffffff, display = 0)

// The buy stratey:
// Guard that the low is under our SMA Reference line 
// Guard that the rate of change over the lookback period is greater than our 
// ROC lowOffset %, default is 0.023. (low < smaRef) and (ROC > lowOffset)
// SMA fast is on the rise and SMA slow is falling and they are very likely
// to cross. (rising(smaFast,1)) and (falling(smaSlow, 1)) 
enterLong = (low < smaRef) and (ROC > lowOffset) and (rising(smaFast,1)) and (falling(smaSlow,1)) 

// The sell Strategy:
// Guard that close is higher than our SMA reference line and that the rate of 
// change over the lookback period is greater than our highOffset %, default
// is 0.047. (close > smaRef) and (ROC > highOffset)
// Guard that close has risen by 3 candles in a row (rising(close,3)) 
// Guard that we currently have profit (strategy.openprofit > 0)
// Guard that SMA fast is higher than smaSlow (smaFast > smaSlow)
// If it keeps going up past our close position the trailing stoploss will kick in!
enterShort = (close > smaRef) and (ROC > highOffset) and (rising(close,3)) and (strategy.openprofit > 0) and (smaFast > smaSlow)

// Order size is based on total equity
// Example 1:
// startingEquity = 2000
// close = 47434.93
// orderStake = 0.45
// (2,000 × orderStake) / close = orderSize = 0.0189733599 = approx $900

// Example 2:
// startingEquity = 2000
// close = 1.272
// orderStake = 0.45
// (startingEquity × orderStake) / close = orderSize = 707.5471698113 = approx $900
orderSize = (strategy.equity * orderStake) / close

// Trailing Stoploss
// I'm using 2.62 as my default value, play with this for different results.
longTrailPerc = input(title="Trailing Stoploss (%)",
     type=input.float, minval=0.0, step=0.1, defval=3.62) * 0.01
     
longStopPrice = 0.0

longStopPrice := if (strategy.position_size > 0)
    stopValue = close * (1 - longTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0

if (enterLong)
    strategy.entry("Open Long Position", strategy.long, orderSize, when=strategy.position_size <= 0)
    
if (enterShort)
    strategy.exit(id="Close Long Position", stop=longStopPrice)


//plot(strategy.equity)

Mais.