
A estratégia de parada dinâmica SuperTrend com filtro de tempo é um sistema de negociação quantitativa baseado na auto-adaptação da volatilidade, com o indicador SuperTrend como ferramenta de rastreamento de parada dinâmica. A estratégia capta a tendência do mercado identificando o momento em que o preço ultrapassa a linha de meta do SuperTrend e combina vários mecanismos de filtragem, incluindo o filtro de tempo de Moscou, o filtro de nível de preço e a função de parada de percentual fixo.
O funcionamento central da estratégia baseia-se nos seguintes mecanismos fundamentais:
Calculação do indicador SuperTrendA estratégia usa o indicador ATR (ciclo padrão 23) e o fator multiplicador (o padrão 1.8) para calcular a linha de SuperTrend, que ajusta automaticamente sua posição de acordo com a volatilidade do mercado, formando suporte e resistência dinâmicos.
Geração de sinais de transação:
Opções de Modo de NegociaçãoA estratégia oferece três modalidades de negociação:
Sistema de filtragem múltipla:
Mecanismo de travagem dinâmicaA estratégia implementa um stop-loss de porcentagem fixa baseado no preço de entrada (default 1.5%), e, uma vez que o preço atinge o nível de stop-loss, a estratégia elimina automaticamente e bloqueia os lucros. O nível de stop-loss pode ser visualizado no gráfico e o usuário pode ativar ou desativar essa função de visualização conforme necessário.
Ao analisar o código em profundidade, conclui-se que as vantagens mais notáveis são:
Adaptabilidade da taxa de flutuaçãoO indicador SuperTrend é baseado no cálculo do ATR e pode ajustar automaticamente a distância de acompanhamento de acordo com a situação de volatilidade do mercado, aumentando a distância de proteção em mercados de alta volatilidade e acompanhando mais de perto os preços em mercados de baixa volatilidade, aumentando a capacidade de adaptação da estratégia a diferentes ambientes de mercado.
Controle de riscos múltiplosA estratégia integra três níveis de gerenciamento de risco: filtro de tempo, filtro de preço e configuração de parada. Este mecanismo de controle de risco multidimensional aumenta significativamente a segurança das transações.
Flexível com a direção das transaçõesA estratégia pode ser adaptada a diferentes preferências de mercado e restrições de negociação.
Otimização de Inteligência de TempoO filtro exclusivo do horário de Moscou permite a negociação em períodos de tempo específicos, ajudando a evitar os períodos de ineficiência do mercado e capturar de forma específica as janelas de negociação mais eficientes, especialmente para os comerciantes que precisam considerar os períodos de negociação internacionais.
Vantagens da visualização: fornece uma referência visual intuitiva de negociação, reduzindo a complexidade da análise, através de mudanças de cor de fundo, cores de linha SuperTrend e marcas de nível de parada.
Otimização de comissões de designA estratégia leva em consideração a comissão interna (0,06%), o que faz com que os resultados da retrospectiva estejam mais próximos do cenário real.
Mecanismo de execução de preços de fechamentoA estratégia usa o process_orders_on_close=true para executar ordens, reduzindo o efeito do ponto de deslizamento e aumentando a confiabilidade da retrospecção.
Apesar da estratégia ser bem concebida, existem os seguintes riscos potenciais:
Reversão de tendência atrasadaO indicador de SuperTrend é essencialmente um indicador de atraso, que pode produzir um sinal de atraso quando o mercado se reverte drasticamente, resultando em entrada ou saída atrasada, aumentando o risco de retirada. A solução é ajustar o ciclo ATR e o fator multiplicador para equilibrar a sensibilidade e a estabilidade.
Limitação de suspensão fixaO uso de um stop loss de porcentagem fixa pode bloquear os lucros prematuramente, perdendo mais lucros em uma forte tendência. Recomenda-se ajustar o stop loss de porcentagem de acordo com a dinâmica de volatilidade do mercado ou otimizar a estratégia de stop loss em combinação com outros indicadores técnicos.
Sensibilidade do parâmetroO desempenho da estratégia é altamente dependente da configuração de parâmetros (ciclo ATR, fator de multiplicação, porcentagem de paralisação, etc.), os parâmetros inadequados podem levar a excesso de negociação ou falha de sinal. Deve-se procurar a combinação de parâmetros ideal através do rastreamento de dados históricos.
Limitação excessiva do filtroO filtro de tempo e preço muito rígido pode levar a oportunidades de negociação perdidas. Recomenda-se ajustar as condições de filtragem de acordo com a variedade de negociação real e as características do mercado.
Dependência de condições de mercadoA estratégia tem um excelente desempenho em mercados de tendência visível, mas pode frequentemente produzir falsos sinais em mercados de turbulência. Considere a adição de um mecanismo de identificação do estado do mercado, ativando a estratégia apenas em mercados de tendência.
Falta de mecanismos de contenção: Embora o SuperTrend possa servir como referência de stop loss dinâmico, o código não define explicitamente as condições de stop loss, podendo enfrentar grandes perdas em condições de mercado extremas. Recomenda-se o aumento de um mecanismo de stop loss mais rígido.
A partir da análise do código, sugiro as seguintes direções de optimização:
Parâmetros dinâmicos se adaptamPode-se escrever uma função que ajuste automaticamente o ciclo ATR e o fator multiplicador do SuperTrend de acordo com o estado do mercado (volatilidade, volume de transação, etc.), aumentando a adaptabilidade da estratégia. O benefício de fazer isso é poder encontrar automaticamente o melhor conjunto de parâmetros em diferentes fases do mercado.
Confirmação de múltiplos períodos de tempoIntrodução de mecanismos de confirmação de múltiplos períodos de tempo, que só executam transações quando o período de tempo maior e a direção do SuperTrend do período de tempo atual coincidem, reduzindo os sinais falsos. Isso melhora significativamente a qualidade do sinal.
Sistema de detecção inteligenteO objetivo é: transformar a parada de percentual fixo em parada dinâmica ou parada intermitente baseada no ATR (alguns lucros terminaram em posições com objetivos mais baixos, outros buscavam maiores ganhos), otimizar as estratégias de gerenciamento de fundos.
Identificação do estado do mercadoAumentar os indicadores de intensidade de tendência (como o ADX) ou os indicadores de volatilidade, executando negociações apenas quando o mercado atende a condições específicas e evitando negociações em ambientes de mercado ineficientes.
Gestão de Riscos reforçadaA adição de limites de risco por transação e lógica de gerenciamento de risco de conta, assegurando que o risco individual e agregado esteja sob controle.
Integração de múltiplos indicadoresCombinado com outros indicadores técnicos (como MACD, RSI ou Brinks) como confirmação auxiliar, a transação é executada apenas quando o indicador múltipla ressona, aumentando a confiabilidade do sinal.
Volume de transação adaptado à lógica: Ajustar a escala de negociação de acordo com a dinâmica de liquidez e volatilidade do mercado, reduzir posições em situações de grande volatilidade e aumentar posições em situações de tendência estável.
Extensão do ciclo de detecçãoA estratégia de retrospectiva é realizada de forma abrangente em diferentes ciclos e condições de mercado, garantindo a estabilidade da estratégia em diferentes ambientes de mercado.
A estratégia de parada dinâmica e filtro de tempo do SuperTrend é um sistema de negociação quantitativa integrado que combina análise técnica e gerenciamento de risco. Captura tendências através dos indicadores do SuperTrend e usa mecanismos de filtragem múltiplos para melhorar a qualidade do sinal. As principais vantagens da estratégia reside na auto-adaptabilidade da taxa de flutuação e no controle de múltiplos níveis de risco, enquanto os riscos potenciais vêm principalmente do atraso dos indicadores e da sensibilidade dos parâmetros.
A estratégia pode aumentar ainda mais a sua adaptabilidade e rentabilidade através da implementação de medidas de otimização recomendadas, como o ajuste de parâmetros dinâmicos, a confirmação de períodos de tempo múltiplos e o sistema de parada inteligente. O mais importante é que o comerciante entenda os princípios e as limitações do design da estratégia e, combinando suas próprias preferências de risco e percepção do mercado, ajuste os parâmetros de forma personalizada para obter o melhor resultado de negociação.
Em geral, é uma estratégia de negociação estruturada, lógica, com alto valor de uso e potencial de personalização, adequada para o uso de investidores quantitativos com uma certa experiência de negociação.
/*backtest
start: 2024-03-26 00:00:00
end: 2024-07-11 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("Supertrend Fixed TP Unified with Time Filter (MSK)", overlay=true,
default_qty_value=0.01,
commission_type=strategy.commission.percent,
commission_value=0.06,
pyramiding=0,
process_orders_on_close=true)
// Настройки индикатора
atrPeriod = input(23, "ATR Length")
factor = input.float(1.8, "Factor", step=0.1, minval=0.1)
tradeMode = input.string("Both", "Trade Mode", options=["Long Only", "Short Only", "Both"])
// Общий параметр тейк-профита
takeProfitPercent = input.float(1.5, "Take Profit (%)", minval=0.01)
showTP = input.bool(true, "▲▼ Показывать ТП") // Добавлен переключатель
// Фильтр цены
price_param = input.float(10000.0, "Цена фильтра", step=1.0)
use_price_filter = input.bool(false, "Использовать фильтр цены")
// Фильтр по времени (Московское время)
useTimeFilter = input.bool(true, "▲▼ Использовать фильтр по времени") // Переключатель фильтра времени
timeFrom = input.int(0, "Время С (часы MSK)", minval=0, maxval=23, step=1)
timeTo = input.int(23, "Время ДО (часы MSK)", minval=0, maxval=23, step=1)
// Функция проверки времени (с учетом Московского времени UTC+3)
isTimeInRange() =>
if not useTimeFilter
true // Фильтр отключен
else
// Переводим время сервера (UTC) в Московское время (UTC+3)
mskHour = (hour(time) + 3) % 24 // Добавляем 3 часа для MSK
if timeFrom <= timeTo
mskHour >= timeFrom and mskHour < timeTo // До timeTo (не включая timeTo)
else
mskHour >= timeFrom or mskHour < timeTo // До timeTo (не включая timeTo)
// Расчет Supertrend
[supertrend, dir] = ta.supertrend(factor, atrPeriod)
// Визуализация Supertrend
plot(supertrend, "Supertrend",
color = dir < 0 ? color.green : color.red,
linewidth = 2,
style = plot.style_linebr)
bgcolor(dir < 0 ? color.new(color.green, 90) : color.new(color.red, 90))
// Сигналы входа с фильтром по времени
longEntry = (dir < 0 and dir[1] > 0) and (use_price_filter ? close > price_param : true) and isTimeInRange()
shortEntry = (dir > 0 and dir[1] < 0) and (use_price_filter ? close < price_param : true) and isTimeInRange()
// Логика стратегии
if tradeMode == "Both"
if longEntry
strategy.close("Short", comment="Close Short")
strategy.entry("Long", strategy.long)
if shortEntry
strategy.close("Long", comment="Close Long")
strategy.entry("Short", strategy.short)
else if tradeMode == "Long Only"
if longEntry
strategy.entry("Long", strategy.long)
if shortEntry
strategy.close("Long", comment="Close Long")
else if tradeMode == "Short Only"
if shortEntry
strategy.entry("Short", strategy.short)
if longEntry
strategy.close("Short", comment="Close Short")
// Управление тейк-профитом
var color tpColor = na
var float tpLevel = na
var label tpLabel = na
// Сброс при закрытии позиции
if strategy.position_size == 0 and strategy.position_size[1] != 0
tpLevel := na
tpColor := na
label.delete(tpLabel)
tpLabel := na
// Обновление ТП при открытии позиции
if strategy.position_size > 0
entryPrice = strategy.opentrades.entry_price(0)
tpLevel := entryPrice * (1 + takeProfitPercent/100)
tpColor := color.green
// Закрытие лонга по TP на закрытии бара
if close >= tpLevel
strategy.close("Long", comment="TP Long")
// Обновление метки
if showTP
label.delete(tpLabel)
tpLabel := label.new(
bar_index, tpLevel,
text = str.tostring(tpLevel, "#.##"),
color = color.green,
textcolor = color.white,
style = label.style_label_down,
yloc = yloc.price)
if strategy.position_size < 0
entryPrice = strategy.opentrades.entry_price(0)
tpLevel := entryPrice * (1 - takeProfitPercent/100)
tpColor := color.red
// Закрытие шорта по TP на закрытии бара
if close <= tpLevel
strategy.close("Short", comment="TP Short")
// Обновление метки
if showTP
label.delete(tpLabel)
tpLabel := label.new(
bar_index, tpLevel,
text = str.tostring(tpLevel, "#.##"),
color = color.red,
textcolor = color.white,
style = label.style_label_up,
yloc = yloc.price)
// Визуализация ТП
plot(showTP ? tpLevel : na, "Take Profit",
color = tpColor,
linewidth = 1,
style = plot.style_circles)
// Обновление позиции метки
if showTP and not na(tpLevel)
label.set_xy(tpLabel, bar_index, tpLevel)