This content originally appeared on DEV Community and was authored by Henrique Vital
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
This content originally appeared on DEV Community and was authored by Henrique Vital
Print
Share
Comment
Cite
Upload
Translate
Updates
There are no updates yet.
Click the Upload button above to add an update.

APA
MLA
Henrique Vital | Sciencx (2024-10-04T01:48:32+00:00) Análise de Rompimentos no Ativo US30: Um Script Python para Traders Usando MetaTrader 5. Retrieved from https://www.scien.cx/2024/10/04/analise-de-rompimentos-no-ativo-us30-um-script-python-para-traders-usando-metatrader-5/
" » Análise de Rompimentos no Ativo US30: Um Script Python para Traders Usando MetaTrader 5." Henrique Vital | Sciencx - Friday October 4, 2024, https://www.scien.cx/2024/10/04/analise-de-rompimentos-no-ativo-us30-um-script-python-para-traders-usando-metatrader-5/
HARVARDHenrique Vital | Sciencx Friday October 4, 2024 » Análise de Rompimentos no Ativo US30: Um Script Python para Traders Usando MetaTrader 5., viewed ,<https://www.scien.cx/2024/10/04/analise-de-rompimentos-no-ativo-us30-um-script-python-para-traders-usando-metatrader-5/>
VANCOUVERHenrique Vital | Sciencx - » Análise de Rompimentos no Ativo US30: Um Script Python para Traders Usando MetaTrader 5. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/10/04/analise-de-rompimentos-no-ativo-us30-um-script-python-para-traders-usando-metatrader-5/
CHICAGO" » Análise de Rompimentos no Ativo US30: Um Script Python para Traders Usando MetaTrader 5." Henrique Vital | Sciencx - Accessed . https://www.scien.cx/2024/10/04/analise-de-rompimentos-no-ativo-us30-um-script-python-para-traders-usando-metatrader-5/
IEEE" » Análise de Rompimentos no Ativo US30: Um Script Python para Traders Usando MetaTrader 5." Henrique Vital | Sciencx [Online]. Available: https://www.scien.cx/2024/10/04/analise-de-rompimentos-no-ativo-us30-um-script-python-para-traders-usando-metatrader-5/. [Accessed: ]
rf:citation » Análise de Rompimentos no Ativo US30: Um Script Python para Traders Usando MetaTrader 5 | Henrique Vital | Sciencx | https://www.scien.cx/2024/10/04/analise-de-rompimentos-no-ativo-us30-um-script-python-para-traders-usando-metatrader-5/ |
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.