Cuenta de Señales MT4 en darwinex (Backtest)
Publicado: 29 May 2025 19:04
Hola a toda la comunidad de x-trader, les traigo la posibilidad de ver por completo la subyacente de una cuenta MT4 en darwinex con todo, Retorno/Riesgo, Activos & Horarios, Atributos invertibles, Trading Journal, como así también el VaR y otras métricas. Aclaro que no es como ver un DARWIN, sino solo la cuenta de señales sin pasar por el motor de riesgo de darwinex.
Metámonos en el quilombo...
Antes de empezar te cuento lo que se necesita:
1_ Tener cuenta MT4 con historial de ordenes realizadas, no precisamente tiene que ser el de alguna cuenta de darwinex, puede ser también de cualquier broker inclusive en DEMO.
2_ Anaconda instalado en tu CPU, lo bajas gratis desde acá https://www.anaconda.com/download/success
3_ Tener un usuario en darwinex, no sirve el de darwinex Zero, podes crearlo gratis desde acá https://www.darwinex.com/es/register
Bien, ahora hay que realizar los siguientes pasos:
1_ Abrís tu MT4 y clic en la pestaña que se encuentra abajo del todo "Historial de cuenta", haciendo siempre clic derecho en cualquier parte del historial le das check a Comisiones, Impuestos, Comentarios, luego clic arriba donde dice "Todo el historial" para que te lo muestre completo, y por ultimo, clic en "Guardar como informe" y guárdalo en tu escritorio con el nombre "H".
2_ Abrís Anaconda Navigator (si te aparecen ventanitas, cerrarlas todas), buscas Jupyter Notebook y le das al botón "Launch". Una vez dentro de Jupyter le das a File-->New-->Notebook-->Select, en la única celda copias y pegas el "Código Python" que te voy a proporcionar mas abajo y por ultimo clic al Play, se crea un archivo.csv que vamos a usar (H.csv). Si produce error, modificar las rutas de entrada y salida de los archivos.
3_ Nos logeamos en darwinex, vamos a Herramientas-->Backtest-->Subir Backtest-->completar nombre de Backtest, Siguiente-->completar la moneda de apertura de cuenta de nustro historial-->seleccionar Formato .csv-->subir, buscamos nuestro H.csv creado y lo abrimos (no puede pesar mas de 5MB)-->Siguiente-->y por ultimo ACEDER A ESTRATEGIA. Hay que esperar mínimo 2hs hasta 48hs para que se cree. Paciencia.
Código Python
Metámonos en el quilombo...

1_ Tener cuenta MT4 con historial de ordenes realizadas, no precisamente tiene que ser el de alguna cuenta de darwinex, puede ser también de cualquier broker inclusive en DEMO.
2_ Anaconda instalado en tu CPU, lo bajas gratis desde acá https://www.anaconda.com/download/success
3_ Tener un usuario en darwinex, no sirve el de darwinex Zero, podes crearlo gratis desde acá https://www.darwinex.com/es/register
Bien, ahora hay que realizar los siguientes pasos:
1_ Abrís tu MT4 y clic en la pestaña que se encuentra abajo del todo "Historial de cuenta", haciendo siempre clic derecho en cualquier parte del historial le das check a Comisiones, Impuestos, Comentarios, luego clic arriba donde dice "Todo el historial" para que te lo muestre completo, y por ultimo, clic en "Guardar como informe" y guárdalo en tu escritorio con el nombre "H".
2_ Abrís Anaconda Navigator (si te aparecen ventanitas, cerrarlas todas), buscas Jupyter Notebook y le das al botón "Launch". Una vez dentro de Jupyter le das a File-->New-->Notebook-->Select, en la única celda copias y pegas el "Código Python" que te voy a proporcionar mas abajo y por ultimo clic al Play, se crea un archivo.csv que vamos a usar (H.csv). Si produce error, modificar las rutas de entrada y salida de los archivos.
3_ Nos logeamos en darwinex, vamos a Herramientas-->Backtest-->Subir Backtest-->completar nombre de Backtest, Siguiente-->completar la moneda de apertura de cuenta de nustro historial-->seleccionar Formato .csv-->subir, buscamos nuestro H.csv creado y lo abrimos (no puede pesar mas de 5MB)-->Siguiente-->y por ultimo ACEDER A ESTRATEGIA. Hay que esperar mínimo 2hs hasta 48hs para que se cree. Paciencia.
Código Python
Código: Seleccionar todo
from bs4 import BeautifulSoup
import csv
from datetime import datetime
# Ruta del archivo de entrada y salida
input_file = r'C:\Users\HP\OneDrive\Escritorio\H.htm'
output_file = r'C:\Users\HP\OneDrive\Escritorio\H.csv'
# Leer el archivo HTML
with open(input_file, 'r', encoding='utf-8') as f:
soup = BeautifulSoup(f, 'html.parser')
# Buscar todas las tablas
tables = soup.find_all('table')
# Seleccionar la tabla correcta
tabla_correcta = 0
table = tables[tabla_correcta]
rows = table.find_all('tr')
# Extraer datos
data = []
header_row = None
start_processing = False
for row_index, row in enumerate(rows):
cols = [col.get_text(strip=True) for col in row.find_all(['td', 'th'])]
if not cols:
continue
# Asegurar que hay al menos 15 columnas antes de agregar Comment y LotSize
while len(cols) < 15:
cols.append('')
# Buscar y guardar los encabezados
if cols[0] == "Ticket": # Esta es la fila de encabezados
# Modificar los nombres de las columnas
cols[0] = "OrderNumber"
cols[1] = "OpenTime"
cols[5] = "OpenPrice"
cols[6] = "S/L"
cols[7] = "T/P"
cols[8] = "CloseTime"
cols[9] = "ClosePrice"
cols[11] = "Pips"
cols[14] = 'Comment'
cols.append('LotSize')
header_row = cols # Guardamos los encabezados para usarlos después
continue
# Buscar el inicio ("Closed Transactions:")
if "Closed Transactions:" in cols[0]:
start_processing = True
continue # Saltamos esta fila
# Buscar el final (fila anterior a "Closed P/L:")
if "Closed P/L:" in cols[0]:
break # Terminamos el procesamiento
# Si estamos en el rango a procesar
if start_processing:
# Convertir fechas en columnas 1 y 8
for i in [1, 8]:
if i < len(cols):
try:
dt = datetime.strptime(cols[i], "%Y.%m.%d %H:%M:%S")
cols[i] = int(dt.timestamp())
except ValueError:
pass
# Agregar columna LotSize
cols.append('100000')
data.append(cols)
# Mayúsculas en columna [4]
if len(cols) > 4:
cols[4] = cols[4].upper()
# Procesar columna [4]
if len(cols) > 4:
value = cols[4].strip().lower()
if value in ("xauusd","ni225"):
cols[15] = '100'
elif value == "xagusd":
cols[15] = '5000'
elif value == "xngusd":
cols[15] = '10000'
elif value == "xtiusd":
cols[15] = '1000'
elif value in ("aus200","fchi40","gdaxi","ndx","sp500","spa35","stoxx50e","uk100"):
cols[15] = '10'
elif value == "ws30":
cols[15] = '1'
else:
cols[15] = '100000'
# Procesar columna [2]
if len(cols) > 2:
value = cols[2].strip().lower()
if value == "buy":
cols[2] = "Buy"
cols[14] = ''
elif value == "sell":
cols[2] = "Sell"
cols[14] = ''
elif value == "balance":
cols[0] = '0'
cols[2] = ''
cols[3] = '0.0'
cols[5] = '0.0'
cols[6] = '0.0'
cols[7] = '0.0'
cols[8] = cols[1]
cols[9] = '0.0'
cols[10] = '0.0'
cols[11] = '0'
cols[12] = '0.0'
cols[13] = cols[4]
cols[4] = ''
cols[14] = "Balance"
cols[15] = '0'
else:
cols[14] = ''
else:
cols[14] = ''
# Insertar los encabezados al principio de los datos
if header_row:
data.insert(0, header_row)
# Eliminar la última fila antes de guardar, si hay más de una fila (para no quitar encabezados)
if len(data) > 1:
data.pop()
# Filtrar filas que tienen OrderNumber vacío (columna 0), exceptuando la fila de encabezados
data = [row for i, row in enumerate(data) if i == 0 or row[0].strip() != '']
# Guardar en CSV
with open(output_file, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerows(data)
print(f"\n✅ Archivo CSV fue creado correctamente y guardado en:{output_file}")