Estrategia de compra de Bitcoin VWMA-ADX basada en el impulso y la tendencia

VWMA ADX DMI SMA EMA RMA WMA HMA SMMA
Fecha de creación: 2024-04-03 17:47:49 Última modificación: 2024-04-03 17:47:49
Copiar: 8 Número de Visitas: 951
1
Seguir
1617
Seguidores

Estrategia de compra de Bitcoin VWMA-ADX basada en el impulso y la tendencia

Descripción general

La estrategia utiliza múltiples promedios móviles (VWMA), índices direccionales promedio (ADX) e indicadores de movimiento (DMI) para capturar oportunidades en el mercado de Bitcoin. Combinando varios indicadores técnicos, como el movimiento del precio, la dirección de la tendencia y el volumen de transacciones, la estrategia busca encontrar entradas con una fuerte tendencia alcista y suficiente movimiento, mientras controla estrictamente el riesgo.

Principio de estrategia

  1. Se utiliza el VWMA de 9 y 14 días para juzgar la tendencia de múltiples vertientes, generando una señal de múltiples vertientes cuando la media corta atraviesa la media larga.
  2. Introducción de una línea media adaptativa construida por los máximos y mínimos VWMA de 89 días como filtro de tendencia, que solo se considerará para abrir una posición cuando el precio de cierre o el precio de apertura sea superior a la línea media.
  3. La fuerza de la tendencia se confirma con los indicadores ADX y DMI, y solo se considera que la tendencia es lo suficientemente fuerte cuando el ADX es mayor que 18 y el diferencial entre +DI y -DI es mayor que 15.
  4. Utilice la función de porcentaje de volumen de transacciones para filtrar el volumen de transacciones entre el 60% y el 95% de la línea de barras, evitando los períodos en los que el volumen de transacciones es demasiado bajo.
  5. El stop loss se establece entre 0,96 y 0,99 veces el punto más alto de la línea K anterior y disminuye con el aumento del marco de tiempo para controlar el riesgo.
  6. Cuando se alcanza el tiempo de tenencia predeterminado o el precio cae por debajo de la línea media de adaptación.

Análisis de las ventajas

  1. La combinación de varios indicadores técnicos para evaluar el estado del mercado en varias dimensiones, como la tendencia, la dinámica y el volumen de transacciones, hace que las señales sean más confiables.
  2. El mecanismo de filtración automática de la línea media y el volumen de transacciones puede filtrar eficazmente las señales falsas y reducir los intercambios no válidos.
  3. La estricta configuración de stop loss y los límites de tiempo de tenencia de las posiciones reducen considerablemente el umbral de riesgo de la estrategia.
  4. El código está diseñado de forma modular, es más fácil de leer y mantener, lo que facilita la optimización y extensión.

Análisis de riesgos

  1. Esta estrategia puede generar más señales falsas cuando el mercado está en crisis o cuando la tendencia no está clara.
  2. El punto de parada es relativamente cercano, y puede activarse prematuramente cuando hay una gran volatilidad en el mercado, lo que hace que la pérdida se expanda.
  3. La falta de consideración de la situación macroeconómica y de los acontecimientos significativos puede ser ineficaz frente a los eventos de los “Cisne Negro”.
  4. La configuración de los parámetros es relativamente fija, con una falta de adaptabilidad, y el rendimiento puede ser inestable en diferentes entornos de mercado.

Dirección de optimización

  1. La introducción de más indicadores que muestren el entorno del mercado, como el índice de relativa debilidad (RSI) y las bandas de Brin, mejora la fiabilidad de la señal.
  2. Optimización dinámica de las posiciones de stop loss, por ejemplo, mediante el uso de ATR o stop loss porcentual para responder a diferentes condiciones de volatilidad del mercado.
  3. En combinación con los datos macroeconómicos y el análisis de las tendencias, el módulo de control de riesgos de la estrategia se ha mejorado.
  4. Utiliza algoritmos de aprendizaje automático para optimizar los parámetros y mejorar la adaptabilidad y la estabilidad de las estrategias.

Resumir

VWMA-ADX estrategia de Bitcoin Multi-Head puede capturar más eficazmente las oportunidades de aumento en el mercado de Bitcoin mediante la consideración integral de varios indicadores técnicos, como la tendencia de los precios, la dinámica y el volumen de transacciones. Al mismo tiempo, las medidas estrictas de control de riesgo y las condiciones claras de liquidación hacen que el riesgo de la estrategia esté mejor controlado. Sin embargo, la estrategia también tiene algunas limitaciones, como la falta de adaptación a los cambios en el entorno del mercado, y la estrategia de detener los pérdidas que debe optimizarse.

Código Fuente de la Estrategia
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Q_D_Nam_N_96

//@version=5
strategy("Long BTC Strategy", overlay=true, 
     default_qty_type = strategy.percent_of_equity, 
     default_qty_value = 100, initial_capital = 1000, currency = currency.USD)

Volume_Quartile(vol) =>
    qvol1 = ta.percentile_linear_interpolation(vol, 60,15)
    qvol2 = ta.percentile_linear_interpolation(vol, 60,95)
    vol > qvol1 and vol < qvol2

smma(src, length) =>
	smma =  0.0
	smma := na(smma[1]) ? ta.sma(src, length) : (smma[1] * (length - 1) + src) / length
	smma

ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "RMA" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)
        "HMA" => ta.hma(source, length)
        "SMMA" => smma(source, length)

DMI(len, lensig) =>
    up = ta.change(high)
    down = -ta.change(low)
    plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
    trur = ta.rma(ta.tr, len)
    plus = fixnan(100 * ta.rma(plusDM, len) / trur)+11
    minus = fixnan(100 * ta.rma(minusDM, len) / trur)-11
    sum = plus + minus
    adx = 100 * ta.vwma(math.abs(plus - minus-11) / (sum == 0 ? 1 : sum), lensig)

    [adx, plus, minus]

cond1 = Volume_Quartile(volume*hlcc4)

ma1 = ma(close,9, "VWMA")
// plot(ma1, color = color.blue)
ma2 = ma(close,14, "VWMA")
// plot(ma2, color = color.orange)

n = switch timeframe.period
    "240" => 0.997
    => 0.995

ma3 = (0.1*ma(ta.highest(close,89),89, "VWMA") + 
     0.9*ma(ta.lowest(close,89),89, "VWMA"))*n

plot(ma3, color = color.white)

[adx, plus, minus] = DMI(7, 10)


cond2 = adx > 18 and plus - math.abs(minus) > 15

var int count = 0

if barstate.isconfirmed and strategy.position_size != 0
    count += 1
else
    count := 0

p_roc = 0
if timeframe.period == '240'
    p_roc := 14
else
    p_roc := 10

longCondition = ta.crossover(ma1, ma2) and (close > open ? close > ma3 : open > ma3) and ((ma3 - ma3[1])*100/ma3[1] >= -0.2) and ((close-close[p_roc])*100/close[p_roc] > -2.0)
float alpha = 0.0
float sl_src = high[1]
if (longCondition and cond1 and cond2 and strategy.position_size == 0)
    strategy.entry("buy", strategy.long)
    if timeframe.period == '240'
        alpha := 0.96
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+5, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '30'
        alpha := 0.985
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '45'
        alpha := 0.985
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '60'
        alpha := 0.98
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '120'
        alpha := 0.97
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '180'
        alpha := 0.96
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == 'D'
        alpha := 0.95
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else 
        alpha := 0.93
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)

period = switch timeframe.period
    "240" => 90
    "180" => 59
    "120" => 35
    "30" => 64
    "45" => 40
    "60" => 66
    "D" => 22
    => 64

if (count > period or close < ma3)
    strategy.close('buy', immediately = true)