Erreurs, bugs, questions - page 2647

 
Igor Makanu :

J'ai 12 Go de mémoire, Windows 10, et environ 8 Go de mémoire libre.


J'avais besoin de ce test pour connaître les longueurs de ligne maximales autorisées dans les terminaux MT4/MT5.

Je veux maintenant échanger entre les terminaux via la base de données Redis

Redis est une base de données très simple et ne fonctionne qu'avec des chaînes de caractères (clé - valeur --> chaîne - chaîne).

Hier, j'ai sérialisé des structures POD en Base64 et cela augmente la taille des données d'environ 1/3.

Je pense que même dans ce cas, j'ai la possibilité d'échanger des structures d'une taille de 400 Mo par transaction - c'est plus qu'assez pour n'importe quel usage ;)

Je me demande si je vais vérifier ce "Redis", je ne le connais pas.

J'ai donc vérifié votre code de mon côté, je l'ai arrêté après 1 minute, trop lent. Je l'ai donc modifié un peu ;-)

#define  STEP      1000000     // 1 million
#define  MILLION   1000000
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
  printf("m_physical = %i MB, m_total = %i MB, m_available = %i MB, m_used = %i MB, limit = %i MB, used = %i MB",
         TerminalInfoInteger(TERMINAL_MEMORY_PHYSICAL), TerminalInfoInteger(TERMINAL_MEMORY_TOTAL),
         TerminalInfoInteger(TERMINAL_MEMORY_AVAILABLE), TerminalInfoInteger(TERMINAL_MEMORY_USED),
         MQLInfoInteger(MQL_MEMORY_LIMIT),MQLInfoInteger(MQL_MEMORY_USED));

  string s = "";
  int size=INT_MAX;

  do
    {
    size-=STEP;
    }
  while(!StringInit(s,size,USHORT_MAX));

  long length = StringLen(s);
  printf("StringLen = %lli millions characters, m_used = %i MB, used = %i MB", length/MILLION, TerminalInfoInteger(TERMINAL_MEMORY_USED),MQLInfoInteger(MQL_MEMORY_USED));
  }

2020.02.13 15 : 50 : 51.199 1111R-2646 (EURUSD, M1) m_physique = 16230 Mo, m_total = 32460 Mo, m_disponible = 31786 Mo, m_utilisé = 674 Mo, limite = 8388608 Mo, utilisé = 0 Mo
2020.02.13 15 : 50 : 51.763 1111R-2646 (EURUSD, M1) StringLen = 1073 millions de caractères, m_utilisé = 2722 Mo, utilisé = 2048 Mo

Moins d'une seconde. Enfin, il y a la limite mql5, qui est de 2 Go, soit environ 1,073 milliard de caractères.

 

Expliquez pourquoi les fichiers ico ne peuvent pas être chargés dans le codebase ? Ils font partie intégrante du programme et sont reliés par des outils MQL. Le fait qu'ils soient interdits est évidemment une erreur. Mais cela va plus loin que ça.

Un ico correctement préparé peut être renommé en png sans que cela n'affecte le fonctionnement : il est toujours correctement lié au programme (en utilisant l'icône #property "mql5pack.png") et affiché dans le dialogue des propriétés. Mais tout cela ne fonctionne que localement. J'ai téléchargé un tel png dans la base de code et j'ai eu une erreur en vérifiant la source :

mql5pack.mq5(27,11) : error 341: cannot open icon file 'mql5pack.png'
main file not found

S'il vous plaît l'administration mql5 pour fixer le chargement ou/et au moins vérifier les icônes.

PS. Correction, il semble que le site mange silencieusement le fichier png, c'est-à-dire qu'il le donne à télécharger, mais ensuite il n'est pas dans la liste des fichiers compilés. J'ai essayé MQL5\Images, MQL5\Files - rien n'est téléchargé sur le serveur mais silencieusement, sans aucune erreur. Il donne une erreur pendant la vérification.

 
Pouvez-vous me dire comment contourner une erreur de compilation?
struct STRUCT
{
  static const int Array[];
  int Array2[sizeof(STRUCT::Array)]; // unresolved static variable 'STRUCT::Array'
};

static const int STRUCT::Array[] = {1, 2};

void OnStart()
{
  static const int Array[] = {1, 2};
  
  int Array2[sizeof(Array)]; // OK
}
 

Les amis, comment puis-je m'assurer que dans mt5 les ordres ouverts ne s'échangent pas les places ?

 
Сергей Проценко:

Comment s'assurer que les ordres ouverts ne changent pas de place ?

Je suis désolé, comment peuvent-ils échanger leurs places ?

 
Сергей Таболин:

Je suis désolé, comment peuvent-ils échanger leurs places ?

En fonction du bénéfice, si le bénéfice est plus grand, on descend, l'autre ordre a un bénéfice plus grand, on échange les places. Si le bénéfice en euros devient plus important que le bénéfice en or, l'ordre en euros sera inférieur et l'ordre en or sera supérieur.
 
Сергей Проценко:
En fonction du bénéfice, si le bénéfice est plus élevé, descendez, l'autre ordre a un bénéfice plus élevé, échangez les places.

Cliquez sur l'un des en-têtes de colonne : Symbole, Ticket, Temps.

 
Vladimir Karputov:

Cliquez sur l'en-tête de l'une des colonnes : Symbole, Ticket, Heure.

C'est le seul résultat.
 
Сергей Проценко:
C'est le seul résultat.

Cliquez sur l'en-tête de l'une des colonnes : Symbole, Ticket, Temps.

Cliquez sur la touche GAUCHE. Cliquez sur le TITRE.

 
Vladimir Karputov:

Cliquez sur l'en-tête de l'une des colonnes : Symbole, Ticket, Temps.

Cliquez avec votre TOUCHE GAUCHE.

Ça a marché, merci, j'ai fermé la mauvaise paire plusieurs fois auparavant.