Análise de Rompimentos no Ativo US30: Um Script Python para Traders Usando MetaTrader 5

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 = …


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
APA

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/

MLA
" » 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/
HARVARD
Henrique 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/>
VANCOUVER
Henrique 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.

You must be logged in to translate posts. Please log in or register.