LLEVAR ARCHIVOS .set:
Índice de la página:
Descripción.
Código.
Código.
-------------------------------------------------------------------------------
Descripción:
Esta hoja es para después de la optimización, una vez que hemos llevado los resultados al archivo excel, juntarlo todo en un DataFrame. Extraer los sets que nos gusten. Ponerle nombre a los archivos .set y llevarlos a la carpeta "tester" de MT4.
Cuando nos quedemos con los que serán nuestros robots, llevarlos para guardarlos en su carpeta del robot que le corresponda.
Código: De la Primera Neurona en compra y venta parámetro "SQN"
import pandas as pd
import qgrid # Importamos la libreria Qgrid que ordena y filtra tablas
import ipywidgets as widgets # Librería necesaria para el correcto funcionamiento de Qgrid
# --------------------------
nombre_archivo = 'Datos 051-052.xlsx' # nombre del archivo excel .xlsx
ruta_carpeta = "C:/Users/USER/Dropbox/AA/051-052 EURUSD-H4/" # de donde sacamos los datos
ruta_mt4 = "C:/Users/USER/AppData/Roaming/MetaQuotes/Terminal/3F9B461373D3F90E26D8AE0388CD2A52/tester/"
tipo = 'S' # (B = Buy, S = Short) ponerlas en mayúsculas
# --------------------------
------- LEER EL EXCEL O LAS HOJAS DE COMPRA O LAS HOJAS DE VENTA -------
# Utilizo un archivo que no tiene cabecera (sin nombre de columnas)
# usecols=[1, 2, 3...] para decirle las columnas que quiero usar
# header=None (Le digo que el archivo no tiene nombre de columnas
# names ( utilizo la variable cabecera)
'''
cabecera = ['Profit', '#Ope', 'PF', 'Espeza', 'MDD $', 'MDD %', 'SQN',
'x1','x2','x3','x4', 'p1','p2','p3','p4', 'StopLoss']
if tipo == 'B':
df1 = pd.read_excel(ruta_carpeta + nombre_archivo, sheet_name='n1b-MT1',
usecols=[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,20], header=None, names=cabecera)
df2 = pd.read_excel(ruta_carpeta + nombre_archivo, sheet_name='n1b-MT2',
usecols=[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,20], header=None, names=cabecera)
df3 = pd.read_excel(ruta_carpeta + nombre_archivo, sheet_name='n1b-MT3',
usecols=[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,20], header=None, names=cabecera)
df4 = pd.read_excel(ruta_carpeta + nombre_archivo, sheet_name='n1b-MT4',
usecols=[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,20], header=None, names=cabecera)
df5 = pd.read_excel(ruta_carpeta + nombre_archivo, sheet_name='n1b-MT5',
usecols=[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,20], header=None, names=cabecera)
if tipo == 'S':
df1 = pd.read_excel(ruta_carpeta + nombre_archivo, sheet_name='n1s-MT1',
usecols=[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,20], header=None, names=cabecera)
df2 = pd.read_excel(ruta_carpeta + nombre_archivo, sheet_name='n1s-MT2',
usecols=[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,20], header=None, names=cabecera)
df3 = pd.read_excel(ruta_carpeta + nombre_archivo, sheet_name='n1s-MT3',
usecols=[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,20], header=None, names=cabecera)
df4 = pd.read_excel(ruta_carpeta + nombre_archivo, sheet_name='n1s-MT4',
usecols=[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,20], header=None, names=cabecera)
df5 = pd.read_excel(ruta_carpeta + nombre_archivo, sheet_name='n1s-MT5',
usecols=[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,20], header=None, names=cabecera)
# --------------------------
# Unimos los 5 df en uno solo el df6
df6 = pd.concat([df1, df2, df3, df4, df5], ignore_index=True)
# Si está la columna 'Id' la borra y la vuelve a crear poniéndola la primera y con números consecutivos
if 'Id' in df6.columns:
df6.drop('Id', axis=1, inplace=True) # Elimina la columna 'Id'
df6.insert(0,'Id', pd.Series(list(range(0,1000000,1)))) #Inserta la columna 'Id' en primera
# posición (0) y le pone números consecutivos comenzando desde el cero
else:
df6.insert(0,'Id', pd.Series(list(range(0,1000000,1))))
# --------------------------
df7 = df6.copy(deep=True) # Copia un DataFrame completamente
# --------------------------
# Esta celda solo se puede ejecutar una vez. En la otra vez ya está convertido y daría error
df7['MDD %'] = df7['MDD %'].str.replace('%', '') # Reemplaza el signo % por nada en la columna 'MDD %'
df7['MDD %'] = pd.to_numeric(df7['MDD %']) # Convierte la columna en numérico
# --------------------------
#df8 = df7[(df7['Profit'] > 10000) & (df7['MDD %'] < 90) & (df7['Espeza'] > 0)]
#df8 = df7[(df7['Profit'] > 40000) & (df7['MDD %'] < 13) & (df7['Espeza'] > 4)]
# --------------------------
'''
Crea la columna Id-obj de tipo objeto para que en el grid (en la tabla)se vean
números seguidos y podamos seleccionar una o varias filas.
'''
if 'Id_obj' in df7.columns:
df7.drop('Id_obj', axis=1, inplace=True) # Elimina la columna 'Id_obj'
df7.insert(1,'Id_obj', 0) #Inserta la columna 'Id_obj' en primera en la posición 1
df7['Id_obj'] = df7['Id'].astype(object) # Convierte la columna Id_obj en tipo objeto
else:
df7.insert(1,'Id_obj', 0) #Inserta la columna 'Id_obj' en primera en la posición 1
df7['Id_obj'] = df7['Id'].astype(object) # Convierte la columna Id_obj en tipo objeto
# --------------------------
'''
-------------------- CREAMOS EL GRID (la tabla) -----------------------
show_toolbar=True (Para que se vean los botones y podamos ampliar a pantalla completa la tabla)
grid_options={'forceFitColumns': True} (Forzar el ancho de las columnas al total del ancho)
#from IPython.display import display # Por si necesito esta importación
#tabla = qgrid.QGridWidget(df=df7) # Por si la fila siguiente no funciona.
'''
tabla = qgrid.show_grid(df7, show_toolbar=True, grid_options={'forceFitColumns': True})
display(tabla) # tabla es el nombre que le doy a la tabla Qgrid
# --------------------------
'''
---------- CREAR Y LLEVAR A LA CARPETA TESTER DE MT4 LOS ARCHIVOS .set ---------
'''
# Crear y llevar a su carpeta el o los archivos .set
df_set = tabla.get_changed_df() # Convierte el objeto Qgrid en el DataFrame df_set
df_set = df_set[['x1', 'x2', 'x3', 'x4', 'p1', 'p2', 'p3', 'p4']] # Solo las x y las p
for index, row in df_set.iterrows(): # Itinera por la consulta última
row.to_csv(ruta_mt4 + 'n1' + tipo + f'-{index}.set', header=False, index=False)
# --------------------------
Código: De la Segunda Neurona en compra y venta parámetro "K-Ratio"