
La estrategia es un sistema de negociación unidireccional basado en el gráfico de bloques Renko, combinado con un mecanismo de filtro de tiempo, diseñado específicamente para un período de negociación específico. La estrategia utiliza ATR (la media de la amplitud de fluctuación real) para ajustar dinámicamente el tamaño del bloque, identificar tendencias al alza mediante el seguimiento del movimiento de los precios que se forman en los bloques, y ejecutar operaciones múltiples solo en el período de negociación designado.
La estrategia se basa en los siguientes principios centrales:
Mecanismo de construcción de los bloquesEl sistema determina el tamaño de los bloques de dos maneras: mediante un valor fijo o un ajuste dinámico basado en el ATR. En el modo ATR, el tamaño del bloque es igual al ATR de un período específico (default 5) multiplicado por un múltiplo (default 1.0) que permite que el tamaño del bloque se adapte a la volatilidad del mercado.
Dirección determina la lógicaEstrategia de seguimiento de los movimientos de precios: los movimientos ascendentes se forman cuando el precio es más alto que el tamaño del bloque; los movimientos bajos se forman cuando el precio es más alto que el tamaño del bloque; los movimientos de reversión se producen cuando el precio es más de dos veces el tamaño del bloque.
Generación de señales de comercio: genera una señal de compra cuando la dirección del bloque nunca está definida o cuando la caída se convierte en subida; genera una señal de venta cuando la dirección del bloque nunca está definida o cuando la subida se convierte en caída.
El filtro del tiempoLa estrategia consiste en ejecutar operaciones solo en el período de negociación designado (de 04:35 a 14:30 por defecto), que generalmente corresponde a las horas activas de los principales mercados. Al salir de la hora de negociación, el sistema automáticamente cierra las posiciones para evitar el riesgo de la noche a la mañana.
Modelo de transacción en una sola direcciónLa estrategia consiste en ejecutar solo operaciones de varios titulares, sin operaciones de descubierto, y en un entorno de mercado en el que la tendencia a la bearish es evidente o prohibida.
Basado en el análisis de código, la estrategia tiene las siguientes ventajas:
Filtrado de ruidoEl gráfico de bloques tiene la capacidad natural de filtrar el ruido del mercado, y sólo se formarán nuevos bloques si los precios se mueven por encima de un determinado umbral, lo que evita una reacción excesiva a las pequeñas fluctuaciones de precios.
Adaptación y ajusteA través de ATR, la estrategia puede adaptarse al tamaño de los bloques de forma dinámica para adaptarse a diferentes entornos y condiciones de volatilidad del mercado, aumentando el tamaño de los bloques en períodos de alta volatilidad y reduciendo el tamaño de los bloques en períodos de baja volatilidad.
Gestión de riesgos de tiempoEl filtro de tiempo asegura que las operaciones se realicen solo en los momentos en que el mercado es más activo y de mayor liquidez, evitando los momentos en que puede haber poca liquidez o fluctuaciones anormales, como la noche y la mañana.
La dirección está clara.La estrategia se centra en capturar tendencias al alza, con una lógica clara y concisa, evitando la pérdida de transacciones frecuentes y de comisiones que conlleva el cambio de espacio en exceso.
Ayuda visualLas estrategias ofrecen opciones de visualización de las etiquetas de las señales de compra y venta y los puntos altos y bajos de los bloques, lo que permite a los operadores comprender de forma intuitiva la dinámica del mercado y el comportamiento de las estrategias.
Administración de fondosLa estrategia adopta un modelo de comercio de capital cuantitativo, que puede calcular automáticamente el tamaño de la posición en función del capital inicial, lo que reduce la complejidad de la administración de fondos.
A pesar de la buena concepción de la estrategia, existen los siguientes riesgos potenciales:
Reacción tardíaEl gráfico de bloques es esencialmente un indicador de retraso, la formación de nuevos bloques requiere que los precios alcancen una amplitud de movimiento específica, lo que puede causar un retraso relativo en el tiempo de entrada y salida, y puede perderse el mejor punto de negociación en un mercado de rápida inversión.
Falta de flexibilidad en las líneas cortasLas estrategias que sólo generan señales cuando se forman nuevos bloques pueden perder oportunidades de ganancias en el corto plazo, especialmente si no funcionan bien en mercados convulsionados.
Limitaciones unidireccionalesLa estrategia no puede ser rentable en un mercado bajista, y puede incluso ser perdedora, y la estrategia es menos efectiva cuando el mercado está en una tendencia bajista durante mucho tiempo.
El riesgo de filtrar el tiempoLa configuración de la hora de negociación fija puede perder oportunidades importantes en la hora de no negociación, mientras que en la intersección de la hora de negociación pueden producirse operaciones de liquidación y reingreso innecesarias.
Sensibilidad de los parámetrosEl rendimiento de la estrategia depende en gran medida de la configuración de los parámetros de tamaño de bloque, y la elección incorrecta de los parámetros puede causar exceso de comercio o oportunidades perdidas.
Solución:
Según el análisis de código, la estrategia puede ser optimizada en los siguientes aspectos:
Fusión de varios indicadoresCombinación con otros indicadores técnicos como el RSI, el MACD o el cruce de las medias móviles como señal de confirmación para mejorar la calidad de entrada. De esta manera, se evita la falsa señal de que depende únicamente de la forma de los precios, especialmente en los mercados convulsionados.
Mecanismo de detención de pérdidas dinámicasIntroducción de la función de seguimiento de las pérdidas, como las pérdidas dinámicas basadas en ATR, que protegen los beneficios obtenidos al tiempo que conservan el espacio en la cima. Esto es especialmente importante para capturar las grandes tendencias.
Expansión de las transacciones bidireccionalesEl objetivo de la estrategia es mejorar la adaptabilidad de la estrategia a todo tiempo.
El filtro de tiempo inteligente: la actualización de filtros de tiempo fijo a filtros de tiempo dinámicos basados en la actividad del mercado, por ejemplo, la combinación de análisis de volumen de transacciones, el comercio activo en tiempos de alta liquidez y la operación conservadora en tiempos de baja liquidez.
Análisis de muchos ciclosIntroducción de análisis de múltiples marcos de tiempo, por ejemplo, utilizando la dirección de la tendencia de los marcos de tiempo de nivel más alto como condición de filtración de la operación, y solo operando cuando la dirección de la tendencia es coincidente en el mayor de los casos.
Parámetros de optimización adaptadosDesarrollo de un mecanismo de adaptación de parámetros para ajustar los ciclos y multiplicadores de ATR en función de la dinámica de las condiciones del mercado, para que las estrategias se adapten mejor a los diferentes entornos del mercado.
Control de la exposición al riesgoAumentar el algoritmo de gestión de posiciones, ajustar el tamaño de las transacciones en función de la volatilidad del mercado y la intensidad de las señales, y controlar la exposición al riesgo.
Estas orientaciones de optimización tienen como objetivo mejorar la solidez y la adaptabilidad de las estrategias, reducir las pérdidas en condiciones de mercado desfavorables y maximizar la rentabilidad en condiciones de mercado favorables.
El filtro de tiempo de los gráficos de bloques es un sistema de seguimiento de tendencias que combina el movimiento de los precios y el filtro de tiempo. Mediante la estructura de los gráficos de bloques, la estrategia puede filtrar eficazmente el ruido del mercado y se centra en capturar los cambios de precios continuos.
Las principales ventajas de la estrategia residen en su lógica de negociación clara y concisa, su diseño de tamaño de bloque adaptativo y su estricta gestión del tiempo, lo que la hace especialmente adecuada para mercados con gran volatilidad pero con tendencia alcista en general. Sin embargo, sus características de negociación unidireccional y su reacción de retraso también son limitaciones a tener en cuenta.
La introducción de medidas de optimización como la confirmación de múltiples indicadores, el mecanismo de stop loss dinámico, la capacidad de negociación bidireccional y el filtrado de tiempo inteligente, promete mejorar aún más su desempeño en diferentes entornos de mercado. Es un marco estratégico que vale la pena considerar para los inversores que buscan una negociación sólida y están dispuestos a sacrificar parte de su flexibilidad a cambio de una señal de negociación más clara.
/*backtest
start: 2025-06-22 00:00:00
end: 2025-07-22 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":200000}]
args: [["RunMode",1,358374]]
*/
//@version=5
strategy("Renko Long-Only Strategy with Time Filter", overlay=true, default_qty_value = 10)
// --- 输入参数 ---
atrLength = input.int(5, "ATR Period", minval=1)//ATR周期
atrMult = input.float(1.0, "ATR Multiplier", minval=0.1, step=0.1)//ATR乘数
showWicks = input(false, "Show Wick Lines")//是否显示上下影线
showLabels = input(true, "Show Buy/Sell Labels")//是否显示买卖标签
// --- 交易时间设置(24小时制,从4:30 AM到2:30 PM)---
startHour = input.int(4, "Start Hour (24h)", minval=0, maxval=23)//开始交易小时
startMinute = input.int(30, "Start Minute", minval=0, maxval=59)//开始交易分钟
endHour = input.int(14, "End Hour (24h)", minval=0, maxval=23)//结束交易小时
endMinute = input.int(25, "End Minute", minval=0, maxval=59)//结束交易分钟
// --- 时间计算 ---
//检查当前是否在交易时间范围内
isTradingTime() =>
timeHour = hour(time("1"))//获取当前小时
timeMinute = minute(time("1"))//获取当前分钟
// 将时间转换为自午夜起的分钟数进行比较
currentTime = timeHour * 60 + timeMinute//当前时间(分钟)
sessionStart = startHour * 60 + startMinute//交易开始时间(分钟)
sessionEnd = endHour * 60 + endMinute//交易结束时间(分钟)
currentTime >= sessionStart and currentTime <= sessionEnd//判断是否在交易时间范围内
inTradingHours = isTradingTime()//当前是否在交易时间内
timeToClose = not inTradingHours and inTradingHours[1]//刚刚退出交易时间,需要平仓
// --- 砖块计算 ---
var float boxSize = na//砖块大小
var float lastClose = na//最后一个砖块的收盘价
var int direction = 0//方向:0=未定义,1=上涨,-1=下跌
var float wickHigh = na//上影线最高点
var float wickLow = na//下影线最低点
var bool newBrick = false//是否形成新砖块
var int prevDir = 0//前一个方向
// --- 全局信号变量 ---
var bool buySignal = false//买入信号
var bool sellSignal = false//卖出信号
// 更新基于ATR的砖块大小
boxSize :=ta.atr(atrLength) * atrMult//计算砖块大小
// 检测砖块形成条件
upMove = not na(lastClose) and (close - lastClose >= boxSize)//上涨移动
downMove = not na(lastClose) and (lastClose - close >= boxSize)//下跌移动
//反转条件:当前为上升趋势但下跌超过2倍砖块大小,或当前为下降趋势但上涨超过2倍砖块大小
reversal = (direction == 1 and downMove and (lastClose - close >= boxSize * 2)) or
(direction == -1 and upMove and (close - lastClose >= boxSize * 2))
// 生成新砖块
if na(lastClose)//初始化
lastClose := close//设置初始收盘价
wickHigh := high//设置初始最高价
wickLow := low//设置初始最低价
else if upMove and direction >= 0//继续上升趋势
lastClose := lastClose + boxSize//更新收盘价
prevDir := direction//保存前一个方向
direction := 1//设置当前方向为上升
wickHigh := high//更新上影线
wickLow := low//更新下影线
newBrick := true//标记形成新砖块
else if downMove and direction <= 0//继续下降趋势
lastClose := lastClose - boxSize//更新收盘价
prevDir := direction//保存前一个方向
direction := -1//设置当前方向为下降
wickHigh := high//更新上影线
wickLow := low//更新下影线
newBrick := true//标记形成新砖块
else if reversal//趋势反转
lastClose := direction == 1 ? lastClose - boxSize : lastClose + boxSize//根据当前方向反向更新收盘价
prevDir := direction//保存前一个方向
direction := direction * -1//反转方向
wickHigh := high//更新上影线
wickLow := low//更新下影线
newBrick := true//标记形成新砖块
else//没有新砖块形成
wickHigh := math.max(wickHigh, high)//更新上影线最高点
wickLow := math.min(wickLow, low)//更新下影线最低点
newBrick := false//标记没有形成新砖块
// 更新信号(必须在全局范围内)
buySignal := direction == 1 and prevDir != 1//方向从非上升变为上升时产生买入信号
sellSignal := direction == -1 and prevDir != -1//方向从非下降变为下降时产生卖出信号
// --- 策略逻辑 ---
// 只在形成新砖块、K线确认且在交易时间内进入
enterLong = buySignal and newBrick and barstate.isconfirmed and inTradingHours//买入条件
exitLong = (sellSignal and newBrick and barstate.isconfirmed) or timeToClose//卖出条件
// 执行交易
if (enterLong)
strategy.entry("Long", strategy.long)//开仓做多
if (exitLong)
strategy.close("Long")//平仓
// --- 绘图 ---
color brickColor = direction == 1 ? color.green : direction == -1 ? color.red : color.gray//根据方向设置砖块颜色
plot(lastClose, "Renko Close", brickColor, 2, plot.style_linebr)//绘制Renko收盘价
// 如果启用,绘制影线
plot(showWicks ? wickHigh : na, "High", color.new(brickColor, 70), 1, plot.style_circles)//绘制上影线
plot(showWicks ? wickLow : na, "Low", color.new(brickColor, 70), 1, plot.style_circles)//绘制下影线
// 绘制交易时间背景
bgcolor(inTradingHours ? color.new(color.blue, 90) : na)//在交易时间内显示浅蓝色背景