Estrategia de negociación de banda cuantitativa de Bitcoin basada en múltiples marcos de tiempo

El autor:¿ Qué pasa?, Fecha: 2023-12-01 13:50:02
Las etiquetas:

img

Resumen general

Esta estrategia identifica las bandas de precios de Bitcoin mediante la combinación de indicadores cuantitativos en diferentes marcos de tiempo, y realiza operaciones de seguimiento de tendencias.

Estrategia lógica

  1. El indicador RSI calculado sobre la base del marco de tiempo diario pesa sobre la base del volumen de operaciones para filtrar las fallas.
  2. El indicador RSI diario es suavizado por una EMA para construir un indicador de banda cuantitativa.
  3. El marco de tiempo de 5 minutos utiliza una combinación de indicadores de regresión lineal y HMA para generar señales de negociación.
  4. Al combinar el indicador de bandas cuantitativas y las señales de negociación a través de marcos de tiempo, la estrategia identifica bandas de precios a medio y largo plazo.

Análisis de ventajas

  1. El indicador RSI ponderado por volumen puede identificar efectivamente las bandas verdaderas y filtrar las rupturas falsas.
  2. El indicador HMA es más sensible a los cambios de precios y puede capturar los cambios oportunamente.
  3. La combinación de múltiples marcos de tiempo conduce a una identificación más precisa de las bandas a medio y largo plazo.
  4. Las operaciones en el marco de tiempo de 5 minutos permiten una mayor frecuencia de operaciones.
  5. Como estrategia de seguimiento de banda, no requiere una selección precisa de puntos y puede durar más tiempo.

Análisis de riesgos

  1. Los indicadores cuantitativos pueden generar señales falsas, se recomienda el análisis fundamental.
  2. Las bandas pueden ver inversiones a mitad de camino, los mecanismos de stop-loss deben estar en su lugar.
  3. Los retrasos de la señal pueden llevar a la falta de los mejores puntos de entrada.
  4. Las bandas rentables necesitan períodos de retención más largos, lo que requiere tolerancia a la presión de capital.

Direcciones de optimización

  1. Eficacia de ensayo de los indicadores RSI con diferentes parámetros.
  2. Intenta introducir otros indicadores de banda auxiliares.
  3. Optimizar los parámetros de longitud del indicador HMA.
  4. Agregue las estrategias de stop loss y take profit.
  5. Ajustar el ciclo de espera para intercambios de bandas.

Conclusión

Esta estrategia captura de manera efectiva las tendencias a medio y largo plazo de Bitcoin mediante el acoplamiento de marcos de tiempo y seguimiento de bandas. En comparación con el comercio a corto plazo, el comercio de bandas a medio y largo plazo ve reducciones más pequeñas y un mayor potencial de ganancia. Los próximos pasos implican mejorar aún más la rentabilidad y la estabilidad a través de ajustes de parámetros y adiciones de gestión de riesgos.


/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title='Pyramiding BTC 5 min', overlay=true, pyramiding=5, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.075)
//the pyramide based on this script  https://www.tradingview.com/script/7NNJ0sXB-Pyramiding-Entries-On-Early-Trends-by-Coinrule/
//
fastLength = input(250, title="Fast filter length ", minval=1)
slowLength = input(500,title="Slow filter length",  minval=1)
source=close
v1=ema(source,fastLength)
v2=ema(source,slowLength)
//
//Backtest dates
fromMonth = input(defval=1, title="From Month")
fromDay = input(defval=10, title="From Day")
fromYear = input(defval=2020, title="From Year")
thruMonth = input(defval=1, title="Thru Month")
thruDay = input(defval=1, title="Thru Day")
thruYear = input(defval=2112, title="Thru Year")

showDate = input(defval=true, title="Show Date Range")

start = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59)  // backtest finish window
window() =>  // create function "within window of time"
    time >= start and time <= finish ? true : false


leng=1
p1=close[1]

len55 = 10
//taken from https://www.tradingview.com/script/Ql1FjjfX-security-free-MTF-example-JD/
HTF = input("1D", type=input.resolution)
ti = change( time(HTF) ) != 0
T_c = fixnan( ti ? close : na )

vrsi = rsi(cum(change(T_c) * volume), leng)
pp=wma(vrsi,len55)

d=(vrsi[1]-pp[1])
len100 = 10
x=ema(d,len100)
//
zx=x/-1
col=zx > 0? color.lime : color.orange

//

tf10 = input("1", title = "Timeframe", type = input.resolution, options = ["1", "5", "15", "30", "60","120", "240","360","720", "D", "W"])

length = input(50, title = "Period", type = input.integer)
shift = input(1, title = "Shift", type = input.integer)

hma(_src, _length)=>
    wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))
    
hma3(_src, _length)=>
    p = length/2
    wma(wma(close,p/3)*3 - wma(close,p/2) - wma(close,p),p)

b =security(syminfo.tickerid, tf10, hma3(close[1], length)[shift])
//plot(a,color=color.gray)
//plot(b,color=color.yellow)
close_price = close[0]
len = input(25)

linear_reg = linreg(close_price, len, 0)


filter=input(true)

buy=crossover(linear_reg, b)

longsignal = (v1 > v2 or filter == false ) and buy and window()

//set take profit

ProfitTarget_Percent = input(3)
Profit_Ticks = close * (ProfitTarget_Percent / 100) / syminfo.mintick

//set take profit

LossTarget_Percent = input(10)
Loss_Ticks = close * (LossTarget_Percent / 100) / syminfo.mintick


//Order Placing

strategy.entry("Entry 1", strategy.long, when=strategy.opentrades == 0 and longsignal)

strategy.entry("Entry 2", strategy.long, when=strategy.opentrades == 1 and longsignal)

strategy.entry("Entry 3", strategy.long, when=strategy.opentrades == 2 and longsignal)

strategy.entry("Entry 4", strategy.long, when=strategy.opentrades == 3 and longsignal)

strategy.entry("Entry 5", strategy.long, when=strategy.opentrades == 4 and longsignal)





if strategy.position_size > 0
    strategy.exit(id="Exit 1", from_entry="Entry 1", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 2", from_entry="Entry 2", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 3", from_entry="Entry 3", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 4", from_entry="Entry 4", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 5", from_entry="Entry 5", profit=Profit_Ticks, loss=Loss_Ticks)
    



Más.