En la carga de los recursos... Cargando...

Se trata de la suma de las pérdidas de los activos de la entidad en el período de referencia, incluidas las pérdidas de la entidad en el período de referencia.

El autor:¿ Qué pasa?, Fecha: 2024-01-17 16:37:23
Las etiquetas:

img

Resumen general

Esta estrategia integra la señal de reversión media de la línea de base, el filtro de volatilidad ATR y el filtro de tendencia HMA para generar señales comerciales sólidas para estrategias comerciales cuantitativas.

Estrategia lógica

La estrategia utiliza un promedio móvil de 37 períodos como línea de base. Cuando el precio rompe hacia arriba desde esta línea de base, genera una señal de compra, y cuando se rompe desde arriba, genera una señal de venta. Para evitar señales falsas, la estrategia requiere que el precio se mueva más allá de la volatilidad de 2xATR después de penetrar la línea de base para confirmar la validez de las señales. Además, la estrategia utiliza un HMA de 11 períodos para juzgar la tendencia principal. Solo confirma señales válidas cuando la línea de base de penetración del precio está alineada con la dirección de HMA para evitar la selección adversa.

Para la toma de ganancias, la estrategia apoya el uso de uno o múltiples (dos o tres) niveles de toma de ganancias.

Análisis de ventajas

En comparación con las estrategias de ruptura de promedios móviles simples, esta estrategia agrega el filtro de volatilidad ATR que elimina muchas señales inválidas. Esto se alinea muy bien con las técnicas de ruptura de patrones visuales, lo que conduce a tasas de ganancia más altas. Además, el sesgo de tendencia HMA evita la selección adversa y reduce significativamente las pérdidas innecesarias.

Riesgos y soluciones

El principal riesgo es que el filtro de volatilidad ATR puede eliminar algunas señales válidas, causando el fracaso para abrir posiciones a tiempo. Además, el juicio de tendencia HMA no es muy significativo a veces cuando el precio solo tiene un retroceso a corto plazo, no una reversión. Esto puede conducir a un stop loss innecesario. Para reducir los riesgos, podemos reducir el parámetro del filtro de volatilidad ATR para permitir más señales. También podemos ajustar el parámetro del período HMA para usar HMA a largo plazo para juzgar las principales tendencias, evitando interferencias de fluctuaciones a corto plazo.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Prueba más combinaciones de parámetros para encontrar el conjunto óptimo de valores, por ejemplo, período de referencia, período ATR, coeficiente de volatilidad, etc.

  2. Añadir más filtros u osciladores para juzgar las condiciones del mercado para mejorar la robustez del modelo.

  3. Optimizar los parámetros para los mecanismos de obtención de beneficios, probar más niveles de precios y esquemas de asignación.

  4. Incorporar modelos de aprendizaje automático para generar señales comerciales más efectivas.

Conclusión

Esta estrategia integra una doble señal de línea base de media móvil, un filtro de volatilidad ATR y un filtro de sesgo de tendencia HMA en un sistema de negociación cuantitativo muy práctico.


/*backtest
start: 2023-01-10 00:00:00
end: 2024-01-16 00:00:00
period: 1d
basePeriod: 1h
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/
// © sevencampbell

//@version=5
strategy(title="Baseline Cross Qualifier Volatility Strategy with HMA Trend Bias", overlay=true)

// --- User Inputs ---

// Baseline Inputs
baselineLength = input.int(title="Baseline Length", defval=20)
baseline = ta.sma(close, baselineLength)

// PBCQ Inputs
pbcqEnabled = input.bool(title="Post Baseline Cross Qualifier Enabled", defval=true)
pbcqBarsAgo = input.int(title="Post Baseline Cross Qualifier Bars Ago", defval=3)

// Volatility Inputs
atrLength = input.int(title="ATR Length", defval=14)
multiplier = input.float(title="Volatility Multiplier", defval=2.0)
rangeMultiplier = input.float(title="Volatility Range Multiplier", defval=1.0)
qualifierMultiplier = input.float(title="Volatility Qualifier Multiplier", defval=0.5)

// Take Profit Inputs
takeProfitType = input.string(title="Take Profit Type", options=["1 Take Profit", "2 Take Profits", "3 Take Profits"], defval="1 Take Profit")

// HMA Inputs
hmaLength = input.int(title="HMA Length", defval=50)

// --- Calculations ---

// ATR
atr = ta.atr(atrLength)

// Range Calculation
rangeHigh = baseline + rangeMultiplier * atr
rangeLow = baseline - rangeMultiplier * atr
rangeColor = rangeLow <= close and close <= rangeHigh ? color.yellow : na
bgcolor(rangeColor, transp=90)

// Qualifier Calculation
qualifier = qualifierMultiplier * atr

// Dot Calculation
isLong = close > baseline and (close - baseline) >= qualifier and close > ta.hma(close, hmaLength)
isShort = close < baseline and (baseline - close) >= qualifier and close < ta.hma(close, hmaLength)
colorDot = isLong ? color.green : isShort ? color.red : na
plot(isLong or isShort ? baseline : na, color=colorDot, style=plot.style_circles, linewidth=3)

// --- Strategy Logic ---

// PBCQ
pbcqValid = not pbcqEnabled or low[pbcqBarsAgo] > baseline

// Entry Logic
longCondition = isLong and pbcqValid
shortCondition = isShort and pbcqValid
if (longCondition)
    strategy.entry("Long", strategy.long)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// Exit Logic
if (takeProfitType == "1 Take Profit")
    strategy.exit("TP/SL", "Long", limit=rangeHigh, stop=rangeLow)
    strategy.exit("TP/SL", "Short", limit=rangeLow, stop=rangeHigh)
else if (takeProfitType == "2 Take Profits")
    strategy.exit("TP1", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh / 2)
    strategy.exit("TP2", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh)
    strategy.exit("TP1", "Short", qty=strategy.position_size * 0.5, limit=rangeLow / 2)
    strategy.exit("TP2", "Short", qty=strategy.position_size * 0.5, limit=rangeLow)
else if (takeProfitType == "3 Take Profits")
    strategy.exit("TP1", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh / 2)
    strategy.exit("TP2", "Long", qty=strategy.position_size * 0.25, limit=rangeHigh * 0.75)
    strategy.exit("TP3", "Long", qty=strategy.position_size * 0.25, limit=rangeHigh * 1.5)


Más.