Este artículo presenta una estrategia de trading de tendencia basada en múltiples promedios móviles llamada
La estrategia emplea tres promedios móviles simples (SMA): a largo plazo (default 200 periodos), a mediano plazo (default 21 periodos) y a corto plazo (default 9 periodos). Una señal de compra se activa cuando el precio está por encima de los promedios móviles a largo y mediano plazo y cruza por encima del promedio móvil a corto plazo, siempre que no haya posiciones abiertas. La estrategia también establece niveles de stop-gain y stop-loss de punto fijo para gestionar el riesgo. Además, todas las posiciones se cierran a las 17:00 cada día de negociación.
Calcular las medias móviles simples a largo plazo (default 200 periodos), a medio plazo (default 21 periodos) y a corto plazo (default 9 periodos).
Determinar si el precio actual está por encima de las medias móviles a largo y mediano plazo.
Compruebe si el precio actual se cruza por encima del promedio móvil a corto plazo.
Cuando ambas condiciones 2 y 3 se cumplan y no hay posiciones abiertas, se activa una señal de compra.
Después de comprar, fije los niveles de stop-gain y stop-loss de punto fijo. Cierre la posición cuando el precio alcance cualquiera de los niveles.
Cierre todas las posiciones a las 17:00 cada día de negociación.
Sencilla y fácil de entender: La estrategia se basa en medias móviles, por lo que es sencilla de comprender e implementar.
Seguimiento de tendencias: mediante el análisis de la posición de los precios en relación con las medias móviles de diferentes períodos, la estrategia captura eficazmente las tendencias al alza del mercado.
Control de riesgos: La estrategia incorpora niveles de stop-gain y stop-loss de punto fijo, lo que ayuda a gestionar el riesgo para las operaciones individuales.
Cierre automático de posiciones: La estrategia cierra automáticamente todas las posiciones en un momento específico cada día de negociación, evitando los riesgos de la noche a la mañana.
Optimización de parámetros: el rendimiento de la estrategia puede ser sensible a los parámetros de la media móvil del período, lo que requiere una optimización para diferentes mercados e instrumentos.
Mercados agitados: en condiciones de mercado agitadas, las señales cruzadas frecuentes pueden conducir a un rendimiento de la estrategia subóptimo.
Riesgo de deslizamiento: durante la alta volatilidad del mercado, es posible que los niveles de stop-gain y stop-loss de punto fijo no se ejecuten según lo previsto, lo que resulta en un riesgo de deslizamiento.
Las operaciones de compensación de pérdidas y ganancias se realizarán de forma simultánea y sin interrupción.
Filtros de tendencia: Incorpore indicadores técnicos adicionales, como el ADX, para confirmar la fuerza de la tendencia y filtrar señales falsas en mercados agitados.
Adaptación a múltiples instrumentos: perfeccionar la estrategia para adaptarse a los diferentes instrumentos de futuros y características del mercado.
Gestión de fondos: introducir normas de gestión de fondos más sofisticadas, como el tamaño de las posiciones y el control de riesgos, para mejorar la solidez de la estrategia.
La
/*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()