
A Multi-Source Confirmation Indicator Feedback Framework é um sistema de teste de negociação quantitativa de nível profissional, projetado especificamente para avaliar indicadores e sinais de negociação personalizados. A estrutura integra vários métodos de detecção de sinais, um sistema de filtragem de confirmação avançado e funções de gerenciamento de risco especializadas, permitindo que os comerciantes testem completamente suas estratégias de negociação. O principal benefício do sistema reside na sua flexibilidade, permitindo que os usuários conectem qualquer indicador personalizado ou estudo embutido e detectem sinais de várias maneiras, incluindo mudanças de valor, pontos de cruzamento e disparos de queda.
O princípio central da estratégia é fornecer um ambiente de teste abrangente que permita aos comerciantes avaliar a eficácia de vários indicadores. O código realiza as seguintes funções-chave:
Vários métodos de detecção de sinaisA estratégia usa as funções detectLongSignal () e detectShortSignal () para implementar cinco diferentes métodos de detecção de sinais:
Sistema de confirmação: Através das funções longConfirmation ((() e shortConfirmation (((), um sistema de confirmação de várias fontes é implementado, exigindo que o sinal de transação atenda a condições adicionais dentro de um período de retrocesso especificado para ser executado. Esta função reduz significativamente os falsos sinais.
Entradas e saídas lógicasA estratégia usa as funções strategy.entry e strategy.exit para gerenciar a entrada e a saída das transações. As condições de entrada são co-determinadas pelo sistema de detecção e confirmação de sinais, enquanto a saída pode ser realizada de várias maneiras:
Lógica de PaulsonA estratégia move automaticamente o stop loss para o preço de entrada, protegendo os lucros obtidos, quando a transação atinge o número de pontos de vantagem especificado. Isso é feito detectando a diferença entre o preço atual e o preço de entrada e modificando o nível de stop loss quando o ponto é atingido.
Visualização e vigilânciaA estratégia usa a função plotshape para marcar todos os sinais de entrada e saída no gráfico e criar uma tabela de status em tempo real através do table.new, mostrando a configuração da estratégia atual e o estado de negociação.
Alta flexibilidadeA estratégia permite conectar qualquer indicador como fonte de sinal, o que o torna adequado para uma variedade de estilos de negociação e condições de mercado. O usuário pode testar diferentes combinações de indicadores simplesmente alterando a fonte de entrada.
Sistema de filtragem em camadasO filtro de confirmação permite que a estratégia exija que várias condições sejam preenchidas simultaneamente para executar uma transação, reduzindo significativamente os sinais de erro. Esta metodologia de confirmação de várias fontes simula a prática de um profissional de negociação que busca a consistência de vários indicadores antes de tomar uma decisão de negociação.
Gerenciamento de riscos completoA estratégia inclui funções de gerenciamento de risco de nível profissional, incluindo:
Feedback e monitoramento em tempo realA estratégia de negociação de Forex é baseada em um conjunto de estratégias de negociação de Forex, como:
CompatibilidadeA estratégia é compatível com o Pine Script v6, que pode ser executado em qualquer plataforma de negociação que suporte esta versão, e suporta a função de feedback, permitindo que os comerciantes avaliem o desempenho histórico.
Dependência de detecção de sinaisA eficácia da estratégia é altamente dependente do método de detecção de sinais e da configuração de barreiras escolhidos. A configuração inadequada pode levar a excesso de sinais falsos ou a perda de oportunidades de negociação importantes. É recomendado que os comerciantes testem várias combinações de configurações em diferentes condições de mercado para encontrar o método de detecção de sinais mais adequado para um indicador específico.
Verificação de risco de filtragem do sistemaEmbora o sistema de confirmação de várias fontes possa reduzir os falsos sinais, também pode levar a oportunidades de negociação lucrativas perdidas. Excessivamente rígidas exigências de confirmação podem fazer com que a estratégia perca o movimento de mercado em rápida evolução. A solução é equilibrar o rigor do sistema de confirmação ou projetar padrões de confirmação diferentes para diferentes estados de mercado.
Limitação de travagem fixa/destruiçãoO uso de um ponto fixo de stop/stop pode não ser adequado para todas as condições de mercado, especialmente em mercados com grandes variações de volatilidade. Recomenda-se que o ponto de stop/stop seja associado a um indicador de volatilidade de mercado (como o ATR) para se adaptar a diferentes condições de mercado.
Diferenças entre detecção e disco rígidoTodos os resultados de retrospectiva possuem o risco de produzir diferenças em relação à negociação real, uma vez que a retrospectiva não pode simular completamente o deslizamento, os custos de negociação e os problemas de liquidez. O comerciante deve verificar o desempenho da estratégia em um ambiente simulado antes de negociar em um ambiente real.
Complexidade do códigoA complexidade das políticas pode aumentar a dificuldade de debug e manutenção. Os comentários detalhados e o design modular podem ajudar a gerenciar essa complexidade e garantir a manutenção do código.
Gestão de Riscos DinâmicosA estratégia atual usa um stop/stop de pontos fixos, que pode ser otimizado para um sistema de gestão de risco dinâmico baseado na volatilidade do mercado. Por exemplo, o ponto de stop/stop é vinculado ao ATR (Average True Range), ampliando o intervalo de parada quando a volatilidade aumenta e reduzindo o intervalo de parada quando a volatilidade diminui. Isso pode ser melhor adaptado a diferentes condições de mercado.
Reforço do sistema de confirmaçãoO sistema de confirmação atual pode ser expandido para incluir mais condições de filtragem, como filtragem de tempo (para evitar a negociação em períodos de mercado específicos), filtragem de volatilidade (para evitar a negociação em ambientes de baixa volatilidade) ou filtragem de tendência (para negociar apenas na direção de uma tendência principal). Isso reduzirá ainda mais os falsos sinais e aumentará a robustez da estratégia.
Gestão de posições parciaisA estratégia pode adicionar funções de gerenciamento de posições em partes, permitindo entradas e saídas em lotes, em vez de abrir ou liquidar posições inteiras de uma só vez. Esta abordagem pode reduzir o risco de entradas / saídas individuais e pode melhorar o desempenho da estratégia geral.
Otimização de aprendizagem de máquina: Algoritmos de aprendizagem de máquina podem ser introduzidos para otimizar os parâmetros de sinal e as configurações de risco, ajustando automaticamente os parâmetros de estratégia com base em dados históricos para se adaptar a diferentes ambientes de mercado.
Aumentar os indicadores de performanceEmbora a estratégia já forneça o monitoramento básico do estado, mais indicadores de desempenho podem ser adicionados, como a taxa de Sharpe, o máximo de retração, a taxa de ganho e perda, para fornecer uma avaliação mais abrangente da estratégia. Esses indicadores podem ser exibidos na tabela de status para ajudar os comerciantes a avaliar melhor o desempenho da estratégia.
O Multi-Source Confirmation Indicator Feedback Framework é um sistema de teste de negociação quantitativa completo, que fornece aos comerciantes uma ferramenta poderosa para avaliar e otimizar suas estratégias de negociação, integrando vários métodos de detecção de sinais, um sistema de confirmação multicamadas e funções de gerenciamento de risco especializadas. A principal vantagem do framework é sua flexibilidade e personalização, permitindo aos comerciantes testar praticamente qualquer tipo de combinação de indicadores e métodos de geração de sinais.
Apesar de existirem alguns riscos e limitações inerentes, como a dependência de detecção de sinais e limitações de parâmetros de risco fixos, esses problemas podem ser resolvidos através de direções de otimização sugeridas, como a implementação de gerenciamento de risco dinâmico, o reforço do sistema de confirmação e a introdução de gerenciamento de posições parciais. Com essas otimizações, a estrutura pode aumentar ainda mais sua eficácia e adaptabilidade, tornando-se uma ferramenta valiosa no arsenal dos comerciantes.
Em resumo, o Multi-Source Confirmation Indicator Feedback Framework representa uma abordagem especializada e sistematizada para testar e avaliar estratégias de negociação, que vai além da simples geração de sinais, incorporando o gerenciamento de risco e a confirmação em vários níveis, que são componentes essenciais de um sistema de negociação bem-sucedido. O framework oferece uma solução abrangente para traders que buscam criar e testar estratégias de negociação personalizadas.
/*backtest
start: 2024-07-08 00:00:00
end: 2025-07-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("FULLY FUNCTIONAL INDICATOR TESTER", overlay=true, margin_long=100, margin_short=100)
// Entry/Exit Signal Inputs
longEntry = input.source(close, 'Long Entry Trigger', 'Source for long signal (connect your indicator here)')
shortEntry = input.source(close, 'Short Entry Trigger', 'Source for short signal (connect your indicator here)')
activateLongExit = input.bool(false, 'Activate Long Exit Signals')
longExit = input.source(high, 'Long Exit Trigger', 'Source for long exit signal')
activateShortExit = input.bool(false, 'Activate Short Exit Signals')
shortExit = input.source(low, 'Short Exit Trigger', 'Source for short exit signal')
// Signal Detection Method
signalMethod = input.string('Value Change', 'Signal Detection Method', options=['Value Change', 'Crossover Above', 'Crossover Below', 'Value Above Threshold', 'Value Below Threshold'])
signalThreshold = input.float(0, 'Signal Threshold', tooltip='Threshold value for signal detection methods')
// Take Profit and Stop Loss
fixedTp = input.int(0, 'Static TP (in ticks)', 0, tooltip='0 = disabled')
initialSL = input.int(0, 'Initial SL (in ticks)', 0, tooltip='0 = disabled')
// Break Even Settings
breakEvenTrigger = input.int(0, 'Break Even Trigger (in ticks)', 0, tooltip='Move SL to break even after this many ticks profit. 0 = disabled')
// Confluence Settings
useConfluence = input.bool(false, 'Use Confluence Filter', 'Activate confluence filter for entries')
longConfluence = input.source(high, 'Long Signal Confluence', 'Source for long confluence filter')
longConfluenceTrigger = input.source(low, 'Long Confluence Trigger', 'Value that must be below confluence source for long entry')
shortConfluence = input.source(high, 'Short Signal Confluence', 'Source for short confluence filter')
shortConfluenceTrigger = input.source(low, 'Short Confluence Trigger', 'Value that must be above confluence source for short entry')
confluenceLookback = input.int(0, 'Confluence Lookback Period', 0, 10, 1, 'Number of candles to look back for confluence')
// Variables to track entry prices for break-even
var float longEntryPrice = na
var float shortEntryPrice = na
// Signal Detection Functions
detectLongSignal() =>
switch signalMethod
'Value Change' => longEntry != longEntry[1] and longEntry > 0
'Crossover Above' => ta.crossover(longEntry, signalThreshold)
'Crossover Below' => ta.crossunder(longEntry, signalThreshold)
'Value Above Threshold' => longEntry > signalThreshold and longEntry[1] <= signalThreshold
'Value Below Threshold' => longEntry < signalThreshold and longEntry[1] >= signalThreshold
=> false
detectShortSignal() =>
switch signalMethod
'Value Change' => shortEntry != shortEntry[1] and shortEntry > 0
'Crossover Above' => ta.crossover(shortEntry, signalThreshold)
'Crossover Below' => ta.crossunder(shortEntry, signalThreshold)
'Value Above Threshold' => shortEntry > signalThreshold and shortEntry[1] <= signalThreshold
'Value Below Threshold' => shortEntry < signalThreshold and shortEntry[1] >= signalThreshold
=> false
detectLongExit() =>
switch signalMethod
'Value Change' => longExit != longExit[1] and longExit > 0
'Crossover Above' => ta.crossover(longExit, signalThreshold)
'Crossover Below' => ta.crossunder(longExit, signalThreshold)
'Value Above Threshold' => longExit > signalThreshold and longExit[1] <= signalThreshold
'Value Below Threshold' => longExit < signalThreshold and longExit[1] >= signalThreshold
=> false
detectShortExit() =>
switch signalMethod
'Value Change' => shortExit != shortExit[1] and shortExit > 0
'Crossover Above' => ta.crossover(shortExit, signalThreshold)
'Crossover Below' => ta.crossunder(shortExit, signalThreshold)
'Value Above Threshold' => shortExit > signalThreshold and shortExit[1] <= signalThreshold
'Value Below Threshold' => shortExit < signalThreshold and shortExit[1] >= signalThreshold
=> false
// Confluence confirmation functions
longConfirmation() =>
confirmation = false
if confluenceLookback == 0
confirmation := longConfluenceTrigger < longConfluence
else
for x = 0 to confluenceLookback
if longConfluenceTrigger[x] < longConfluence[x]
confirmation := true
break
confirmation
shortConfirmation() =>
confirmation = false
if confluenceLookback == 0
confirmation := shortConfluenceTrigger > shortConfluence
else
for x = 0 to confluenceLookback
if shortConfluenceTrigger[x] > shortConfluence[x]
confirmation := true
break
confirmation
// Entry conditions
longConfirmed = useConfluence ? longConfirmation() : true
shortConfirmed = useConfluence ? shortConfirmation() : true
longCondition = detectLongSignal() and longConfirmed
shortCondition = detectShortSignal() and shortConfirmed
// Entry logic
if (longCondition and strategy.opentrades == 0)
strategy.entry('Long', strategy.long)
longEntryPrice := close
// Set initial exit orders
if fixedTp > 0 or initialSL > 0
strategy.exit('Long Exit', 'Long',
profit = fixedTp > 0 ? fixedTp : na,
loss = initialSL > 0 ? initialSL : na,
comment_profit = 'TP Hit',
comment_loss = 'SL Hit')
if (shortCondition and strategy.opentrades == 0)
strategy.entry('Short', strategy.short)
shortEntryPrice := close
// Set initial exit orders
if fixedTp > 0 or initialSL > 0
strategy.exit('Short Exit', 'Short',
profit = fixedTp > 0 ? fixedTp : na,
loss = initialSL > 0 ? initialSL : na,
comment_profit = 'TP Hit',
comment_loss = 'SL Hit')
// Custom exit signal logic
if (activateLongExit and detectLongExit() and strategy.position_size > 0)
strategy.close('Long', 'Custom Long Exit')
if (activateShortExit and detectShortExit() and strategy.position_size < 0)
strategy.close('Short', 'Custom Short Exit')
// Break-even logic
if (breakEvenTrigger > 0)
// Long position break-even
if (strategy.position_size > 0 and not na(longEntryPrice))
ticksProfit = math.round((high - longEntryPrice) / syminfo.mintick)
if (ticksProfit >= breakEvenTrigger)
strategy.exit('Long Exit', 'Long', stop = longEntryPrice, comment_loss = 'Break Even')
// Short position break-even
if (strategy.position_size < 0 and not na(shortEntryPrice))
ticksProfit = math.round((shortEntryPrice - low) / syminfo.mintick)
if (ticksProfit >= breakEvenTrigger)
strategy.exit('Short Exit', 'Short', stop = shortEntryPrice, comment_loss = 'Break Even')
// Reset entry prices when no position
if (strategy.position_size == 0)
longEntryPrice := na
shortEntryPrice := na
// Plot signals for debugging
plotshape(longCondition, title='Long Signal', location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(shortCondition, title='Short Signal', location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
plotshape(activateLongExit and detectLongExit() and strategy.position_size > 0, title='Long Exit', location=location.abovebar, color=color.orange, style=shape.xcross, size=size.small)
plotshape(activateShortExit and detectShortExit() and strategy.position_size < 0, title='Short Exit', location=location.belowbar, color=color.orange, style=shape.xcross, size=size.small)
// Display current settings in a table for easy reference
if barstate.islast
var table infoTable = table.new(position.top_right, 2, 8, bgcolor=color.white, border_width=1)
table.cell(infoTable, 0, 0, "Signal Method:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 0, signalMethod, text_color=color.black)
table.cell(infoTable, 0, 1, "Threshold:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 1, str.tostring(signalThreshold), text_color=color.black)
table.cell(infoTable, 0, 2, "TP (ticks):", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 2, str.tostring(fixedTp), text_color=color.black)
table.cell(infoTable, 0, 3, "SL (ticks):", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 3, str.tostring(initialSL), text_color=color.black)
table.cell(infoTable, 0, 4, "Break Even:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 4, str.tostring(breakEvenTrigger), text_color=color.black)
table.cell(infoTable, 0, 5, "Confluence:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 5, useConfluence ? "ON" : "OFF", text_color=color.black)
table.cell(infoTable, 0, 6, "Position:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 6, strategy.position_size > 0 ? "LONG" : strategy.position_size < 0 ? "SHORT" : "FLAT", text_color=color.black)
table.cell(infoTable, 0, 7, "Status:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 7, "FULLY FUNCTIONAL", text_color=color.green)