Estrategia cuantitativa de swing trading basada en múltiples marcos temporales


Fecha de creación: 2023-12-01 13:50:02 Última modificación: 2023-12-01 13:50:02
Copiar: 0 Número de Visitas: 767
1
Seguir
1619
Seguidores

Estrategia cuantitativa de swing trading basada en múltiples marcos temporales

Descripción general

Esta estrategia permite el seguimiento de las transacciones mediante la identificación de los bandos de precios de Bitcoin mediante la combinación de indicadores cuantitativos en diferentes marcos de tiempo. La estrategia utiliza un marco de tiempo de 5 minutos para obtener ganancias de los bandos de tiempo a largo plazo.

Principio de estrategia

  1. El indicador RSI, basado en el marco horario de la línea de sol, utiliza el volumen de transacciones para el cálculo ponderado, filtrando las falsas rupturas.
  2. El indicador RSI de línea de sol se procesa con un suavizado de EMA para construir un indicador de banda cuantitativa.
  3. El marco de tiempo de 5 minutos utiliza un indicador de regresión lineal y un indicador HMA para construir una señal de negociación.
  4. La estrategia permite la combinación de indicadores de bandas cuantitativas y señales de negociación para lograr la convergencia entre diferentes marcos de tiempo, identificando bandas de onda medias y largas en los precios.

Análisis de las ventajas

  1. Utilizando el indicador RSI ponderado por el volumen de transacciones, se puede identificar eficazmente los bandos reales y filtrar las brechas falsas.
  2. Los indicadores HMA son más sensibles a los cambios en los precios y pueden capturar los cambios en el tiempo.
  3. La combinación de múltiples marcos de tiempo permite identificar con mayor precisión las bandas de onda de línea media y larga.
  4. En un marco de tiempo de 5 minutos, la frecuencia de operaciones es más alta.
  5. La estrategia de seguimiento de bandas de onda, sin necesidad de seleccionar con precisión, dura más tiempo.

Análisis de riesgos

  1. Los indicadores cuantitativos pueden emitir señales erróneas, por lo que se recomienda combinarlos con el análisis fundamental.
  2. La banda puede revertirse a mitad de camino, se debe establecer un mecanismo de salida de stop loss.
  3. La señal de intercambio se retrasó y se perdió la mejor posición de entrada.
  4. El segmento de ganancias requiere un período de tenencia más largo y una cierta presión financiera.

Dirección de optimización

  1. Prueba de la eficacia del indicador RSI con diferentes parámetros.
  2. Intenta introducir otros indicadores de banda auxiliar.
  3. Optimización de los parámetros de longitud del indicador HMA.
  4. Añadir estrategias de stop loss y de suspensión.
  5. Ajuste del ciclo de tenencia de las transacciones de banda.

Resumir

La estrategia capta de manera efectiva las tendencias de la línea larga en Bitcoin a través de la combinación de múltiples marcos de tiempo y el seguimiento de la banda. En comparación con las operaciones de línea corta, las operaciones de la banda media y larga tienen menos retrocesos y un mayor margen de ganancias. A continuación, se espera que la rentabilidad y la estabilidad de la estrategia se mejoren aún más a través del ajuste de parámetros y la adición de estrategias de gestión de riesgos.

Código Fuente de la Estrategia
/*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)