Estrategia comercial cuantitativa multifuncional basada en el cruce de tendencias y promedios móviles


Fecha de creación: 2023-12-08 12:14:50 Última modificación: 2023-12-08 12:14:50
Copiar: 0 Número de Visitas: 631
1
Seguir
1621
Seguidores

Estrategia comercial cuantitativa multifuncional basada en el cruce de tendencias y promedios móviles

Descripción general

La estrategia integra varios indicadores técnicos y conceptos de negociación que se pueden utilizar para generar automáticamente señales de compra y venta. La principal característica es la combinación de indicadores de análisis de tendencias para optimizar el stop loss, mientras que se utiliza el cruce de líneas para generar señales de negociación.

Principio de estrategia

Indicadores técnicos

  • Indicador UTSTC personalizado: un indicador de seguimiento de pérdidas adaptado basado en la amplitud real promedio, que se puede ajustar a los límites de pérdidas según la volatilidad del mercado.

  • Indicador STC: Diferencia entre las medias móviles simples rápidas y las medias móviles simples lentas para determinar la dirección de la tendencia del mercado y el punto de reversión potencial.

  • Media móvil simple (SMA) y media móvil indexada (EMA): Calcula y dibuja media móvil de diferentes períodos para proporcionar información adicional sobre las tendencias.

Señales de comercio

  • La señal de compra: se produce cuando el precio de cierre atraviesa el indicador UTSTC y el indicador STC está en un estado de baja.

  • La señal de venta: se produce cuando el precio de cierre atraviesa el indicador UTSTC por debajo y el indicador STC se encuentra en un estado bajista.

Ventajas estratégicas

  • La integración de varios indicadores para determinar las tendencias del mercado puede mejorar la precisión de la señal.

  • El indicador UTSTC ajusta automáticamente el rango de stop loss en función de la amplitud real, lo que permite controlar eficazmente cada pérdida.

  • El uso de la cruz de línea media para generar señales de transacción simples y efectivas.

  • La combinación de diferentes parámetros de configuración puede adaptarse a más entornos de mercado.

Riesgo estratégico

  • Los indicadores de tendencia como el STC están rezagados y pueden perder oportunidades de cambio a corto plazo.

  • Las señales de cruce de línea media pueden generar falsas señales.

  • Se deben evaluar cuidadosamente las configuraciones de los parámetros, ya que una combinación incorrecta puede reducir las ganancias o aumentar las pérdidas.

  • Un margen de pérdidas demasiado grande puede aumentar el riesgo de pérdidas, y un margen de pérdidas demasiado pequeño puede detenerse prematuramente.

Dirección de optimización

  • Pruebe los parámetros del indicador STC de diferentes períodos de longitud para encontrar la configuración que tenga el menor impacto en la estrategia.

  • Trate de combinar los indicadores de filtración de señales falsas con otros indicadores, como KDJ, MACD, etc.

  • Ajuste los parámetros de parada de acuerdo con los resultados de la prueba de retorno para encontrar la combinación óptima de parámetros.

  • Evaluar las diferentes configuraciones de tiempo de tenencia para encontrar el período de tenencia óptimo.

Resumir

La estrategia integra varios módulos de evaluación de tendencias, gestión automática de pérdidas y evaluación de señales de negociación, formando un programa de negociación cuantitativo más completo. Se espera obtener ganancias estables a través de la optimización de parámetros y la extensión de funciones. Sin embargo, ninguna estrategia puede evitar completamente las pérdidas y requiere una verificación cuidadosa de los efectos y un buen control del riesgo.

Código Fuente de la Estrategia
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("OB+LQ+UTSTC+SMA+EMA-NORA-MIP21-Jashore-Bangladesh-OneMinuteTF", shorttitle="OB+LS+UTSTC-MIP21-Jashore-Bangladesh-OneMinuteTF", overlay=true)

// Order Block + Liquidity Swings [NORA] Settings
pivot_length = input(14, title="Pivot Lookback")
bull_ext_last = input(3, title="Bullish OB Extension")
bear_ext_last = input(3, title="Bearish OB Extension")
swing_length = input(5, title="Swing Length")
area = input("Wick Extremity", title="Swing Area", options=["Wick Extremity", "Full Range"])
min_profit = input(0.5, title="Minimum Profit Target")
max_loss = input(0.5, title="Maximum Loss Stop")

// Variables
var float bull_ob_price = na
var float bear_ob_price = na
var float swing_high = na
var float swing_low = na

// Calculate Order Block Prices
var float low_lowest = na
var float high_highest = na
if bar_index >= pivot_length
    low_lowest := lowest(low, pivot_length)
    high_highest := highest(high, pivot_length)
    bull_ob_price := low_lowest
    bear_ob_price := high_highest

// Calculate Swing High/Low Prices
var float low_lowest_swing = na
var float high_highest_swing = na

if area == "Wick Extremity"
    low_lowest_swing := lowest(low, swing_length)
    high_highest_swing := highest(high, swing_length)
else
    low_lowest_swing := lowest(high - low, swing_length)
    high_highest_swing := highest(high - low, swing_length)

swing_low := low_lowest_swing
swing_high := high_highest_swing

// Trading Logic for Order Block + Liquidity Swings
buy_liquidity = crossover(close, bull_ob_price) and close > swing_low
sell_liquidity = crossunder(close, bear_ob_price) and close < swing_high

// Plot Buy/Sell Signals for Order Block + Liquidity Swings
plotshape(series=buy_liquidity, style=shape.labelup, location=location.belowbar, color=color.rgb(39, 166, 175), size=size.small, title="Bullish LQ")
plotshape(series=sell_liquidity, style=shape.labeldown, location=location.abovebar, color=color.rgb(248, 95, 215), size=size.small, title="Bearish LQ")

// UTSTC-SMA-EMA-NORA-New Settings
keyvalue = input(3, title="UT Bot Key Value", step=0.5)
atrperiod = input(10, title="UT Bot ATR Period")
src = close

xATR = atr(atrperiod)
nLoss = keyvalue * xATR
xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
pos = 0   
pos := iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
plot(xATRTrailingStop, color=xcolor, title="UT Bot Trailing Stop")

// STC Settings
stc_length = input(12, title="STC Length")
fastLength = input(26, title="STC Fast Length")
slowLength = input(50, title="STC Slow Length")
fastMA = ema(close, fastLength)
slowMA = ema(close, slowLength)
STC = fastMA - slowMA
STCColor = STC > STC[1] ? color.green : color.red
plot(STC, color=STCColor, title="STC")

// Add SMAs
sma21 = sma(close, 21)
sma44 = sma(close, 44)
plot(sma21, color=color.blue, title="SMA 21")
plot(sma44, color=color.orange, title="SMA 44")

// Add EMA
ema5 = ema(close, 5)
plot(ema5, color=color.yellow, title="EMA 5")

// Combined Strategy
buySignal = crossover(src, xATRTrailingStop) and STC < 25 and STCColor == color.green
sellSignal = crossunder(src, xATRTrailingStop) and STC > 75 and STCColor == color.red

// Plot Buy and Sell signals as triangles
plotshape(series=buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)

strategy.entry("Buy", strategy.long, when=buySignal)
strategy.entry("Sell", strategy.short, when=sellSignal)