
Esta estrategia se llama “trend tracking strategy” y se basa en el sistema de medias de SMA. Su idea principal es construir una señal de negociación utilizando medias de SMA de diferentes longitudes de parámetros para entrar en el punto de ruptura, al tiempo que se combina con el control de riesgo del mecanismo de stop loss.
La estrategia utiliza dos líneas medias de SMA, SMA1 y SMA2. Donde SMA1 tiene una longitud de 1 y SMA2 tiene una longitud de 3. La estrategia calcula estas dos líneas medias de SMA para generar una señal de compra al atravesar SMA2 por encima de SMA1 y una señal de venta al atravesar SMA2 por debajo de SMA1 para capturar la tendencia de los precios.
Concretamente, la estrategia determina la relación de ruptura de la línea media SMA a través de las funciones ta.crossover y ta.crossunder, lo que genera las variables longCondition y shortCondition Bull. Cuando la longCondition es verdadera, genera una señal de compra; cuando la shortCondition es verdadera, genera una señal de venta. La estrategia se inicia en el punto de señal y al mismo tiempo actualiza las variables profitAccumulated y lastTradeProfit para rastrear los beneficios acumulados.
Para controlar el riesgo, la estrategia también establece un mecanismo de stop loss basado en un número fijo de puntos. Comenzando desde el punto de entrada, si el precio alcanza el punto de stop loss establecido, se activa la posición plana de la orden de stop loss.
La mayor ventaja de esta estrategia es que utiliza la función de seguimiento de tendencias de la línea media SMA para capturar eficazmente los cambios en la tendencia de los precios. En comparación con la estrategia de una sola línea media, la estrategia de dos líneas medias puede utilizar la relación cruzada entre las líneas medias para determinar la dirección de la tendencia y así generar una señal de negociación. Además, la estrategia incorpora un mecanismo de stop loss para controlar eficazmente las pérdidas individuales.
El principal riesgo de esta estrategia reside en que la estrategia de la línea media es propensa a generar falsas señales. Cuando los precios se mueven, las líneas medias SMA pueden cruzarse con frecuencia, lo que provoca señales de negociación innecesarias. En este caso, si no hay una pérdida de efecto, se pueden generar mayores pérdidas.
La estrategia puede ser optimizada en los siguientes aspectos:
Ajuste los parámetros SMA para encontrar la mejor combinación de longitud de línea media. Se puede obtener el parámetro óptimo recorriendo la medición.
Aumentar las condiciones de filtración y establecer condiciones de ruptura de precios cerca de los cruces de línea media para evitar falsas señales.
Se pueden probar diferentes tipos de paradas, como paradas móviles, paradas de suspensión, etc.
Aumentar el control del tamaño de la posición y optimizar la eficiencia del uso de los fondos.
En general, esta estrategia es una estrategia típica de seguimiento de tendencias. Utiliza la relación de ruptura de la línea media SMA para determinar la dirección de la tendencia de los precios y entrar en el punto de cambio de tendencia.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © cesarpieres72
//@version=5
strategy("Estrategia SMA y Ganancias Acumuladas con Stop Loss", shorttitle="SMA_Ganancias", overlay=true)
// Definir las variables de las medias móviles
sma1_length = input(1, title="SMA 1 Longitud")
sma2_length = input(3, title="SMA 2 Longitud")
// Calcular las medias móviles
sma1 = ta.sma(close, sma1_length)
sma2 = ta.sma(close, sma2_length)
// Condiciones para las señales de compra y venta
longCondition = ta.crossover(sma1, sma2)
shortCondition = ta.crossunder(sma1, sma2)
// Acumular las ganancias
var float profitAccumulated = 0.0
var float lastTradeProfit = na
if (longCondition)
strategy.entry("Buy", strategy.long)
lastTradeProfit := strategy.netprofit - (profitAccumulated + lastTradeProfit)
profitAccumulated := strategy.netprofit
if (shortCondition)
strategy.entry("Sell", strategy.short)
lastTradeProfit := strategy.netprofit - (profitAccumulated + lastTradeProfit)
profitAccumulated := strategy.netprofit
// Mostrar las señales en el gráfico
plot(sma1, color=color.blue, title="SMA 1")
plot(sma2, color=color.red, title="SMA 2")
// Añadir stop loss
stopLossPips = input(5000, title="Stop Loss (en pips)")
stopLossPrice = strategy.position_avg_price * (1 - stopLossPips * syminfo.mintick)
strategy.exit("SL", "Buy", stop=stopLossPrice)