
A estratégia é uma estratégia de negociação baseada em três linhas negativas e duas linhas de equilíbrio consecutivas. A principal idéia da estratégia é: abrir uma posição maior quando três linhas negativas ocorrem em sequência e o preço de fechamento atual é superior à média de 200 dias; e fechar uma posição mais baixa quando a média de 10 dias cruza com o preço ou quando o preço atinge o ponto de parada ou de perda.
A estratégia, por meio de uma combinação de linha de fundo e linha de equilíbrio, constrói um modelo de negociação simples e fácil de entender. A estratégia, ao mesmo tempo em que capta oportunidades de tendência, também estabelece algumas medidas de controle de risco. No entanto, a estratégia ainda tem espaço para otimização adicional em termos de julgamento de sinais e controle de risco.
/*backtest
start: 2023-05-08 00:00:00
end: 2024-05-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Estrategia de Trading", overlay=true)
// Definir el número de cierres de velas decrecientes consecutivas
var int cierres_decrecientes_consecutivos = 0
num_cierres_decrecientes = input.int(3, title="Número de cierres decrecientes", minval=1)
// Definir el porcentaje de cambio para cerrar la operación
porcentaje_cierre_arriba = input.float(1.5, title="Porcentaje de cierre arriba (%)", step=0.1)
porcentaje_cierre_abajo = input.float(1.0, title="Porcentaje de cierre abajo (%)", step=0.1)
// Definir las medias móviles para el cierre de la operación
periodos_media_movil_cierre = input.int(10, title="Períodos de la media móvil para cierre")
periodos_media_movil_200 = input.int(200, title="Períodos de la media móvil de 200")
// Definir el rango de fechas para la simulación
start_date = timestamp(2024, 1, 1, 0, 0)
end_date = timestamp(2024, 12, 31, 23, 59)
// Calcular la media móvil para el cierre de la operación
sma_cierre = ta.sma(close, periodos_media_movil_cierre)
sma_200 = ta.sma(close, periodos_media_movil_200)
// Calcular si el precio está por encima o por debajo de la media móvil para el cierre de la operación
precio_por_encima_sma_cierre = close > sma_cierre
precio_por_debajo_sma_cierre = close < sma_cierre
// Calcular si se han producido num_cierres_decrecientes consecutivos
if (ta.change(close) < 0)
cierres_decrecientes_consecutivos := cierres_decrecientes_consecutivos + 1
else
cierres_decrecientes_consecutivos := 0
es_cierres_consecutivos = cierres_decrecientes_consecutivos >= num_cierres_decrecientes
// Definir condiciones de entrada y salida de la estrategia dentro del rango de fechas y con el precio por encima de la SMA de 200
condicion_entrada = es_cierres_consecutivos and close > sma_200
condicion_cierre_sma = (precio_por_encima_sma_cierre[1] and not precio_por_encima_sma_cierre) or (not precio_por_encima_sma_cierre[1] and precio_por_encima_sma_cierre)
// Calcular precios de salida basados en porcentajes
precio_salida_arriba = strategy.position_avg_price * (1 + porcentaje_cierre_arriba / 100)
precio_salida_abajo = strategy.position_avg_price * (1 - porcentaje_cierre_abajo / 100)
// Ejecutar operación en largo dentro del rango de fechas y con el precio por encima de la SMA de 200
if (condicion_entrada and strategy.opentrades == 0)
strategy.entry("Long", strategy.long)
// Cerrar operación en largo si se cumple la condición de salida por cambio en el cruce de la media móvil dentro del rango de fechas
if (strategy.position_size > 0 and condicion_cierre_sma)
strategy.close("Long")
// Cerrar operación en largo si el precio alcanza el porcentaje de cierre arriba o abajo dentro del rango de fechas
strategy.exit("Stop Loss", "Long", limit=precio_salida_arriba, stop=precio_salida_abajo)
// Plot para visualizar la media móvil para el cierre de la operación
plot(sma_cierre, color=color.red)
// Plot para visualizar la SMA de 200
plot(sma_200, color=color.blue)