Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 774

 
0Aleksandr0:

¿Qué es? No soy un buen juez de MQL4, si me dices lo que tengo que conseguir, podré escribirlo en MQL5.
Creo que tiene algo que ver con el cálculo de pérdidas y ganancias del historial.


Esa es la cuestión, yo mismo no lo entiendo - el código fue escrito a mi orden, sacado de una clase. También me inclino a pensar que este código es para el cálculo del saldo. Pero, según la idea, el cambio de saldo con la apertura-cierre de una nueva orden debería reiniciarse en el array, pero no lo veo...

 
Aleksey Vyazmikin:

Por favor, ayúdenme a reescribir el código en MT5 - No sé nada de órdenes :(

#include <MT4Orders.mqh>
 
fxsaber:

Gracias, el EA con esta clase compilada - no sé si entrará en conflicto...


Ahora se obtiene un error al ejecutar la prueba

2017.08.23 11:22:59.929 Core 3 2016.06.01 00:00:00 La carga de DLL no está permitida

2017.08.23 11:22:59.929 Core 3 global initialization failed

2017.08.23 11:22:59.929 Core 3 error crítico de inicialización global

2017.08.23 11:22:59.929 Core 3 tester se detuvo porque la inicialización de expertos falló


Se utiliza la llamada de la biblioteca - en MT4 todo es correcto.

#import "Kernel32.dll"
bool CopyFileW(string lpExistingFileName,string lpNewFileName,bool bFailIfExists);
#import 

¿Cuál puede ser la razón?

 
Aleksey Vyazmikin:

Gracias, el EA compiló con esta clase - pero no sé si entrará en conflicto...

No lo hará.

Ahora se obtiene un error al ejecutar la prueba

2017.08.23 11:22:59.929 Core 3 2016.06.01 00:00:00 La carga de DLL no está permitida

2017.08.23 11:22:59.929 Core 3 global initialization failed

2017.08.23 11:22:59.929 Core 3 error crítico de inicialización global

2017.08.23 11:22:59.929 Core 3 tester se detuvo porque la inicialización de expertos falló


Se utiliza la llamada de la biblioteca - en MT4 todo es correcto.

¿Cuál podría ser la razón?

En el Terminal permite el uso de DLL.

 
fxsaber:

No lo hará.

En el Terminal, permita el uso de la DLL.


No te lo vas a creer - lo hice, pero no tuvo ningún efecto - aparentemente el caché está ahí, que se borra después de algún tiempo - ahora está funcionando. Gracias.

 

¿Cómo se puede enseñar a los agentes a escribir en el mismo archivo? Ahora mismo cada uno crea su propio archivo en su propia carpeta, lo que no es bueno.

 
Aleksey Vyazmikin:

¿Cómo se puede enseñar a los agentes a escribir en el mismo archivo? Ahora mismo cada uno crea su propio archivo en su propia carpeta, lo que no es bueno.

Alexey, abre la documentación al menos una vez... Allí se describe con precisión qué bandera apunta a la carpeta general, que abre el acceso general al archivo. ¿Es más fácil esperar la respuesta que leer la documentación?

Документация по MQL5: Файловые операции
Документация по MQL5: Файловые операции
  • www.mql5.com
Файловые операции - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Aleksey Vyazmikin:

¿Cómo se puede enseñar a los agentes a escribir en el mismo archivo? Ahora mismo, cada uno crea su propio archivo en su propia carpeta, lo que no es bueno.


En primer lugar (paso 1) hay que superar:

... en su propia carpeta, ...


Esto se hace con la bandera FILE_COMMON - todos los agentes escribirán ahora en una carpeta común (pero aún así cada agente escribirá en su propio archivo).


Ejemplo EA:

//+------------------------------------------------------------------+
//|                                           Agents FILE_COMMON.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//---
input int s=0;
//---
string InpFileName="";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Initialize the generator of random numbers 
   MathSrand(GetTickCount());
   InpFileName=IntegerToString(MathRand())+".txt";
//--- open the file 
   ResetLastError();
   int file_handle=FileOpen(InpFileName,FILE_WRITE|FILE_TXT|FILE_COMMON);
   if(file_handle!=INVALID_HANDLE)
     {
      //--- the string is formed, write it to the file 
      FileWriteString(file_handle,InpFileName);
      //--- close the file 
      FileClose(file_handle);
      PrintFormat("Data is written, %s file is closed",InpFileName);
      PrintFormat("Common path for all of the terminals installed on a computer: %s",TerminalInfoString(TERMINAL_COMMONDATA_PATH));
     }
   else
     {
      PrintFormat("Failed to open %s file, Error code = %d",InpFileName,GetLastError());
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+


Para abrir rápidamente esta carpeta común, haga lo siguiente: En el MetaEditor, seleccione "Abrir carpeta de datos comunes" en el menú Archivo.


Ahora ejecute este EA para su optimización y observe cómo se crean nuevos archivos en la carpeta de datos comunes a medida que se ejecutan las pruebas.

Archivos adjuntos:
 
Vladimir Karputov:

En primer lugar (paso 1) debe ser derrotado:


Esto se hace con la bandera FILE_COMMON - todos los agentes escribirán ahora en una carpeta común (pero aún así cada agente escribirá en su propio archivo).


Ejemplo EA:


Para abrir rápidamente esta carpeta compartida, haz lo siguiente: en el editor de código del MetaEditor, selecciona "Abrir carpeta de datos comunes" en el menú Archivo.


Ahora ejecute este EA para su optimización y observe cómo se crean nuevos archivos en la carpeta de datos comunes a medida que se ejecutan las pruebas.


No quiero ponerlo en Common, ya que el terminal se ejecuta en su propio directorio, y habrá muchos archivos, como dices de todos modos, lo que no soluciona el problema.

 
Aleksey Vyazmikin:

No quiero entrar en Common, ya que el terminal se ejecuta en su propio directorio, y seguirá habiendo muchos archivos, como dices, lo que no soluciona el problema.


Dice: " ... Paso 1..."

En el paso 2 - ahora piensa por ti mismo, es decir, cómo múltiples hilos SIN CONFLICTO pueden escribir en UN archivo.

Razón de la queja: