
La estrategia, llamada estrategia de negociación cuantitativa basada en el cruce entre el precio y el SMA, genera señales de negociación principalmente calculando el SMA de diferentes períodos y siguiendo el cruce entre el precio y el SMA. Se genera una señal de compra cuando el precio se rompe el SMA de abajo hacia arriba; se genera una señal de venta cuando el precio se rompe el SMA de arriba hacia abajo.
La lógica central de la estrategia es seguir el cruce de los precios con la media móvil simple de 21 días (SMA). Al mismo tiempo, la estrategia también calcula la SMA de 50 días y la SMA de 200 días, lo que ayuda a determinar una tendencia general.
Concretamente, la estrategia solicita el precio de cierre de la acción en el rango de fechas especificadas y luego calcula diferentes SMA basados en el ciclo SMA de entrada. Si el precio se eleva desde abajo hasta romper el SMA del día 21, se establece una señal de compra; si el precio se eleva desde arriba hasta romper el SMA del día 21, se establece una señal de venta.
Al mismo tiempo que calcula el SMA y determina el cruce, la estrategia sigue la posición actual. Cuando se activa la señal de compra, la estrategia entra en la posición de tenencia; cuando se activa la señal de venta, la estrategia se apaga. De esta manera, se completa el comercio automático basado en el sistema de cruce SMA.
La mayor ventaja de esta estrategia es que es simple, fácil de manejar, fácil de entender y de implementar. El SMA es un indicador de análisis técnico de uso común, y el cruce de SMA es una de las señales de negociación más comunes. Esta estrategia basada en el cruce de indicadores se puede aplicar fácilmente a diferentes acciones y períodos de tiempo, lo que es adecuado para la negociación automatizada.
Otra ventaja es que la estrategia se puede optimizar ajustando los parámetros de SMA. Por ejemplo, se puede probar diferentes combinaciones de ciclos SMA para buscar los parámetros óptimos para adaptarse a las leyes de fluctuación de una acción específica. Además, la estrategia también se puede corroborar y optimizar mediante la adición de otros indicadores.
El mayor riesgo de esta estrategia es que las estrategias de tipo indicador producen más señales erróneas. Por ejemplo, durante los períodos de balance oscilante, los precios pueden cruzar frecuentemente por debajo de la SMA, lo que provoca señales de negociación innecesarias.
Las soluciones comunes incluyen la configuración de stop loss, ajuste de parámetros, o la adición de condiciones de filtrado, etc. Por ejemplo, se puede configurar el porcentaje de pérdida máxima para limitar el riesgo; también se puede ajustar el ciclo SMA, elegir una combinación de parámetros más estables; o agregar la confirmación de otros indicadores para filtrar parte de la señal.
La estrategia puede ser optimizada en las siguientes direcciones:
Prueba y selecciona la mejor combinación de parámetros de SMA. Se puede repasar las diferentes longitudes de SMA para encontrar el ciclo más adecuado.
Añadir otros indicadores de confirmación de FilterSignal, como RSI, MACD, etc. Esto puede filtrar algunas señales falsas.
Añadir lógica de stop loss. Establecer la pérdida máxima tolerada o mover el stop loss puede controlar el riesgo.
Optimización del tiempo de entrada. Se puede considerar el ingreso cerca de puntos de ruptura importantes, en lugar de seguir estrictamente el cruce SMA.
Prueba de estrategias combinadas. Se puede considerar la combinación con otros tipos de estrategias, como el seguimiento de tendencias.
La estrategia permite la automatización de las operaciones mediante el cruce de indicadores SMA simples. La ventaja es que es simple y fácil de manejar y entender; la desventaja es que las señales son frecuentes y fáciles de manipular. Podemos mejorar la eficacia de la estrategia mediante la optimización de parámetros, el aumento de filtros, el stop loss, etc. La estrategia nos proporciona un marco básico que puede enriquecer y mejorar la estrategia agregando constantemente nuevos elementos.
/*backtest
start: 2023-02-15 00:00:00
end: 2024-02-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Price Cross Above/Below SMA Strategy", shorttitle="Tressy Strat", overlay=true)
// Define start and end year inputs
start_year = input.int(2022, title="Start Year")
end_year = input.int(2022, title="End Year")
// Define start and end month inputs
start_month = input.int(1, title="Start Month", minval=1, maxval=12)
end_month = input.int(12, title="End Month", minval=1, maxval=12)
// Define SMA length inputs
sma_length = input.int(21, title="SMA Length")
sma_length_50 = input.int(50, title="50 SMA Length")
sma_length_200 = input.int(200, title="200 SMA Length")
// Filter data within the specified date range
filter_condition = true
filtered_close = request.security(syminfo.tickerid, "D", close[0], lookahead=barmerge.lookahead_on)
// Define SMAs using the input lengths
sma = ta.sma(filtered_close, sma_length)
sma_50 = ta.sma(filtered_close, sma_length_50)
sma_200 = ta.sma(filtered_close, sma_length_200)
// Initialize position
var bool in_position = false
// Condition for a price cross above SMA within the date range
cross_above = filter_condition and ta.crossover(filtered_close, sma)
// Condition for a price cross below SMA within the date range
cross_below = filter_condition and ta.crossunder(filtered_close, sma)
// Buy condition
if cross_above
in_position := true
// Sell condition
if cross_below
in_position := false
// Strategy entry and exit
if cross_above
strategy.entry("Buy", strategy.long)
if cross_below
strategy.close("Buy")
// Plot the SMAs on the chart
plot(sma, color=color.blue, title="21 SMA")
plot(sma_50, color=color.red, title="50 SMA")
plot(sma_200, color=color.orange, title="200 SMA")
// Plot the Buy and Sell signals with "tiny" size
plotshape(cross_above, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny, title="Buy Signal")
plotshape(cross_below, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny, title="Sell Signal")