Discusión sobre el artículo "Desarrollamos un asesor experto multidivisa (Parte 13): Automatización de la segunda fase: selección en grupos" - página 2
Yuri, ¡buenas tardes! He conseguido ejecutar la optimización de la segunda etapa y ha pasado. Pero durante la optimización estos errores aparecen constantemente en el log:
Y al final, como me di cuenta, no se añadió nada a la base de datos.... La única cosa en la base de datos de tareas cambió el estado de las tareas de la segunda etapa y el tiempo de su ejecución.
¿Qué significa este error y dónde indagar? ¿Dónde debe registrarse la información sobre los pases y si debe registrarse en absoluto? ¿Si se debe escribir como pases o al final de toda la etapa en una transacción todo en la base de datos?
No lo he observado, así que se trata efectivamente de un error. A juzgar por esta línea del log:
2024.08.2301:15:04.693 SimpleVolumesStage2 (GBPUSD,M15) database error, table passes has 2 columns but 48 values were supplied
Puedo suponer que en tu base de datos principal la tabla de pases ha sido sustituida por la que debería haberse creado sólo en la segunda base de datos. Es decir, esta tabla tiene ahora 2 columnas en lugar de 48.
La información sobre los pases de la segunda etapa se escribe en la base principal a medida que se completa cada pase. Es el mismo lugar en el que se escribe la información sobre los pases de la primera etapa.
Me ocupé de este problema y realicé la segunda etapa. Se añadieron pasajes en la base principal. Pero apareció un nuevo problema... Ahora con el tercer Asesor Experto. Por alguna razón no toma los pases que se especifican en la lista, sino que toma los primeros desde el principio de la tabla de pases. Y ahora se supone que el EA de la segunda etapa funcionaba igual y toda la optimización está mal. Todavía no entiendo como resolverlo.
Según tu idea, ¿dónde se debe crear la base de datos de tareas, en la carpeta Common\Files o en la carpeta MQL5\Files del terminal?
El tercer Asesor Experto también está solucionado, parece que funciona como debería. Yuri gracias por el Asesor de Expertos y esta serie de artículos.
PS: Me di cuenta de tal momento, ciertamente no es un problema, pero aún así, - al probar en el modo visual en el probador, el EA abre un montón de órdenes separadas, a menudo por 0,01 lote. Según tengo entendido, cada estrategia virtual abre sus propias posiciones. Pero si nos fijamos en el esquema del 3er artículo, a continuación, de acuerdo con el último esquema debe abrir una posición en cada instrumento de negociación y sólo ajustar el volumen en función del lote total y la dirección de todas las posiciones virtuales abiertas. Es como trabajar en una cuenta de compensación. Tal vez es sólo un fallo en el probador o es sólo la forma en que las posiciones se muestran allí.... Yuri, ¿es posible habilitar el EA para trabajar en la cuenta hage como si estuviera trabajando en una cuenta de compensación y tener sólo una posición en el mercado para cada instrumento de negociación?
Si he entendido bien, esto no es posible en MT5. Si queremos una ejecución neta, necesitamos abrir una cuenta neta. Si nos quedamos en una cuenta de cobertura, sólo podemos realizar el trabajo a través de una posición mediante el cierre completo de la posición existente y la apertura de una nueva con un volumen diferente en cada corrección. Y esto no da más que pérdidas adicionales en comisiones y entorno.
Para una mejor visualización, puede ser más conveniente utilizar una posición por símbolo. Pero es más fácil abrir otra cuenta demo (o no demo) con netting para hacer pruebas.
Hola Yuri. Ahora estoy optimizando la segunda etapa, y en el log de vez en cuando me sale un error de ocupación de base de datos:
2024.09.0210:38:33.294 Optimization (EURUSD,M5) OnTimer | Current Task ID = 2882024.09.0210:38:38.294 Optimization (EURUSD,M5) OnTimer | Current Task ID = 2882024.09.0210:38:43.293 Optimization (EURUSD,M5) OnTimer | Current Task ID = 2882024.09.0210:38:48.293 Optimization (EURUSD,M5) OnTimer | Current Task ID = 2882024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) database error, database is locked
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) CDatabase::Execute | ERROR: 5605 in query
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) INSERT INTO passes VALUES (NULL, 288, 360, 10000.00,0.00,7003.37,9407.08,-2403.71,46.87,-28.78,941.40,59.00,941.40,59.00,-146.47,7.00,-87.89,13.00,9984.47,146.78,0.94,0.94,146.78,9933.81,217.95,1.92,1.92,217.95,5.57,3.91,32.13,4.09,7507.03,2340.00,1258.00,889.00,369.00,595.00,663.00,430.00,459.00,9.00,4.00,99.96,16091.26,'class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CSimpleVolumesStrategy("GBPUSD",15,24,0.10,0.10,150,5800.00,1800.00,31000,5)
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],6.543218),class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CSimpleVolumesStrategy("GBPUSD",15,16,0.10,0.10,0,2400.00,1200.00,27000,5)
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],4.995504),class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CSimpleVolumesStrategy("GBPUSD",15,120,0.50,1.90,50,2800.00,1200.00,60000,19)
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],13.285506),class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CSimpleVolumesStrategy("GBPUSD",15,38,1.30,1.30,50,3800.00,1100.00,13000,25)
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],10.046213),class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CSimpleVolumesStrategy("GBPUSD",15,32,0.50,0.90,100,2800.00,1100.00,2000,3)
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],10.450413),class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CSimpleVolumesStrategy("GBPUSD",15,32,0.50,0.90,150,2800.00,1100.00,2000,3)
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],10.254307),class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CSimpleVolumesStrategy("GBPUSD",15,12,0.10,0.10,150,2800.00,1500.00,21000,16)
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],2.232143),class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CSimpleVolumesStrategy("GBPUSD",15,120,0.50,1.90,0,2800.00,1200.00,16000,11)
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],9.453583),class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CSimpleVolumesStrategy("GBPUSD",15,120,0.50,1.90,0,2800.00,1200.00,27000,23)
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],9.453583),class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CSimpleVolumesStrategy("GBPUSD",15,120,0.50,1.90,0,2800.00,1200.00,39000,19)
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],9.453583),class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CSimpleVolumesStrategy("GBPUSD",15,28,0.60,0.30,0,2800.00,1300.00,52000,5)
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],4.348582),class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CSimpleVolumesStrategy("GBPUSD",15,42,0.50,0.60,150,2400.00,1600.00,2000,3)
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],6.733553),class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CSimpleVolumesStrategy("GBPUSD",15,12,0.10,0.30,150,5800.00,1900.00,51000,4)
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],7.383343),class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CSimpleVolumesStrategy("GBPUSD",15,32,0.50,0.90,150,2600.00,1100.00,1000,3)
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],8.483203),class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CSimpleVolumesStrategy("GBPUSD",15,12,0.10,0.10,150,5800.00,1900.00,38000,7)
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],2.723237),class CVirtualStrategyGroup([
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) class CSimpleVolumesStrategy("GBPUSD",15,34,0.60,0.40,0,2200.00,1300.00,51000,5)
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],4.561836),
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) ],4.588208)',
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) 'i1_=0,i2_=0,i3_=0,i4_=0,i5_=0,i6_=0,i7_=0,i8_=0,i9_=0,i10_=0,i12_=0,i11_=0,i13_=0,i14_=0,i15_=0,i16_=0,idTask_=288,idParentJob_=18,count_=16',
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) '2024.09.0210:38:50');
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) CDatabase::ExecuteTransaction | ERROR: Transaction failed, error code=56052024.09.0210:38:53.293 Optimization (EURUSD,M5) OnTimer | Current Task ID = 2882024.09.0210:38:58.293 Optimization (EURUSD,M5) OnTimer | Current Task ID = 2882024.09.0210:39:03.323 Optimization (EURUSD,M5) OnTimer | Current Task ID = 2882024.09.0210:39:08.292 Optimization (EURUSD,M5) OnTimer | Current Task ID = 2882024.09.0210:39:13.305 Optimization (EURUSD,M5) OnTimer | Current Task ID = 288
El Asesor Experto es original, del artículo. Estoy optimizando en agentes locales de un PC y en red local en agentes de otro PC. En general, el proceso sigue su curso y los pases a la base de datos se llenan, pero me gustaría entender qué causa este error y cómo solucionarlo.
También ocurre que algunas tareas de la segunda etapa terminan muy rápido. Por ejemplo:
Aquí por ejemplo NZDCAD H1 M30 y NZDCHF H1 terminaron literalmente en una pasada del optimizador según tengo entendido. Aunque hay muchos pases de la primera etapa para ellos en la base de datos. ¿Por qué sucede esto y qué se puede hacer al respecto?
Y NZDCAD M15 dio un error en absoluto. Según tengo entendido no encuentra datos en la base de datos, pero ¿cómo es esto posible? Después de todo, en la primera etapa de la optimización de estos pares fue y pasa debe estar en la base de datos....
Yuri, ¿es posible hacer esto por ejemplo: He llevado a cabo la primera y la segunda etapa y guardado todo en una base de datos. ¿Y es posible entonces (después de la segunda etapa) cambiar, en la base de datos, el estado de las tareas de la primera etapa para aquellos pares y tf en los que la segunda etapa dio malos resultados, de modo que para estos pares y tf como si en la parte superior de la segunda etapa para agregar pases de la primera etapa, y luego para ellos para llevar a cabo de nuevo la segunda etapa? Simplemente en tal acción id de nuevos pases de la primera etapa será mayor que id de pases de la segunda etapa para todos los demás pares en esta base. Me refiero a los pases de la tabla. ¿Es posible hacerlo, y encontrará el optimizador pases de la primera etapa para estos pares y tf?
En primer lugar, comprueba que no tienes dos instancias del Asesor Experto en Optimización ejecutándose en gráficos terminales diferentes. Te responderé sobre el resto más adelante.
2024.09.0210:38:50.882 SimpleVolumesStage2 (GBPUSD,M15) database error, database is locked
Una base de datos está abierta y bloqueada en algún lugar. También puede ser una aplicación externa en relación con el probador, por ejemplo, MetaEditor. No recuerdo haberme encontrado con algo así.
2024.09.0210:45:41.008 SimpleVolumesStage2 (NZDCAD,M15) OnTesterInit | ERROR: Can't load data from file database892.sqlite.
2024.09.0210:45:41.008 SimpleVolumesStage2 (NZDCAD,M15) Check that it exists in data folder or in common data folder.
Sí indica que por alguna razón no se han encontrado los pases de la primera etapa para NZDCAD M15.
А можно потом (после второго этапа) поменять, в базе данных, статус задач первого этапа для тех пар и тф на которых второй этап дал плохие результаты, чтобы для этих пар и тф как бы поверх второго этапа добавить проходов первого этапа ещё, а потом для них провести повторно второй этап? Просто при таком действии id новых проходов первого этапа будет выше чем id проходов второго этапа для всех остальных пар в этой базе. Я имею веду таблицу passes. Можно так сделать, и найдёт ли оптимизатор проходы превого этапа для этих пар и тф?
Sí, puedes hacerlo tantas veces como quieras. Si quieres que no queden los pases antiguos de las primeras etapas anteriores, puedes borrarlos de la tabla de pases por el id_tarea requerido.
Yuri, ¡buenas tardes! He conseguido ejecutar la optimización de la segunda etapa y ha pasado. Pero durante la optimización estos errores aparecen constantemente en el log:
Y al final, como me di cuenta, no se añadió nada a la base de datos.... La única cosa en la base de datos de tareas cambió el estado de las tareas de la segunda etapa y el tiempo de su ejecución.
¿Qué significa este error y dónde indagar? ¿Dónde debe registrarse la información sobre los pases y si debe registrarse en absoluto? ¿Si se debe escribir como pases o al final de toda la etapa en una transacción todo en la base de datos?
Hola Victor.
No lo he observado, así que se trata efectivamente de un error. A juzgar por esta línea del log:
Puedo suponer que en tu base de datos principal la tabla de pases ha sido sustituida por la que debería haberse creado sólo en la segunda base de datos. Es decir, esta tabla tiene ahora 2 columnas en lugar de 48.
Me ocupé de este problema y realicé la segunda etapa. Se añadieron pasajes en la base principal. Pero apareció un nuevo problema... Ahora con el tercer Asesor Experto. Por alguna razón no toma los pases que se especifican en la lista, sino que toma los primeros desde el principio de la tabla de pases. Y ahora se supone que el EA de la segunda etapa funcionaba igual y toda la optimización está mal. Todavía no entiendo como resolverlo.
Según tu idea, ¿dónde se debe crear la base de datos de tareas, en la carpeta Common\Files o en la carpeta MQL5\Files del terminal?
El tercer Asesor Experto también está solucionado, parece que funciona como debería. Yuri gracias por el Asesor de Expertos y esta serie de artículos.
PS: Me di cuenta de tal momento, ciertamente no es un problema, pero aún así, - al probar en el modo visual en el probador, el EA abre un montón de órdenes separadas, a menudo por 0,01 lote. Según tengo entendido, cada estrategia virtual abre sus propias posiciones. Pero si nos fijamos en el esquema del 3er artículo, a continuación, de acuerdo con el último esquema debe abrir una posición en cada instrumento de negociación y sólo ajustar el volumen en función del lote total y la dirección de todas las posiciones virtuales abiertas. Es como trabajar en una cuenta de compensación. Tal vez es sólo un fallo en el probador o es sólo la forma en que las posiciones se muestran allí.... Yuri, ¿es posible habilitar el EA para trabajar en la cuenta hage como si estuviera trabajando en una cuenta de compensación y tener sólo una posición en el mercado para cada instrumento de negociación?
Hola Yuri. Ahora estoy optimizando la segunda etapa, y en el log de vez en cuando me sale un error de ocupación de base de datos:
El Asesor Experto es original, del artículo. Estoy optimizando en agentes locales de un PC y en red local en agentes de otro PC. En general, el proceso sigue su curso y los pases a la base de datos se llenan, pero me gustaría entender qué causa este error y cómo solucionarlo.
También ocurre que algunas tareas de la segunda etapa terminan muy rápido. Por ejemplo:
Aquí por ejemplo NZDCAD H1 M30 y NZDCHF H1 terminaron literalmente en una pasada del optimizador según tengo entendido. Aunque hay muchos pases de la primera etapa para ellos en la base de datos. ¿Por qué sucede esto y qué se puede hacer al respecto?
Y NZDCAD M15 dio un error en absoluto. Según tengo entendido no encuentra datos en la base de datos, pero ¿cómo es esto posible? Después de todo, en la primera etapa de la optimización de estos pares fue y pasa debe estar en la base de datos....
Yuri, ¿es posible hacer esto por ejemplo: He llevado a cabo la primera y la segunda etapa y guardado todo en una base de datos. ¿Y es posible entonces (después de la segunda etapa) cambiar, en la base de datos, el estado de las tareas de la primera etapa para aquellos pares y tf en los que la segunda etapa dio malos resultados, de modo que para estos pares y tf como si en la parte superior de la segunda etapa para agregar pases de la primera etapa, y luego para ellos para llevar a cabo de nuevo la segunda etapa? Simplemente en tal acción id de nuevos pases de la primera etapa será mayor que id de pases de la segunda etapa para todos los demás pares en esta base. Me refiero a los pases de la tabla. ¿Es posible hacerlo, y encontrará el optimizador pases de la primera etapa para estos pares y tf?
Una base de datos está abierta y bloqueada en algún lugar. También puede ser una aplicación externa en relación con el probador, por ejemplo, MetaEditor. No recuerdo haberme encontrado con algo así.
Sí indica que por alguna razón no se han encontrado los pases de la primera etapa para NZDCAD M15.
Sí, puedes hacerlo tantas veces como quieras. Si quieres que no queden los pases antiguos de las primeras etapas anteriores, puedes borrarlos de la tabla de pases por el id_tarea requerido.