Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 774

 
0Aleksandr0:

Che cos'è? Non sono un buon giudice di MQL4, se mi dici cosa devo ottenere, sarò in grado di scriverlo in MQL5.
Penso che abbia qualcosa a che fare con il calcolo dei profitti e delle perdite della storia.


Questo è il punto, io stesso non lo capisco - il codice è stato scritto su mio ordine, tirato fuori da una classe. Sono anche incline a pensare che questo codice sia per il calcolo dell'equilibrio. Ma, secondo l'idea, il cambiamento di equilibrio con l'apertura-chiusura di un nuovo ordine dovrebbe essere resettato nell'array, ma non lo vedo...

 
Aleksey Vyazmikin:

Per favore aiutatemi a riscrivere il codice su MT5 - non so nulla di ordini :(

#include <MT4Orders.mqh>
 
fxsaber:

Grazie, l'EA con questa classe compilata - non so se andrà in conflitto...


Ora si ottiene un errore quando si esegue il test

2017.08.23 11:22:59.929 Core 3 2016.06.01 00:00:00 il caricamento della DLL non è consentito

2017.08.23 11:22:59.929 Core 3 inizializzazione globale fallita

2017.08.23 11:22:59.929 Core 3 errore critico di inizializzazione globale

2017.08.23 11:22:59.929 Core 3 tester si è fermato perché l'inizializzazione dell'esperto è fallita


Viene utilizzata la chiamata alla biblioteca - in MT4 tutto è corretto.

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

Quale può essere la ragione?

 
Aleksey Vyazmikin:

Grazie, l'EA ha compilato con questa classe - ma non so se andrà in conflitto...

Non lo farà.

Ora si ottiene un errore quando si esegue il test

2017.08.23 11:22:59.929 Core 3 2016.06.01 00:00:00 il caricamento della DLL non è consentito

2017.08.23 11:22:59.929 Core 3 inizializzazione globale fallita

2017.08.23 11:22:59.929 Core 3 errore critico di inizializzazione globale

2017.08.23 11:22:59.929 Core 3 tester si è fermato perché l'inizializzazione dell'esperto è fallita


Viene utilizzata la chiamata alla biblioteca - in MT4 tutto è corretto.

Quale potrebbe essere la ragione?

In Terminal permettere l'uso di DLL.

 
fxsaber:

Non lo farà.

Nel Terminale, permettete alla DLL di essere usata.


Non ci crederete - l'ho fatto, ma non ha avuto alcun effetto - apparentemente c'è la cache, che viene cancellata dopo qualche tempo - ora funziona. Grazie.

 

Come si può insegnare agli agenti a scrivere sullo stesso file? In questo momento ognuno crea il proprio file nella propria cartella, il che non va bene.

 
Aleksey Vyazmikin:

Come si può insegnare agli agenti a scrivere sullo stesso file? In questo momento ognuno crea il proprio file nella propria cartella, il che non va bene.

Alexey, apri la documentazione almeno una volta... È accuratamente descritto lì quale bandiera punta alla cartella generale, che apre l'accesso generale al file. È più facile aspettare la risposta che leggere la documentazione?

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

Come si può insegnare agli agenti a scrivere sullo stesso file? In questo momento, ognuno crea il proprio file nella propria cartella, il che non va bene.


Per prima cosa (passo 1) è necessario superare:

... nella propria cartella, ...


Questo viene fatto con il flag FILE_COMMON - tutti gli agenti ora scriveranno in una cartella comune (ma ancora ogni agente scriverà nel proprio file).


Esempio 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()
  {
//---

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


Per aprire rapidamente questa cartella comune, fate come segue: nel MetaEditor, selezionate "Open Common Data Folder" nel menu File.


Ora eseguite questo EA per l'ottimizzazione e osservate come vengono creati nuovi file nella Common Data Folder mentre i test vengono eseguiti.

File:
 
Vladimir Karputov:

Il primo (passo 1) deve essere sconfitto:


Questo viene fatto con il flag FILE_COMMON - tutti gli agenti ora scriveranno in una cartella comune (ma ancora ogni agente scriverà nel proprio file).


Esempio EA:


Per aprire rapidamente questa cartella condivisa, fate come segue: nell'editor di codice di MetaEditor, selezionate "Open Common Data Folder" dal menu File.


Ora eseguite questo EA per l'ottimizzazione e osservate come i nuovi file saranno creati nella Common Data Folder man mano che i test vengono eseguiti.


Non voglio metterlo in Common, dato che il terminale gira nella sua propria directory, e ci saranno molti file, come dici tu comunque, il che non risolve il problema.

 
Aleksey Vyazmikin:

Non voglio andare in Common, poiché il terminale gira nella sua propria directory, e ci saranno ancora molti file, come dici tu, il che non risolve il problema.


Dice: " ... Passo 1 ..."

Sul passo 2 - ora pensate voi stessi, cioè, come più threads SENZA CONFLITTO possono scrivere su UN file.