
Esta estrategia se basa en las señales de compra y venta de BTC a través de la media móvil de 50 días y la media móvil de 200 días, combinadas con el juicio de indicadores técnicos adicionales. La estrategia se aplica principalmente a la pareja de divisas BTC/USDT, que tiene características claramente tendenciales.
Cuando la media móvil de 50 días por encima de la media móvil de 200 días se rompe y se forma un tenedor de oro, indica que BTC entra en el mercado de varios titulares y genera una señal de compra. Y cuando la media móvil de 50 días por debajo de la media móvil de 200 días se rompe y se forma un tenedor de muerte, indica que BTC entra en el mercado de cabeza vacía y genera una señal de venta.
La estrategia añade algunos indicadores técnicos adicionales para auxiliar el juicio, además de los criterios básicos de las señales de los movimientos de las medias y de los trunfos de oro y de los trunfos de muerte. Estos indicadores incluyen:
Indicador EMA: Calcula un indicador EMA de longitud + offset, que se puede comprar cuando su alza indica que se encuentra actualmente en un mercado de más tiendas.
Comparación de la relación entre el promedio móvil y el EMA: si el valor del EMA es superior al promedio móvil de 50 días, se produce un juicio de compra.
Compruebe si el precio ha caído más de un 1% en comparación con el punto más bajo de la línea K anterior, y si se cumple, genere una señal de venta.
La combinación de los indicadores mencionados anteriormente puede filtrar algunas señales erróneas y hacer que las decisiones estratégicas de negociación sean más fiables.
La estrategia tiene las siguientes ventajas:
El uso de la media móvil como principal señal de negociación puede filtrar el ruido del mercado y identificar la dirección de la tendencia.
La combinación de varios indicadores de tecnología auxiliar, como EMA, puede mejorar la fiabilidad de la señal y filtrar las señales falsas.
La adopción de una estrategia de detención de pérdidas adecuada puede controlar eficazmente las pérdidas individuales.
La lógica de transacción es más simple, fácil de entender y adecuada para los principiantes en el comercio cuantitativo.
Se pueden configurar más parámetros y ajustarlos según sus preferencias.
La estrategia también tiene algunos riesgos a tener en cuenta:
El promedio móvil en sí mismo es muy retrasado y puede perder la oportunidad de una rápida reversión de los precios.
Los indicadores auxiliares aumentan el número de reglas y también la probabilidad de generar señales erróneas.
La configuración incorrecta de la parada de pérdidas puede causar una expansión de las pérdidas.
La configuración incorrecta de los parámetros (como la longitud de la media móvil, etc.) también puede afectar la eficacia de la estrategia.
Resolución de las mismas:
Reducir adecuadamente el ciclo de las medias móviles y ampliar el rango de optimización de los parámetros.
Aumentar la cantidad de datos de retroalimentación y comprobar la calidad de la señal.
La extensión de los límites de pérdidas y ganancias debe ser adecuada.
Aumentar la optimización de los parámetros para buscar la combinación óptima de los mismos.
La estrategia también puede ser optimizada en las siguientes direcciones:
Se añaden algoritmos de aprendizaje automático para optimizar los parámetros.
Añadir más indicadores auxiliares, construir subestrategias y generar decisiones a través de un mecanismo de votación.
En el caso de las breakouts, las estrategias de breakout se utilizan para identificar breakouts.
El uso de aprendizaje profundo para predecir tendencias de precios.
Optimización de los mecanismos de detención de pérdidas y seguimiento dinámico de las detenciones.
Las optimizaciones anteriores pueden mejorar la precisión de la toma de decisiones y aumentar la rentabilidad y la estabilidad de las estrategias.
Esta estrategia se basa principalmente en el cruce de medias móviles de BTC para tomar decisiones comerciales, con el apoyo de indicadores técnicos como EMA para filtrar las señales. La estrategia tiene una fuerte capacidad de seguimiento de tendencias, es altamente configurable y es adecuada como estrategia de entrada para operaciones cuantitativas.
/*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)