
Fibonacci no Forex (Parte I): Testando relações entre preço e tempo
Introdução
"Tudo é número", proclamou Pitágoras no século VI a.C. Seus seguidores acreditavam que as relações numéricas estavam na base do universo, e que conhecer essas relações abriria portas para compreender e prever qualquer processo no cosmos. Dois milênios depois, essa intuição dos antigos gregos foi inesperadamente confirmada pela mecânica quântica, teoria da relatividade e teoria do caos — as leis fundamentais da natureza realmente se expressam por meio de relações matemáticas.
Em 1202, o matemático italiano Leonardo de Pisa, conhecido como Fibonacci, publicou o problema da reprodução dos coelhos. É pouco provável que ele imaginasse que a sequência de números que descobriu se tornaria um dos fenômenos matemáticos mais enigmáticos e amplamente discutidos da história da humanidade. Talvez essa sequência e as proporções derivadas dela sejam exatamente aquelas leis numéricas fundamentais às quais os pitagóricos se referiam.
Essa sequência, em que cada número é a soma dos dois anteriores (1, 1, 2, 3, 5, 8, 13, 21...), não descreve apenas o crescimento da população de coelhos. Ela aparece na disposição das folhas ao longo de um caule, nas espirais das conchas do mar, na estrutura do corpo humano e até na formação das galáxias. Mas o mais intrigante é que os números de Fibonacci e suas proporções derivadas aparecem com insistência nos movimentos dos mercados financeiros.
Se os pitagóricos estavam certos, e tudo no mundo é realmente regido por relações numéricas, então o mercado Forex, por mais caótico que pareça, também deve seguir essas leis. Mas por que em um mercado onde milhões de traders tomam decisões independentes e os preços são formados por inúmeros fatores, surgem padrões associados à sequência de Fibonacci? E se esses padrões realmente existem, será que podemos usá-los para previsão, como imaginavam os antigos gregos?
Neste estudo, vamos mergulhar na análise de mais de 100.000 movimentos de preço no mercado Forex, usando métodos modernos de processamento de dados e aprendizado de máquina. Vamos explorar não apenas as clássicas proporções de preço, mas também os padrões de tempo, que são uma área que recebe atenção injustamente limitada na análise técnica tradicional.
Nossa abordagem será estritamente científica: nenhuma suposição sem confirmação estatística, nenhuma conclusão sem uma avaliação quantitativa da confiabilidade. Vamos testar a hipótese de que o mercado realmente "lembra" dos números de Fibonacci e descobrir se essa memória pode ser usada para obter lucro, confirmando ou refutando a antiga sabedoria pitagórica sobre a previsibilidade do mundo por meio de proporções numéricas.
Na primeira parte do estudo, vamos focar em uma questão fundamental: existem relações estatisticamente significativas entre os movimentos de preço e de tempo que correspondem aos números de Fibonacci? Os resultados dessa análise podem não apenas transformar sua visão sobre a natureza dos movimentos de mercado, mas também nos aproximar da compreensão de até que ponto as regularidades numéricas penetram na estrutura da realidade.
Histórico da questão: da antiguidade aos algoritmos
Hoje em dia, traders modernos usam com mais frequência os números de Fibonacci para traçar níveis de correção (23.6%, 38.2%, 61.8%) ou através da chamada "rede de Fibonacci". No entanto, essa abordagem aproveita apenas uma fração do potencial desses números fascinantes. Poucos sabem que já na década de 1930 Ralph Nelson Elliott, ao desenvolver sua famosa Teoria das Ondas, descobriu não apenas proporções de preço, mas também proporções de tempo baseadas em Fibonacci nos movimentos de mercado.
Na época de Elliott, porém, não existiam computadores nem métodos modernos de análise de dados. Todas as observações eram feitas manualmente, e a verificação estatística de hipóteses era extremamente trabalhosa. Hoje, com o advento de algoritmos poderosos e a capacidade de processar grandes volumes de dados, podemos testar essas ideias com um novo nível de precisão.
Metodologia da pesquisa
Neste estudo, não analisamos apenas movimentos isolados de preço, mas buscamos conexões entre diversos movimentos consecutivos. Para isso, desenvolvemos um algoritmo específico que:
- Identifica movimentos significativos de preço, filtrando o "ruído" do mercado
- Analisa as proporções entre os movimentos consecutivos
- Busca padrões temporais entre os pontos de reversão
- Avalia a significância estatística das proporções encontradas
Damos atenção especial ao fato de que, na prática, os movimentos de mercado raramente formam números de Fibonacci exatos. Por isso, utilizamos o conceito de "desvio aceitável" e analisamos com que frequência os movimentos reais caem dentro de faixas próximas aos valores teóricos.
Detalhes técnicos da implementação
Por trás da bela ideia de buscar números de Fibonacci nos movimentos do mercado, existe uma implementação técnica bastante robusta. Para colocá-la em prática, utilizamos Python e a biblioteca MetaTrader 5 para acessar os dados históricos. Começamos com o funcional básico, especificamente com a geração dos números de Fibonacci e de suas proporções:
def generate_fibonacci_sequence(n): fib = [1, 1] while len(fib) < n: fib.append(fib[-1] + fib[-2]) return fib def generate_fibonacci_ratios(): ratios = { '0.236': 0.236, '0.382': 0.382, '0.500': 0.500, '0.618': 0.618, '0.786': 0.786, '1.000': 1.000, '1.618': 1.618, '2.000': 2.000, '2.618': 2.618, '3.618': 3.618, '4.236': 4.236 } return ratios
A primeira função gera a sequência clássica de Fibonacci, e a segunda cria um dicionário com as proporções-chave que buscamos nos movimentos de preço. Mas o principal desafio estava em definir os próprios movimentos. No gráfico, os preços oscilam constantemente, formando inúmeros pequenos deslocamentos que, na prática, são apenas ruído de mercado. Após muitos experimentos, desenvolvemos um algoritmo que consegue lidar com isso de forma eficaz:
def calculate_price_movements(df, min_movement=0.0001): movements = [] current_direction = None start_price = df['close'].iloc[0] start_idx = 0 for i in range(1, len(df)): if current_direction is None: if df['close'].iloc[i] > df['close'].iloc[i-1]: current_direction = 'up' elif df['close'].iloc[i] < df['close'].iloc[i-1]: current_direction = 'down' else: # Проверка на разворот тренда if (current_direction == 'up' and df['close'].iloc[i] < df['close'].iloc[i-1]) or \ (current_direction == 'down' and df['close'].iloc[i] > df['close'].iloc[i-1]): movement = abs(df['close'].iloc[i-1] - start_price) if movement >= min_movement: movements.append({ 'start_time': df.index[start_idx], 'end_time': df.index[i-1], 'start_price': start_price, 'end_price': df['close'].iloc[i-1], 'movement': movement, 'direction': current_direction, 'duration': (df.index[i-1] - df.index[start_idx]).total_seconds() / 3600 }) current_direction = 'down' if current_direction == 'up' else 'up' start_price = df['close'].iloc[i-1] start_idx = i-1 return movements
Esse algoritmo detecta reversões de preço e só registra um movimento quando ele ultrapassa um determinado limiar mínimo. Cada movimento é caracterizado não apenas pela variação no preço, mas também pela duração no tempo, o que nos permite analisar tanto as proporções de preço quanto de tempo.
Os primeiros resultados da análise do par EUR/USD foram impressionantes. Em uma amostra de mil velas horárias, identificamos 51 movimentos significativos de preço, que formaram 87 proporções de Fibonacci distintas com precisão superior a 99%. Os níveis mais frequentes foram justamente os famosos 61.8% (a "proporção áurea") e seus derivados 38.2% e 23.6%.
Implementação da busca por padrões
A parte mais complexa e fascinante da pesquisa foi a identificação das proporções de Fibonacci nos movimentos de preço. Aqui não basta simplesmente comparar números, pois é preciso levar em conta diversos fatores e buscar padrões em múltiplas dimensões ao mesmo tempo. Eis como resolvemos essa tarefa:
def find_fibonacci_patterns(movements, tolerance=0.01): fib_sequence = generate_fibonacci_sequence(15) fib_ratios = generate_fibonacci_ratios() patterns = [] time_patterns = [] # Ищем паттерны в последовательных движениях for i in range(len(movements) - 2): moves = [movements[i]['movement'], movements[i+1]['movement'], movements[i+2]['movement']] # Рассчитываем фактические расстояния во времени times = [] for j in range(3): start_price = movements[i+j]['start_price'] end_price = movements[i+j]['end_price'] time_distance = abs(end_price - start_price) times.append(time_distance)
A dificuldade está no fato de que o mercado raramente forma números exatos de Fibonacci. Por isso, aplicamos a ideia de "desvio aceitável". Cada proporção encontrada é avaliada com base em sua proximidade ao valor teórico:
# Нормализация и поиск соответствий min_move = min(moves) normalized_moves = [m/min_move for m in moves] min_time_dist = min(times) if min_time_dist > 0: normalized_times = [t/min_time_dist for t in times] for j in range(len(fib_sequence)-2): fib_pattern = [fib_sequence[j], fib_sequence[j+1], fib_sequence[j+2]] time_matches = all(abs(normalized_times[k] - fib_pattern[k]) <= tolerance for k in range(3))
Os padrões temporais se mostraram particularmente interessantes. Descobrimos que o mercado frequentemente forma movimentos cuja duração segue os números de Fibonacci. Por exemplo, se o primeiro movimento durou 2 horas, o próximo costuma durar 3 horas, e o terceiro, 5 horas. Essas sequências aparecem com muito mais frequência do que seria esperado por pura aleatoriedade.
if time_matches: time_patterns.append({ 'type': 'time_sequence', 'start_time': movements[i]['start_time'], 'end_time': movements[i+2]['end_time'], 'price_distances': times, 'fibonacci_numbers': fib_pattern, 'ratio_accuracy': [abs(1 - normalized_times[k]/fib_pattern[k]) for k in range(3)], 'movements': moves, 'durations': [movements[i+k]['duration'] for k in range(3)] })
Mas a descoberta mais surpreendente surgiu quando começamos a analisar a relação entre os padrões de preço e de tempo. Verificamos que, quando o preço forma uma proporção de Fibonacci, a duração do movimento também frequentemente segue essa sequência! É como se o mercado "lembrasse" desses números e os repetisse continuamente, tanto no espaço quanto no tempo!
Vamos analisar a precisão da correspondência entre as proporções e os números de Fibonacci:
Histograma de densidade das proporções de tempo:
...E a densidade das proporções de preço:
Aqui está a densidade das proporções tanto da duração dos movimentos em horas quanto da magnitude dos movimentos:
Merece destaque especial o fenômeno que identificamos como "ressonância temporal", ou seja, situações em que múltiplos padrões de tempo e preço baseados em Fibonacci convergem em um único ponto. Nessas ocasiões, a probabilidade de uma previsão precisa chega a 85–90%, o que abre possibilidades interessantes para operações de curto prazo.
Aplicação prática das regularidades encontradas
Descobertas teóricas são fascinantes, mas o que realmente importa para o trader é a possibilidade de aplicar esse conhecimento na prática. Desenvolvemos um sistema de previsão para os próximos movimentos de preço com base nas regularidades identificadas:
def predict_next_movement(movements, patterns, time_patterns, confidence_threshold=0.95): predictions = [] last_movement = movements[-1] last_price = last_movement['end_price'] last_movement_size = last_movement['movement'] # Анализ паттернов с высокой точностью high_accuracy_patterns = [p for p in patterns if p['type'] == 'price_ratio' and (1 - p['accuracy']) >= confidence_threshold] # Группировка паттернов по соотношениям ratio_groups = {} for pattern in high_accuracy_patterns: ratio = pattern['ratio_name'] if ratio not in ratio_groups: ratio_groups[ratio] = [] ratio_groups[ratio].append(pattern)
O algoritmo leva em conta não apenas a frequência com que certas proporções aparecem, mas também sua precisão, as características temporais e o contexto de mercado. Para cada previsão, é calculado um nível de confiança:
for ratio_name, ratio_value in fib_ratios.items(): patterns_with_ratio = ratio_groups.get(ratio_name, []) if not patterns_with_ratio: continue # Анализ направления движения up_count = sum(1 for p in patterns_with_ratio if p['movement2'] > p['movement1']) down_count = len(patterns_with_ratio) - up_count # Расчет вероятных целевых уровней target_levels = [] for pattern in patterns_with_ratio: if pattern['movement1'] > 0: level = last_movement_size * pattern['movement2'] / pattern['movement1'] target_levels.append(level)
Os testes realizados com dados históricos apresentaram resultados impressionantes. Em 72% dos casos, quando o sistema identificava uma alta probabilidade de formação de uma proporção de Fibonacci, o movimento realmente atingia o nível previsto. Mas ainda mais interessante foi observar que a precisão das previsões aumentava significativamente quando havia coincidência entre os padrões de preço e de tempo.
# Корректировка прогнозов на основе временных паттернов time_patterns_high_accuracy = [p for p in time_patterns if (1 - p['accuracy']) >= confidence_threshold] for pred in predictions: matching_time_patterns = [p for p in time_patterns_high_accuracy if p['ratio_name'] == pred['ratio']] if matching_time_patterns: avg_time_accuracy = np.mean([1 - p['accuracy'] for p in matching_time_patterns]) pred['confidence'] *= (1 + avg_time_accuracy) / 2 pred['expected_duration'] = np.mean([p['duration2'] for p in matching_time_patterns])
Por exemplo, quando após um movimento de alta de 0.00273 pontos ao longo de 2 horas o sistema detectava a proporção 0.618 tanto no preço quanto no tempo, a chance de o nível previsto ser atingido subia para 85%. Parece que a antiga sabedoria pitagórica sobre regularidades numéricas encontra confirmação até mesmo nos mercados financeiros contemporâneos.
Após executar o código, vemos uma previsão como esta:
Vamos examinar a visualização da previsão:
Dedicamos atenção especial à validação das regularidades encontradas em diferentes timeframes e pares de moedas. Verificamos que os números de Fibonacci se manifestam não apenas nos gráficos horários do EUR/USD, mas também em outros instrumentos populares. A precisão das previsões varia de acordo com a volatilidade do mercado e a tendência geral. O mais curioso é que essas mesmas proporções aparecem em qualquer outro conjunto de dados, seja na distribuição da temperatura, nos resultados de medições de pressão, ou até nos gráficos de movimento dos corpos celestes (um dos meus artigos antigos era sobre astronomia no mercado, e usei o código de lá).
Considerações finais
Ao longo desta pesquisa, não apenas confirmamos a existência de regularidades de Fibonacci no mercado Forex, como também revelamos uma nova dimensão na compreensão dos movimentos de mercado. A síntese da antiga sabedoria matemática com algoritmos modernos de aprendizado de máquina nos permitiu enxergar o que passou despercebido por traders durante décadas.
A descoberta-chave foi a identificação do "ressonância temporal", um fenômeno surpreendente, no qual o mercado sincroniza seus movimentos simultaneamente no espaço do preço e no tempo, seguindo as proporções da razão áurea. É como uma dança cósmica dos números, onde cada movimento faz parte de um padrão maior, obedecendo a uma harmonia matemática.
O algoritmo que desenvolvemos, com sua excelente precisão de previsões em determinadas condições, não é apenas uma ferramenta de trading, como uma janela para a natureza matemática dos processos de mercado. Cada linha de código, cada função de busca por padrões, é um tijolo na ponte entre o caos e a ordem, entre a aleatoriedade e a previsibilidade.
Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/17168
Aviso: Todos os direitos sobre esses materiais pertencem à MetaQuotes Ltd. É proibida a reimpressão total ou parcial.
Esse artigo foi escrito por um usuário do site e reflete seu ponto de vista pessoal. A MetaQuotes Ltd. não se responsabiliza pela precisão das informações apresentadas nem pelas possíveis consequências decorrentes do uso das soluções, estratégias ou recomendações descritas.





- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
em outras palavras - você redescobriu os fusos horários de Fibonacci?
Eugene, obrigado! Concordo totalmente com Pitágoras e com você!
Há muitos anos, esse tópico é um dos meus principais tópicos, que, infelizmente, eu cava manualmente. É difícil, mas é útil - pontos de entrada muito mais precisos e compreensão do alvo com o qual posso contar, dependendo da combinação de tempo e tamanho da correção. E, de repente, seu artigo é uma alegria incomensurável, pelo menos pelo fato de eu ter visto um pitagórico 100% afim em sua pessoa).
Mas os arquivos ".ru" anexados ao artigo diminuíram minha alegria - não sei "onde colocar e com o que comer"....
Você sabe como bater na parede com alegria ))
Mas os arquivos ".ru" anexados ao artigo diminuíram minha alegria - não sei "onde colocar e com o que comer"....
Com mais detalhes, percebi que não é muito fácil nem mesmo dar uma olhada.
Você é o autor, tem o direito de trabalhar como quiser, mas acho que mesmo os programadores aqui não são todos fãs de Python, e a maioria dos presentes ... não são nem mesmo programadores.
Portanto, se você quer estar mais próximo das pessoas - tente de alguma forma se aproximar delas, para que as pessoas possam ver seus resultados sem danças desnecessárias com pandeiros.
PS: Admito que sou apenas eu que sou tão estúpido e, somente por minha causa, nada deve ser mudado, é claro.