Estratégia de negociação de curto prazo do Bitcoin baseada no índice de força real

Autora:ChaoZhang, Data: 2023-10-07 15:12:08
Tags:

Resumo

Esta estratégia identifica as tendências do mercado de bitcoin através do cálculo do True Strength Index (TSI) e entra em posições longas / curtas filtradas pelo indicador RSI para implementar a negociação algorítmica de bitcoin.

Estratégia lógica

O núcleo desta estratégia é o Índice de Verdadeira Força (TSI). O TSI mede a magnitude absoluta e a direção das mudanças de preço, suavizando duas vezes a mudança percentual de preço, identificando assim a força absoluta dos movimentos de preços para cima e para baixo.

  1. Calcular a variação percentual do preço Pc
  2. Pc duplo suave usando EMA de longo prazo e EMA de curto prazo para gerar double_smoothed_pc
  3. Double suave o valor absoluto de Pc para gerar double_smoothed_abs_pc
  4. O valor da ETI é igual a double_smoothed_pc dividido por double_smoothed_abs_pc multiplicado por 100

Quando a TSI cruza sua linha de sinal tsi2, um sinal longo é gerado. Quando a TSI cruza abaixo de tsi2, um sinal curto é gerado. Além disso, a estratégia filtra os sinais TSI com RSI - tomando apenas sinais longos quando o RSI é superior a 50 e sinais curtos quando o RSI é inferior a 50, para evitar alguns sinais falsos.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. A TSI pode detectar a força absoluta e a direcção dos movimentos de preços e é sensível na captação das tendências.
  2. A dupla EMA suaviza a taxa de variação de preços e é resistente ao ruído do mercado e aos picos.
  3. O filtro RSI evita ainda mais trocas erradas devido ao ruído.
  4. A negociação a curto prazo permite captar oportunidades temporárias no mercado.
  5. A estratégia tem um grande espaço de ajuste de parâmetros para otimização, como períodos EMA, parâmetros RSI etc.

Análise de riscos

Os riscos desta estratégia incluem:

  1. Como indicador de tendência, a TSI apresenta uma emissão atrasada e pode não atingir os pontos de inversão dos preços.
  2. A condição do filtro do RSI é muito rigorosa e pode perder algumas oportunidades de negociação.
  3. O filtro EMA duplo pode também filtrar alguns sinais válidos.
  4. A alta frequência de negociação de negociação a curto prazo introduz custos de negociação e riscos de deslizamento mais elevados.

A emissão atrasada e o efeito de filtro podem ser reduzidos relaxando as regras de filtragem do RSI e reduzindo os períodos de EMA.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Optimizar os parâmetros TSI e RSI para encontrar a melhor combinação.

  2. Introduzir mais indicadores técnicos para construir um modelo multifatorial. MA, KD etc. podem ser adicionados para tirar partido de cada indicador.

  3. Otimizar as regras de entrada para evitar longos em tendência de queda e curtos em tendência de alta.

  4. Otimizar as estratégias de stop loss como stop loss de trailing, stop loss baseado no tempo, stop loss de breakout, etc.

  5. Os indicadores de volatilidade podem ajudar a determinar pontos de saída adequados.

  6. Otimizar produtos de negociação, sessões de negociação para se concentrar nos mais eficazes.

Conclusão

Esta estratégia identifica as tendências de curto prazo do bitcoin com o True Strength Index e filtra os sinais com o RSI para negociação de bitcoin algorítmica.


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


// strategy("True Strength Indicator BTCUSD 15p", shorttitle="TSI BTCUSD 15p",initial_capital=1000, commission_value=0.15, commission_type =strategy.commission.percent, default_qty_value=100 , overlay = false, pyramiding=10, default_qty_type=strategy.percent_of_equity)

//BASED ON True Strength Indicator MTF
resCustom = input(title="Timeframe",  defval="15" )
long = input(title="Long Length",  defval=25)
short = input(title="Short Length",  defval=13)
signal = input(title="Signal Length",  defval=13)
price = request.security(syminfo.tickerid,resCustom,close)


double_smooth(src, long, short) =>
    fist_smooth = ta.ema(src, long)
    ta.ema(fist_smooth, short)
pc = ta.change(price)
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(math.abs(pc), long, short)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
tsi2=ta.ema(tsi_value, signal)
plot(tsi_value, color=color.lime,linewidth=2)
plot(tsi2, color=color.red,linewidth=2)




rsiserie = ta.rsi(price,7)
cciserie = ta.cci(price,14)
stochserie = ta.stoch(price,14,3,3)

plot(rsiserie,color=color.purple)



hline(30, title="Zero")
hline(50, title="Zero",linestyle=hline.style_solid, linewidth=2)
hline(70, title="Zero")

buy = ta.crossover(tsi_value, tsi2) //and rsiserie[1]<25 //and cciserie<-100 and stochserie<20
sell = ta.crossunder(tsi_value, tsi2) //and rsiserie[1]>85 //and cciserie>100 and stochserie>80


alertcondition(buy, title='TSI system', message='Buy signal at!' )
alertcondition(sell, title='TSI system', message='Sell signal at!' )

strategy.entry("BUY", strategy.long, 1, when = buy)
strategy.entry("SELL", strategy.short, 1, when = sell ) 

greentsi =tsi_value
redtsi = tsi2

bgcolor( greentsi>redtsi and rsiserie > 50 ? color.lime : na, transp=90)
bgcolor( greentsi<redtsi and rsiserie < 50 ? color.red : na, transp=90)

yellow1= redtsi > greentsi and rsiserie > 50 
yellow2 = redtsi < greentsi and rsiserie < 50 
bgcolor( yellow1 ? yellow : na, transp=80)
bgcolor( yellow2  ? yellow : na, transp=50)

bgcolor( yellow1 and yellow1[1] ? yellow : na, transp=70)
bgcolor( yellow2  and yellow2[2] ? yellow : na, transp=70)

bgcolor( rsiserie > 70 ? color.lime : na, transp=60)
bgcolor( rsiserie < 30  ? color.red : na, transp=60)


Mais.