import MetaTrader5 as mt5
import pandas as pd
from datetime import datetime, timedelta
import os
import sys
# Parâmetros de login
login = 1520378657 # Substitua pelo seu número de login
senha = "AA6=J?j67mU" # Substitua pela sua senha
servidor = "FTMO-Demo2" # Substitua pelo nome do servidor
mt5_path = r"C:\Program Files\FTMO MetaTrader 5\terminal64.exe" # Caminho do MetaTrader 5
# Inicializa a conexão com o MetaTrader 5
if not mt5.initialize(path=mt5_path):
print("Falha ao inicializar o MetaTrader 5")
mt5.shutdown()
exit()
# Tenta fazer login na conta específica
if not mt5.login(login, password=senha, server=servidor):
print("Falha ao fazer login no MetaTrader 5")
print("Erro:", mt5.last_error())
mt5.shutdown()
exit()
# Verifica as informações da conta
conta_info = mt5.account_info()
if conta_info is None:
print("Falha ao obter informações da conta")
mt5.shutdown()
exit()
print("Conectado à conta:", conta_info.login)
print("Nome do servidor:", conta_info.server)
# Define o ativo e o período de análise
ativo = "US30.cash" # Nome do ativo (Dow Jones)
periodo = mt5.TIMEFRAME_M1 # Timeframe de 1 minuto
data_inicio = datetime(2024, 7, 15) # Data inicial
data_fim = datetime.now() # Data final (hoje)
# Pega os dados históricos de candles entre as datas especificadas
dados_candles = mt5.copy_rates_range(ativo, periodo, data_inicio, data_fim)
# Converte os dados para um DataFrame para melhor visualização
df = pd.DataFrame(dados_candles)
# Verifica se o DataFrame está vazio
if df.empty:
print("Nenhum dado foi retornado. Verifique a conexão com o MetaTrader 5 e a disponibilidade do ativo.")
mt5.shutdown()
exit()
# Exibe informações sobre o DataFrame
print("Formato do DataFrame:", df.shape)
print("Colunas do DataFrame:", df.columns)
print("Tipos de dados das colunas:")
print(df.dtypes)
# Salva o DataFrame como CSV para inspeção
df.to_csv('dados_us30_1629_1630.csv', index=False)
print("Dados salvos em 'dados_us30_1629_1630.csv'")
# Verifica se a coluna 'time' existe
if 'time' not in df.columns:
print("A coluna 'time' não foi encontrada. Verifique o nome correto da coluna de tempo.")
# Tenta encontrar uma coluna que possa ser a de tempo
time_columns = df.select_dtypes(include=['int64', 'float64']).columns
if len(time_columns) > 0:
time_column = time_columns[0]
print(f"Usando a coluna '{time_column}' como coluna de tempo.")
df['time'] = pd.to_datetime(df[time_column], unit='s')
else:
print("Nenhuma coluna numérica encontrada para usar como tempo.")
mt5.shutdown()
exit()
else:
df['time'] = pd.to_datetime(df['time'], unit='s')
# Filtra os candles das 16:29 e 16:30 (horário MT5)
df_1629 = df[df['time'].dt.time == datetime.strptime("16:29", "%H:%M").time()]
df_1630 = df[df['time'].dt.time == datetime.strptime("16:30", "%H:%M").time()]
# Exibe os resultados filtrados
print("\nCandle das 16:29:")
print(df_1629)
print("\nCandle das 16:30:")
print(df_1630)
# Inicializa contadores para as estatísticas
stats = {
'0': 0,
'0-500': 0,
'500-1000': 0,
'1000-1500': 0,
'1500-2000': 0,
'2000-2500': 0,
'2500-3000': 0,
'3000-3500': 0,
'3500-4000': 0,
'4000-4500': 0,
'4500-5000': 0,
'5000-5500': 0,
'5500-6000': 0,
'6000-6500': 0,
'6500-7000': 0,
'7000-7500': 0,
'7500-8000': 0,
'8000-8500': 0,
'8500-9000': 0,
'9000-9500': 0,
'9500-10000': 0,
'10000+': 0
}
# Inicializa contadores para as novas estatísticas
rompimentos_um_lado = 0
rompimentos_dois_lados = 0
sem_rompimentos = 0
# Inicializa uma lista para armazenar os detalhes dos rompimentos
detalhes_rompimentos = []
# Calcula os rompimentos do candle das 16:30 em relação ao das 16:29
for i in range(min(len(df_1629), len(df_1630))):
data = df_1629.iloc[i]['time'].date()
max_1629 = df_1629.iloc[i]['high']
min_1629 = df_1629.iloc[i]['low']
max_1630 = df_1630.iloc[i]['high']
min_1630 = df_1630.iloc[i]['low']
volume_1629 = df_1629.iloc[i]['tick_volume']
volume_1630 = df_1630.iloc[i]['tick_volume']
tamanho_1629 = (max_1629 - min_1629) * 100 # Multiplicado por 100
tamanho_1630 = (max_1630 - min_1630) * 100 # Multiplicado por 100
rompimento_baixo = (min_1629 - min_1630) * 100 if min_1630 < min_1629 else 0
rompimento_cima = (max_1630 - max_1629) * 100 if max_1630 > max_1629 else 0
# Adiciona os detalhes à lista
detalhes_rompimentos.append({
'DT': data,
'RBaixo': rompimento_baixo,
'RCima': rompimento_cima,
'V29': volume_1629,
'V30': volume_1630,
'T29': tamanho_1629,
'T30': tamanho_1630
})
# Atualiza as estatísticas para rompimento baixo e cima
for rompimento in [rompimento_baixo, rompimento_cima]:
if rompimento == 0:
stats['0'] += 1
elif 0 < rompimento <= 500:
stats['0-500'] += 1
elif 500 < rompimento <= 1000:
stats['500-1000'] += 1
elif 1000 < rompimento <= 1500:
stats['1000-1500'] += 1
elif 1500 < rompimento <= 2000:
stats['1500-2000'] += 1
elif 2000 < rompimento <= 2500:
stats['2000-2500'] += 1
elif 2500 < rompimento <= 3000:
stats['2500-3000'] += 1
elif 3000 < rompimento <= 3500:
stats['3000-3500'] += 1
elif 3500 < rompimento <= 4000:
stats['3500-4000'] += 1
# Continue a adicionar as condições conforme necessário
# Aqui você pode adicionar mais lógica para análise ou visualização dos resultados
For further actions, you may consider blocking this person and/or reporting abuse
Top comments (0)