Estrategia de reversión de la banda de volatilidad de Bitcoin

El autor:¿ Qué pasa?, Fecha: 2023-10-12 17:38:39
Las etiquetas:

Resumen general

Esta estrategia es un sistema de retroceso diseñado para valores con alta volatilidad, por lo que, naturalmente, Bitcoin es una excelente opción para operar con esto. Esto podría usarse tanto en un gráfico diario como en marcos de tiempo más bajos (encontré buenos resultados en marcos de tiempo de 3 horas pero no lo he probado en nada menor a 1 hora).

Estrategia lógica

La estrategia calcula la volatilidad comparando el cambio en el precio de cierre de las 2 velas anteriores, y utiliza este cambio en el precio para generar un promedio móvil. Una banda se envuelve alrededor del promedio móvil con una desviación estándar de 1 para la banda interna y 2 para la banda externa. Si el precio está por encima de un filtro MA (promedio móvil) preestablecido, entonces se determina que estamos en una tendencia alcista, por lo que la estrategia emitirá una señal cuando estamos en una tendencia alcista y hay un retroceso que hace que la banda de desviación interna inferior suba, pero si el precio continúa y cae a través de la banda de desviación externa, entonces no habrá una señal de compra, ya que esto perjudica que el pico de volatilidad sea demasiado grande. Se puede ver un pico ocurre en el indicador donde el evento está coloreado en verde.

El usuario puede cambiar el rango de fechas que desea probar, el período promedio móvil para el seguimiento de la volatilidad y las desviaciones de la banda interna y externa. En BTC dejé las bandas de desviación interna y la desviación externa en configuraciones estándar, pero encontré que el seguimiento de la volatilidad de 3 periodos es bueno para operar en el gráfico de 1 día y el seguimiento de la volatilidad de 5 periodos es bueno para el gráfico de 3 horas. Dado que esta no es una estrategia de compra y retención, para operar probablemente querrías seguir con las monedas más líquidas para poder entrar y salir muy rápido en cualquier intercambio. Si querías probar esto en mercados menos volátiles, cambiar la banda de desviación interna a ~ 0.75 también funcionaría bien en varios mercados de futuros.

Ventajas de la estrategia

  • Utiliza el comercio de volatilidad para capturar los puntos de inflexión del mercado
  • Negociaciones tanto largas como cortas, ganando en mercados ascendentes y descendentes
  • Configuración de parámetros estándar sencillo fácil de usar
  • Los parámetros se pueden optimizar fácilmente para diferentes subyacentes
  • Las configuraciones razonables de stop loss y take profit ayudan a fijar los beneficios

Riesgos de la estrategia

  • Los activos subyacentes con alta volatilidad corren el riesgo de sufrir mayores pérdidas
  • El cambio frecuente entre largo y corto implica mayores costes comerciales
  • Las operaciones a corto plazo requieren un estrecho seguimiento del mercado
  • Dificultad para detener pérdidas cuando la liquidez del mercado es baja
  • Una mala sintonización de los parámetros puede llevar a un exceso de negociación

Métodos de reducción del riesgo:

  1. Elige los subyacentes volátiles apropiados, control del tamaño de la posición.

  2. Optimizar los parámetros para reducir las operaciones ineficaces.

  3. Utiliza stop loss y toma ganancias, estricta gestión de dinero.

  4. Concentrarse en la eficiencia de ejecución, elegir las bases líquidas.

  5. Ajustar los parámetros para adaptarse a las diferentes características subyacentes.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Optimizar el período de promedio móvil para realizar un mejor seguimiento de la volatilidad de los diferentes activos subyacentes.

  2. Ajustar los parámetros de la banda de volatilidad para adaptarlos mejor al intervalo de volatilidad específico del subyacente.

  3. Añadir otros filtros como picos de volumen para validar más las señales.

  4. Utilice técnicas de aprendizaje automático para optimizar dinámicamente los parámetros de adaptabilidad.

  5. Prueba en marcos de tiempo de mayor frecuencia para capturar más oportunidades comerciales.

  6. Agregue el seguimiento de stop loss / take profit para obtener más ganancias.

  7. Combinar con otros indicadores o modelos para construir estrategias cuantitativas de cartera.

Resumen de las actividades

La estrategia en general es bastante simple e intuitiva, identificando reversiones a través del indicador de volatilidad para capturar puntos de inflexión del mercado. Hay un gran espacio de optimización al ajustar parámetros e incorporar otros indicadores técnicos para mejorar aún más la estabilidad y la rentabilidad. Sin embargo, los operadores deben ser conscientes de los problemas de sobreajuste y ajuste de curvas.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gary_trades
//This script is designed to be used on volatile securities/tickers so is best suited for day charts on Crypto (particularly good for BTC).
//It takes both long and short trades and the main indicator settings can be changed by the use so they can test for ideal settings for ticker of interest.

//@version=4

strategy("BTC Volatility Band Strategy", shorttitle="Vol Band Strategy", overlay=false, margin_long=100, margin_short=100)

//VOLATILTY
CandleChange = ((close - close[1])/close)*100         //OR CandleChange = ((close[2] - close[1])/close)*100
plot(CandleChange, color=color.red, linewidth = 1)

//VOLATILITY BANDS 
MAlen = input(7, minval=3, maxval=30, title=" MA Length")
MAout = sma(CandleChange, MAlen)
plot(MAout, color=color.black, display=display.none)

InnerBand = input(1.0, minval=0.5, maxval=5, title="Inner Band")
OuterBand = input(2.00, minval=0.5, maxval=10, title="Outer Band")
devInner = InnerBand * stdev(CandleChange, MAlen)
devOuter = OuterBand * stdev(CandleChange, MAlen)

upper1 = MAout + devInner
lower1 = MAout - devInner
b1 = plot(upper1, "Upper Inner", color=color.gray)
b2 = plot(lower1, "Lower Inner", color=color.gray)
upper2 = MAout + devOuter
lower2 = MAout - devOuter
b3 = plot(upper2, "Upper Outer", color=color.gray)
b4 = plot(lower2, "Lower Outer", color=color.gray)
fill(b1, b3, color.rgb(250,145,175,70), title="Background")
fill(b2, b4, color.rgb(250,145,175,70), title="Background")

band1 = hline(25, "Upper Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2)
band0 = hline(-25, "Lower Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2)

//LONG FILTER
VolFilterL = CandleChange <= lower1 and CandleChange > lower2
SMAFilterL = close[1] > sma(close[1], 50)
PriceFilterL = close > lowest(close,7)
LongFilter = VolFilterL and SMAFilterL and PriceFilterL
bgcolor(LongFilter ? color.new(color.green, 80) : na)

//SHORT FILTER
VolFilterS = CandleChange >= upper1 and CandleChange < upper2
SMAFilterS = close[1] < sma(close[1], 50)
PriceFilterS = close < highest(close,7)
ShortFilter = VolFilterS and SMAFilterS and PriceFilterS
bgcolor(ShortFilter ? color.new(color.red, 80) : na)

//SETTING BACK TEST INPUTS
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2100, title = "To Year", minval = 1970)

startDate = timestamp("America/New_York", fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp("America/New_York", toYear, toMonth, toDay, 00, 00)
time_condition = time >= startDate and time <= finishDate

//ORDER DETAILS
Risk = (high[7] - low[7])/ 7
Profit = Risk*1.15
Loss = Risk*0.65

AlertMSG = "New stategy position" + tostring(strategy.position_size)

if (time_condition) 
    strategy.entry("Long", strategy.long, when = LongFilter, alert_message=AlertMSG)
    if (LongFilter)
        LongStop = strategy.position_avg_price - Loss
        LongProfit = strategy.position_avg_price + Profit 
        strategy.exit("TP/SL", "Long", stop=LongStop, limit=LongProfit)

if (time_condition)
    strategy.entry("Short", strategy.short, when = ShortFilter, alert_message=AlertMSG)
    if (ShortFilter)
        ShortStop = strategy.position_avg_price + Loss
        ShortProfit = strategy.position_avg_price - Profit 
        strategy.exit("TP/SL", "Short", stop=ShortStop, limit=ShortProfit)




Más.