
A estratégia é um sistema de negociação unidirecional baseado em um gráfico de blocos (Renko), combinado com um mecanismo de filtragem de tempo, projetado especificamente para um período de negociação específico. A estratégia usa o ATR (Média de Variação Real) para ajustar dinamicamente o tamanho do bloco, identificando a tendência ascendente por meio do acompanhamento do movimento do preço do bloco, executando transações de múltiplos blocos apenas durante o período de negociação indicado.
A estratégia funciona com base nos seguintes princípios:
Mecanismos de construção de blocosO sistema determina o tamanho do bloco de duas maneiras - o valor fixo ou o ajuste dinâmico baseado no ATR. No modo ATR, o tamanho do bloco é igual ao valor ATR de um determinado período (default 5) multiplicado por um múltiplo (default 1.0) que permite que o tamanho do bloco se adapte à volatilidade do mercado.
Direção determina lógicaA estratégia segue a mudança de preço, formando blocos ascendentes quando o preço aumenta mais do que o tamanho do bloco em relação ao preço de fechamento do bloco anterior; os declínios acima do tamanho do bloco formam blocos descendentes; a reversão de tendência ocorre quando o preço muda mais do que o dobro do tamanho do bloco.
Geração de sinais de transação: Produz um sinal de compra quando a direção do bloco nunca é definida ou quando a queda se transforma em alta; Produz um sinal de venda quando a direção do bloco nunca é definida ou quando a alta se transforma em baixa.
Filtro de tempoA estratégia é executar as negociações apenas no período de negociação designado (de 04:35 a 14:30 por defeito), que geralmente corresponde ao período de atividade dos principais mercados. Fora do período de negociação, o sistema automaticamente elimina a posição para evitar o risco de overnight.
Modelo de transação unidirecionalA estratégia consiste em executar apenas transações multi-header, sem operações de shorting, e é adequada para um mercado em que a tendência de baixa é evidente ou proibida.
Com base na análise de código, a estratégia tem as seguintes vantagens significativas:
Filtro de ruídoO gráfico de blocos possui a capacidade natural de filtrar o ruído do mercado e só forma novos blocos se a variação do preço for superior a um determinado limiar, evitando uma reação excessiva a pequenas flutuações de preços.
Ajuste de adaptaçãoA estratégia pode se adaptar a diferentes ambientes de mercado e condições de volatilidade, aumentando o tamanho do bloco em períodos de alta volatilidade e diminuindo o tamanho do bloco em períodos de baixa volatilidade.
Gestão de Riscos de TempoO filtro de tempo garante que as negociações sejam feitas apenas nos períodos de maior atividade e maior liquidez do mercado, evitando períodos de menor liquidez ou flutuações anormais, como a noite e o início da manhã.
Direção claraA estratégia é focada na captura de tendências ascendentes, com uma lógica clara e concisa, evitando a perda de transações frequentes e de comissões causadas pela troca de vagas.
Ajuda visualA estratégia oferece opções de visualização de etiquetas de sinal de compra e venda e pontos altos e baixos do bloco, para que os comerciantes entendam intuitivamente a dinâmica do mercado e o desempenho da estratégia.
Gestão de fundosA estratégia usa um modelo de negociação de quantificação de fundos, que pode calcular automaticamente o tamanho da posição com base no capital inicial, reduzindo a complexidade da gestão de fundos.
Apesar do bom desenho da estratégia, existem os seguintes riscos potenciais:
Reação tardiaO gráfico de blocos é essencialmente um indicador de atraso, a formação de novos blocos requer que o preço atinja uma determinada amplitude de movimento, o que pode levar a um atraso relativo nos tempos de entrada e saída, podendo perder os melhores pontos de negociação em mercados de rápida reversão.
Falta de flexibilidade nas linhas curtasA estratégia só produz sinais quando novos blocos se formam, podendo perder oportunidades de lucro no curto prazo, especialmente em mercados de baixa volatilidade.
Limitação unidirecionalA estratégia não pode ser lucrativa em mercados de baixa, e pode até mesmo ser perdedora, e a eficácia da estratégia é significativamente reduzida quando o mercado está em uma tendência de baixa por um longo período.
Riscos de filtragem de tempoA configuração de horário fixo de negociação pode perder oportunidades importantes no horário não comercial, além de poder ocorrer posições claras e reentrada desnecessárias na fronteira do horário comercial.
Sensibilidade do parâmetroO desempenho da estratégia é altamente dependente da configuração dos parâmetros de tamanho do bloco, e a escolha inadequada dos parâmetros pode levar a excesso de negociação ou a oportunidades perdidas.
Solução:
De acordo com a análise do código, a estratégia pode ser otimizada em vários aspectos:
Integração de múltiplos indicadoresCombinação com outros indicadores técnicos como RSI, MACD ou cruzamentos de médias móveis como sinais de confirmação para melhorar a qualidade de entrada. Isso evita os falsos sinais causados pela mera dependência da forma do preço, especialmente em mercados turbulentos.
Mecanismo de parada dinâmicaIntrodução de funções de stop-loss de rastreamento, como stop-loss dinâmico baseado em ATR, para proteger os lucros obtidos, preservando o espaço de cotação. Isso é especialmente importante para capturar grandes tendências.
Expansão de transações bidirecionaisA estratégia é baseada em três princípios: aumentar a capacidade de negociação em branco, permitindo que a estratégia seja igualmente lucrativa em mercados de baixa, e melhorar a adaptabilidade da estratégia em qualquer clima.
Filtro de tempo inteligenteO filtro de tempo fixo é atualizado para filtro de tempo dinâmico baseado na atividade do mercado, por exemplo, com a combinação de análise de volume de transação, negociação ativa em momentos de alta liquidez e operação conservadora em momentos de baixa liquidez.
Análise de múltiplos períodosIntrodução da análise de múltiplos quadros temporais, por exemplo, usando a direção da tendência de quadros temporais de nível mais elevado como condição de filtragem de negociação, apenas negociando quando a direção da tendência principal é consistente.
Parâmetros de otimização adaptados: Desenvolver um mecanismo de adaptação de parâmetros, ajustando o ciclo e o multiplicador do ATR de acordo com a dinâmica do mercado, para que a estratégia se adapte melhor a diferentes circunstâncias do mercado.
Controle de exposição ao riscoAumento de algoritmos de gerenciamento de posições, ajustamento do tamanho das negociações de acordo com a volatilidade do mercado e a intensidade do sinal, controle da exposição ao risco.
Essas orientações de otimização visam aumentar a robustez e a adaptabilidade da estratégia, reduzindo os prejuízos em condições de mercado desfavoráveis e maximizando a lucratividade em condições de mercado favoráveis.
A estratégia de negociação unidirecional é um sistema de acompanhamento de tendências que combina a dinâmica dos preços com o filtro do tempo. Através do mecanismo de construção do gráfico de blocos, a estratégia é capaz de filtrar efetivamente o ruído do mercado, concentrando-se em capturar mudanças de preços contínuas. Através do filtro do tempo, a estratégia evita os períodos de inatividade do mercado e reduz o risco de manter posições durante a noite.
As principais vantagens da estratégia são a sua lógica de negociação simples e clara, o seu design de bloco de tamanho adaptável e o seu rigoroso gerenciamento de tempo, o que a torna especialmente adequada para mercados com grande volatilidade, mas que apresentam uma tendência ascendente em geral. No entanto, a sua característica de negociação unidirecional e a sua reação de atraso também são limitações a ter em conta.
Com a introdução de medidas de otimização, como confirmação de múltiplos indicadores, mecanismo de parada dinâmico, capacidade de negociação bidirecional e filtragem de tempo inteligente, a estratégia promete melhorar ainda mais seu desempenho em diferentes cenários de mercado. É um quadro estratégico a considerar para investidores que buscam negociações estáveis e estão dispostos a sacrificar parte da flexibilidade em troca de sinais de negociação mais claros.
/*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)//在交易时间内显示浅蓝色背景