Estrategia de negociación a corto plazo de Bitcoin basada en el índice de fortaleza real

El autor:¿ Qué pasa?, Fecha: 2023-10-07 15:12:08
Las etiquetas:

Resumen general

Esta estrategia identifica las tendencias del mercado de bitcoin mediante el cálculo del índice de verdadera fortaleza (TSI) y entra en posiciones largas / cortas filtradas por el indicador RSI para implementar el comercio algorítmico de bitcoin.

Estrategia lógica

El núcleo de esta estrategia es el índice de fuerza verdadera (ITS). TSI mide la magnitud absoluta y la dirección de los cambios de precios al suavizar el doble del cambio de precio porcentual, identificando así la fuerza absoluta de los movimientos de precios hacia arriba y hacia abajo.

  1. Calcular el cambio de precio porcentual Pc
  2. Pc doble suave utilizando EMA a largo plazo y EMA a corto plazo para generar double_smoothed_pc
  3. Doble el valor absoluto de Pc para generar double_smoothed_abs_pc
  4. El valor de la ETI es igual a double_smoothed_pc dividido por double_smoothed_abs_pc multiplicado por 100

Cuando TSI cruza su línea de señal tsi2, se genera una señal larga. Cuando TSI cruza por debajo de tsi2, se genera una señal corta. Además, la estrategia filtra las señales TSI con RSI, tomando solo señales largas cuando RSI es superior a 50 y señales cortas cuando RSI es inferior a 50, para evitar algunas señales falsas.

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. La TSI puede detectar la fuerza absoluta y la dirección de los movimientos de precios y es sensible a las tendencias.
  2. La doble EMA suaviza la tasa de cambio de precios y es resistente al ruido del mercado y a los picos.
  3. El filtro RSI evita además operaciones incorrectas debido al ruido.
  4. El comercio a corto plazo permite aprovechar las oportunidades temporales del mercado.
  5. La estrategia tiene un gran espacio de ajuste de parámetros para la optimización, como períodos EMA, parámetros RSI, etc.

Análisis de riesgos

Los riesgos de esta estrategia incluyen:

  1. Como indicador de tendencia, la ETI tiene una emisión tardía y puede no alcanzar los puntos de reversión de precios.
  2. La condición del filtro RSI es demasiado estricta y puede perder algunas oportunidades comerciales.
  3. El doble filtro EMA también puede filtrar algunas señales válidas.
  4. La alta frecuencia de negociación de las operaciones a corto plazo introduce mayores costes de negociación y riesgos de deslizamiento.

La emisión y el efecto de filtro de retraso pueden reducirse relajando las reglas de filtro del RSI y acortando los períodos de EMA.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Optimizar los parámetros TSI y RSI para encontrar la mejor combinación.

  2. Introducir más indicadores técnicos para construir un modelo multifactorial.

  3. Optimice las reglas de entrada para evitar el largo en tendencia bajista y el corto en tendencia alcista.

  4. Optimice las estrategias de stop loss como las de stop loss de seguimiento, stop loss basado en el tiempo, breakout stop loss, etc.

  5. Optimice las reglas de salida para evitar salidas prematuras o tardías. Los indicadores de volatilidad pueden ayudar a determinar los puntos de salida adecuados.

  6. Optimice los productos comerciales, las sesiones comerciales para centrarse en los más efectivos.

Conclusión

Esta estrategia identifica las tendencias a corto plazo de bitcoin con True Strength Index y filtra las señales con RSI para el comercio algorítmico de bitcoin. Tiene la ventaja de capturar sensiblemente las tendencias y filtrar el ruido, pero también tiene algunos problemas rezagados y riesgos comerciales. Las optimizaciones multifacéticas pueden mejorar aún más el rendimiento de la estrategia para desarrollar un asesor experto en comercio de bitcoin confiable.


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


Más.