
Este artículo presenta una estrategia de negociación de tendencias basada en múltiples medias móviles, llamada “Estrategia de negociación de tendencias basada en múltiples medias”. La estrategia se aplica principalmente al mercado de futuros de Nasdaq, para capturar las tendencias al alza del mercado mediante el análisis de la posición de los precios con respecto a las medias móviles largas, medias y cortas, y para cerrar todas las posiciones en un momento específico.
La estrategia utiliza tres promedios móviles simples (SMA): largo (con 200 ciclos por defecto), mediano (con 21 ciclos por defecto) y corto (con 9 ciclos por defecto). La estrategia dispara una señal de compra cuando los precios están por encima de las medias de largo y mediano plazo, y se produce un cruce en la mediana de corto plazo.
Calcula las medias móviles simples de largo plazo (default 200 periodos), mediano plazo (default 21 periodos) y corto plazo (default 9 periodos).
Para determinar si el precio actual es superior al promedio a largo plazo y al promedio a mediano plazo.
Para determinar si el precio actual cruza por encima de la línea media a corto plazo.
Cuando se cumplen las condiciones 2 y 3 y no se tiene una posición en ese momento, se activa la señal de compra.
Una vez comprado, se establece un stop y un stop loss de un número fijo de puntos, y se cancela cuando el precio toca el stop o el stop loss.
A las 17:00 de cada día de negociación, todas las posiciones se cierran.
Sencilla y fácil de entender: La estrategia se basa en promedios móviles, el principio es simple, fácil de entender y de implementar.
Seguimiento de tendencias: La estrategia capta las tendencias al alza del mercado mediante el análisis de la posición de los precios con respecto a las diferentes medias periódicas.
Control de riesgo: La estrategia establece paros y pérdidas fijas para ayudar a controlar el riesgo de una sola operación.
Posicionamiento automático: la estrategia se aplica a la hora de la posición automática en cada día de negociación, evitando el riesgo de la noche a la mañana.
Optimización de parámetros: el rendimiento de las estrategias puede ser sensible a los parámetros del ciclo medio y necesita ser optimizado para diferentes mercados y variedades.
Mercado en turbulencia: En un entorno de mercado en turbulencia, las frecuentes señales de cruce pueden conducir a un mal desempeño de la estrategia.
Riesgo de deslizamiento: en momentos de gran volatilidad en el mercado, las paradas y pérdidas de puntos fijos pueden no ejecutarse como se esperaba, lo que genera riesgo de deslizamiento.
Paradas y pérdidas dinámicas: ajuste dinámico de paradas y puntos de parada en función de la volatilidad del mercado o el movimiento de los precios para optimizar el riesgo-beneficio.
Filtración de tendencias: Introducción de otros indicadores técnicos, como el ADX, para confirmar la intensidad de la tendencia, filtrando las falsas señales en los mercados de oscilación.
Adaptación a múltiples variedades: mejora de la estrategia para adaptarse a diferentes variedades de futuros y características del mercado.
Gestión de fondos: introducción de reglas de gestión de fondos más complejas, como la gestión de posiciones y el control de riesgos, para mejorar la solidez de las estrategias.
La “estrategia de comercio de tendencias basada en múltiples medias” es una estrategia de seguimiento de tendencias sencilla y fácil de entender que capta las tendencias al alza en el mercado mediante el análisis de la posición de los precios con respecto a las diferentes medias periódicas. La estrategia establece un número fijo de puntos de stop-loss y compensa automáticamente las posiciones en un momento determinado de cada día para controlar el riesgo. Sin embargo, la estrategia puede tener un mal desempeño en mercados convulsos y enfrentar problemas de optimización de parámetros y riesgo de deslizamiento.
/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Médias Móveis de MarcosJR", overlay=true)
// Inputs para data inicial e final
start_year = input.int(2020, title="Ano Inicial")
start_month = input.int(1, title="Mês Inicial")
start_day = input.int(1, title="Dia Inicial")
end_year = input.int(2020, title="Ano Final")
end_month = input.int(12, title="Mês Final")
end_day = input.int(31, title="Dia Final")
// Convertendo dia, mês e ano para timestamp
start_date = timestamp(start_year, start_month, start_day, 00, 00)
end_date = timestamp(end_year, end_month, end_day, 23, 59)
// Condição para verificar se a data está dentro do intervalo especificado
date_within_range = true
// Parâmetros para os períodos das médias móveis
ma_short_period = input.int(9, title="MA Curta")
ma_medium_period = input.int(21, title="MA Média")
ma_long_period = input.int(200, title="MA Longa")
// Definindo médias móveis
ma_short = ta.sma(close, ma_short_period)
ma_medium = ta.sma(close, ma_medium_period)
ma_long = ta.sma(close, ma_long_period)
// Plotando as médias móveis no gráfico com espessura aumentada
plot(ma_short, color=color.blue, title="MA Curta", linewidth=2)
plot(ma_medium, color=color.orange, title="MA Média", linewidth=2)
plot(ma_long, color=color.red, title="MA Longa", linewidth=2)
// Verificando se o preço está acima das médias móveis
above_ma_long = close > ma_long
above_ma_medium = close > ma_medium
// Verificando se o preço tocou na média móvel curta
touch_ma_short = ta.crossover(close, ma_short)
// Condições de compra
buy_condition = date_within_range and above_ma_long and above_ma_medium and touch_ma_short
// Sinais de entrada e saída de compra
var float entry_price = na
if (buy_condition and strategy.opentrades == 0) // Verifica se não há operações em andamento
entry_price := close // Define o preço de entrada ao comprar
// Parâmetros para o tamanho do stop gain e stop loss em pontos
stop_gain_points = input.int(100, title="Stop Gain (pontos)", minval=1)
stop_loss_points = input.int(100, title="Stop Loss (pontos)", minval=1)
// Calcular o preço de saída alvo (Stop Gain) e de stop loss
target_price = entry_price + stop_gain_points * syminfo.mintick
stop_loss_price = entry_price - stop_loss_points * syminfo.mintick
// Sair da operação de compra quando o preço atingir o stop gain ou stop loss
if (strategy.position_size > 0)
strategy.exit("Venda", "Compra", limit=target_price, stop=stop_loss_price)
// Sinais de entrada de compra
if (buy_condition and strategy.opentrades == 0) // Verifica se não há operações em andamento
strategy.entry("Compra", strategy.long)
// Plotando setas de compra
plotshape(series=buy_condition, title="Sinal de Compra", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
// Função para verificar se é 17:00 do mesmo dia
is_17_oclock_same_day = hour == 17 and minute == 0 and hour[1] < 17
// Sair de todas as operações às 17:00 do mesmo dia
if (is_17_oclock_same_day)
strategy.close_all()