Untitled

 avatar
unknown
plain_text
a year ago
2.2 kB
9
Indexable
import MetaTrader5 as mt5
from telegram import Bot
from telegram.utils.request import Request
import time
import socket

# Tus credenciales de MT5
mt5_account = int('4833928')  # Asegúrate de que esto sea un número entero
mt5_password = 'Crash182!'
mt5_server = 'Eightcap-Demo'

# Conectar a MT5
if not mt5.initialize(login=mt5_account, password=mt5_password, server=mt5_server):
    print("Error al inicializar MT5:", mt5.last_error())
    quit()

# Token del bot de Telegram
telegram_token = '6867411989:AAHwUk2iMkKeicV3Ku_KxiK7h1BOFzBpfio'
# ID del chat de Telegram
chat_id = '-1002036580455'

# Crear una solicitud con un tiempo de espera más largo
request = Request(connect_timeout=10.0, read_timeout=30.0)

# Crear el bot con la solicitud personalizada
bot = Bot(token=telegram_token, request=request)

# Mantener un registro de las posiciones ya notificadas
notified_positions = set()

def check_positions_and_notify():
    # Obtener posiciones abiertas
    positions = mt5.positions_get()
    if positions is None or len(positions) == 0:
        print("No hay posiciones abiertas actualmente.")
        return

    for position in positions:
        # Verificar si la posición ya ha sido notificada
        if position.ticket in notified_positions:
            continue  # Saltar esta posición si ya ha sido notificada

        # Formatear mensaje
        message = f"PAIR: {position.symbol}\nEntry Price: {position.price_open}\nStop Loss: {position.sl}\nTP: {position.tp}"
        
        # Intentar enviar mensaje a Telegram
        try:
            bot.send_message(chat_id=chat_id, text=message)
            notified_positions.add(position.ticket)  # Añadir la posición al conjunto de notificados
        except socket.timeout:
            print("Tiempo de espera excedido al intentar enviar el mensaje. Reintentando...")
            time.sleep(5)  # Espera 5 segundos antes de reintentar
            bot.send_message(chat_id=chat_id, text=message)

# Llamada a la función en un bucle
while True:
    check_positions_and_notify()
    time.sleep(60)  # Espera 60 segundos antes de la próxima verificación
Editor is loading...
Leave a Comment