Estrategia de negociación de BTC basada en el cruce de la media móvil

El autor:¿ Qué pasa?, Fecha: 2023-12-07 14:56:50
Las etiquetas:

img

Resumen general

Esta estrategia se basa en las señales de cruz de oro y cruz de muerte del promedio móvil de 50 días y el promedio móvil de 200 días de BTC, combinadas con indicadores técnicos adicionales para generar señales de compra y venta.

Principio de la estrategia

Cuando el promedio móvil de 50 días cruza por encima del promedio móvil de 200 días para formar una cruz dorada, indica que BTC ha entrado en un mercado alcista y genera una señal de compra.

Además de la media móvil básica cruz dorada y cruz de muerte, esta estrategia también incorpora algunos indicadores técnicos adicionales para ayudar en el juicio, incluidos:

  1. Indicador EMA: Calcular un indicador EMA con longitud + desplazamiento, cuando sube indica que el mercado actual es alcista, podemos comprar.

  2. Compare la relación de valor entre la media móvil y la EMA: si el valor de la EMA es superior a la media móvil de 50 días, se genera una señal de compra.

  3. Compruebe si el precio ha caído más del 1% en comparación con el mínimo de la línea K anterior, si es así, genere una señal de venta.

Al combinar el uso de varios indicadores anteriores, se pueden filtrar algunas señales erróneas y las decisiones comerciales de la estrategia pueden ser más confiables.

Análisis de ventajas

Esta estrategia tiene las siguientes ventajas:

  1. El uso de medias móviles como la principal señal de negociación puede filtrar el ruido del mercado e identificar la dirección de la tendencia.

  2. La combinación con múltiples indicadores técnicos auxiliares puede mejorar la fiabilidad de la señal y filtrar las señales falsas.

  3. La adopción de estrategias de stop-loss adecuadas puede controlar eficazmente la pérdida única.

  4. La lógica comercial relativamente simple es fácil de entender e implementar, adecuada para los principiantes en el comercio cuantitativo.

  5. Hay muchos parámetros configurables que se pueden ajustar de acuerdo con sus propias preferencias.

Análisis de riesgos

Esta estrategia también tiene algunos riesgos:

  1. El promedio móvil en sí tiene un fuerte atributo de retraso, posiblemente oportunidades perdidas para una rápida inversión de precios.

  2. La adición de indicadores auxiliares aumenta el número de reglas y también aumenta la probabilidad de generar señales erróneas.

  3. La configuración incorrecta del stop-loss puede dar lugar a pérdidas ampliadas.

  4. Los ajustes de parámetros inadecuados (como la longitud media móvil, etc.) también afectarán a los resultados de la estrategia.

Las soluciones correspondientes:

  1. Acortar adecuadamente el ciclo de la media móvil y aumentar el rango de optimización de parámetros.

  2. Aumentar la cantidad de datos de prueba posterior para comprobar la calidad de la señal.

  3. Relajar adecuadamente el intervalo de stop loss mientras se establecen los stop take profit.

  4. Aumentar la optimización de parámetros para encontrar las mejores combinaciones de parámetros.

Direcciones de optimización

Esta estrategia también puede optimizarse en las siguientes direcciones:

  1. Aumentar los algoritmos de aprendizaje automático para lograr la optimización automática de parámetros.

  2. Añadir más indicadores auxiliares para construir múltiples subestrategias y tomar decisiones a través de un mecanismo de votación.

  3. Pruebe estrategias de ruptura para identificar los avances de precios.

  4. Utilice el aprendizaje profundo para predecir las tendencias de precios.

  5. Optimizar los mecanismos de stop-loss para lograr un stop-loss de seguimiento dinámico.

Las optimizaciones anteriores pueden mejorar la precisión de las decisiones y mejorar la rentabilidad y la estabilidad de la estrategia.

Resumen de las actividades

Esta estrategia toma decisiones comerciales basadas principalmente en el cruce promedio móvil de BTC, asistido por indicadores técnicos como EMA para filtrar las señales. La estrategia tiene una fuerte capacidad de seguimiento de tendencias y una alta configurabilidad, lo que la hace adecuada como estrategia comercial cuantitativa para principiantes.


/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('JayJay BTC Signal', overlay=true, initial_capital=100, currency='USD', default_qty_value=100, default_qty_type=strategy.percent_of_equity, commission_value=0, calc_on_every_tick=true)

securityNoRepaint(sym, tf, src) => request.security(sym, tf, src[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]

//200 50 Moving Average
ma50Len = input.int(50, minval=1, title='MA50-Length')
ma50Src = input(close, title='MA50-Source')
ma50Show = input(true, title='Show SMA50 on chart')
ma50Close = ta.sma(ma50Src, ma50Len)
ma50CloseTimeframe = input.timeframe("240", "Ma50 Timeframe", group = "EMA Options")
ma50Open = ta.sma(open, ma50Len)
ma200Len = input.int(200, minval=1, title='MA200-Length')
ma200Src = input(close, title='MA200-Source')
ma200Show = input(true, title='Show SMA200 on chart')
ma200CloseTimeframe = input.timeframe("D", "Ma200 Timeframe", group = "EMA Options")
ma200Close = ta.sma(ma200Src, ma200Len)
ma200Open = ta.sma(open, ma200Len)
//plot(ma200Close, color=color.new(#0b6ce5, 0), title='MA200')
//plot(ma50Close, color=color.new(#00d8ff, 0), title='MA50')

sma50 = securityNoRepaint(syminfo.tickerid, ma50CloseTimeframe, ma50Close)
plot(sma50 and ma50Show ? sma50 : na, color=color.new(#00d8ff, 0), title='SMA50')
sma200 = securityNoRepaint(syminfo.tickerid, ma200CloseTimeframe, ma200Close)
plot(sma200 and ma200Show ? sma200 : na, color=color.new(#00d8ff, 0), title='SMA200')

// Short/Long EMA
// Define the offset value
EMAOffsetValue = input.int(2, title='EMA Offset', minval=0)
emaplot = input(true, title='Show EMA on chart')
len = input.int(20, minval=1, title='ema Length') + EMAOffsetValue
emaCloseTimeframe = input.timeframe("240", "EMA 1 Timeframe", group = "EMA Options")
emaOpen = ta.ema(open, len)
emaClose = ta.ema(close, len)

ema = securityNoRepaint(syminfo.tickerid, emaCloseTimeframe, emaClose)

up = emaClose > ema[1]
down = emaClose < ema[1]
mycolor = up ? color.green : down ? color.red : color.blue

plot(ema and emaplot ? ema : na, title='Signal EMA', color=mycolor, linewidth=3)
//plot(emaClose and emaplot ? emaClose : na, title='Signal 20 EMA', color=color.yellow, linewidth=3)

ma50GreaterThanMa200 = sma50 > sma200

last3BarUp = ema > ema[1]

startLong = up and ema > sma50 and ma50GreaterThanMa200 and (100 - (sma50 / ema * 100) > 1.0)

startFrom = input(timestamp("20 Jan 2000 00:00"), "StartFrom")

yearFilter = true

alertLongPositionMessage = "{\"direction:\": \"long\", \"action\": \"{{strategy.order.action}}\", \"price\": \"{{strategy.order.price}}\", \"qty\": \"{{strategy.position_size}}\", \"symbol\": \"{{ticker}}\", \"date\": \"{{time}}\"}"

if true and startLong and yearFilter
    strategy.entry('Long', strategy.long, comment = "Long", alert_message = alertLongPositionMessage)

longStopLossLevel = open * 0.05
strategy.exit('StopLoss', from_entry='Long',comment = "StopLoss!", loss=longStopLossLevel, profit=close * 0.3, alert_message = alertLongPositionMessage)
longPercentageChange = low / close[1] * 100 - 100
is1PercentLower = longPercentageChange < -0.1
closeLongPositionWhen = (down and is1PercentLower) or (emaClose < sma50)
if closeLongPositionWhen
    strategy.close('Long', comment = "Fuck It!", alert_message =  alertLongPositionMessage)

bgcolor(startLong ? color.green : na, transp=90)



Más.