Erreurs, bugs, questions - page 504

 
Vigor:

L'optimiseur de code a-t-il des limitations sur la taille de l'arbre d'objets ?

J'obtiens une "erreur d'optimisation de l'arbre" au stade de la compilation lorsque le nombre d'objets est augmenté.

P.S. En mode débogage, il compile.

Pouvez-vous joindre un exemple du code source dans le ticket servicedesk ? Le code sera retiré après vérification.

Il est fort probable que ce soit à cause des longues fonctions, mais vous feriez mieux de nous envoyer le code pour que nous puissions l'examiner nous-mêmes et corriger l'erreur. Il aidera de nombreux commerçants.

 
Valmars:

Tout d'abord, quel est le sens du téléchargement forcé de l'historique dans le testeur ? Le testeur lui-même téléchargera l'historique nécessaire et accessible depuis le serveur, s'il y a des demandes dans le code ou des opérations commerciales pour les symboles nécessaires. Puisque votre code est vide, le testeur n'a pas besoin de simuler des ticks pour d'autres symboles, à l'exception du symbole sur lequel le test est effectué. Et c'est ce que le testeur a téléchargé de son histoire. Et comme il n'y a pas d'historique (dans le testeur), on se retrouve avec 0.

Deuxièmement, même si vous augmentez le code en appelant l'historique complet pour tous les symboles, il est peu probable que le téléchargement de tout l'historique disponible pour tous les symboles réussisse, et quelque part il échouera. Comme le testeur utilise la base de citations des terminaux, il doit télécharger l'historique nécessaire.
Le problème est que lorsque le testeur essaie de simuler des ticks pour d'autres symboles, le journal commence à être inondé de messages comme contient 0 enregistrements M1, parce qu'il n'y a pas d'historique à cette date et le journal grossit jusqu'à atteindre des volumes inimaginables, et pour éviter ces erreurs, j'ai besoin de connaître la date de début de l'historique, et lorsqu'elle est demandée, la fonction SeriesInfoInteger(symbol,0,SERIES_SERVER_FIRSTDATE) renvoie 0
 

Pouvez-vous me dire ce que signifient les valeurs de la colonne Résultat lorsque la fonction cible Balance + Drawdown min est sélectionnée ?

 
tol64:

Pouvez-vous me dire ce que signifient les valeurs de la colonne Résultat lorsque la fonction cible Balance + Drawdown min est sélectionnée ?

Si vous consultez l'aide dans le terminal, de nombreuses questions disparaîtront car tout y est écrit.

Critère d'optimisation

Un critère d'optimisation est un certain facteur, dont la valeur définit la qualité de l'ensemble testé de paramètres d'entrée. Plus la valeur du critère d'optimisation est élevée, plus le résultat de l'essai avec l'ensemble de paramètres donné est considéré comme bon. Ce paramètre peut être sélectionné dans l'onglet "Paramètres" à droite du champ "Optimisation".

Le critère d'optimisation n'est requis que pour l'algorithme génétique.

Les critères d'optimisation suivants sont disponibles :

  • Solde maximal - l'indicateur d'optimisation est la valeur du solde maximal;
  • Solde + Rentabilité maximale - la valeur maximale du solde multipliée par la rentabilité est le critère optimisé ;
  • Solde +gain maximum attendu - le produit du solde par le gain attendu est considéré comme un indicateur ;
  • Solde + tirage minimum - niveau de tirage (100% - tirage)*Le solde est pris en compte en plus de la valeur du solde;
  • Solde + facteur de récupération maximal - la valeur est le produit du solde par le facteur de récupération;
  • Solde +ratio de Sharpe maximum - l'indice est le produit du solde par le ratio de Sharpe;
  • Critère d'optimisation personnalisé - en sélectionnant cette option, la valeur de OnTester() dans le conseiller expert sera considérée comme le critère d'optimisation. Cette option permet aux utilisateurs d'utiliser toute valeur personnalisée pour l'optimisation.


 
sergey1294:

Merci. )) Pour une raison quelconque, je pensais au critère du Drawdown minimum, et non au solde + Drawdown minimum. ))

 
sergey1294:
Le problème est que lorsque le testeur essaie de simuler des ticks pour d'autres symboles, le journal commence à être rempli de messages comme contient 0 enregistrements M1 parce qu'il n'y a pas d'historique à cette date et le journal s'agrandit jusqu'à atteindre des quantités inimaginables et j'ai besoin de connaître la date de l'historique pour éviter ces erreurs, mais lorsque vous demandez la fonction SeriesInfoInteger(symbol,0,SERIES_SERVER_FIRSTDATE) renvoie 0

Si je comprends bien, avant de procéder au test, le testeur crée un environnement de marché pour le compte connecté (le dernier connecté s'il n'y a pas de connexion au serveur), vérifie la synchronisation des données avec le serveur (encore une fois, s'il y a une connexion), télécharge les cotations manquantes à partir de la date de début du test (s'il y a une connexion), crée une séquence de cotations de test pour tous les symboles nécessaires, et seulement ensuite commence le test. Que faire s'il ne parvient pas à télécharger l'historique nécessaire (par exemple, en raison de l'absence d'historique sur le serveur ou de l'absence de connexion avec le serveur) ? ? Il vous le dit honnêtement. Non, tu n'es pas obligé.

Ensuite, vous voulez obtenir la date de début de l'historique sur le serveur (dans le testeur). Il semble que cette propriété ne soit pas incluse dans l'environnement de marché du testeur, bien qu'elle ait pu être sauvegardée à partir du serveur. Est-ce une erreur ? Je ne pense pas. Après le début des tests, le testeur ne peut pas accéder au serveur (via le terminal) pour télécharger les devis dont vous avez besoin. Tout ce qui est disponible est déjà chargé par le testeur pendant la phase d'initialisation du processus de test et la séquence de test a déjà été formée et ne peut être modifiée. Au lieu de SeriesInfoInteger(symbol,0,SERIES_SERVER_FIRSTDATE), dans votre cas, je pense que vous pouvez utiliser SeriesInfoInteger(symbol,0,SERIES_FIRSTDATE), cela devrait fonctionner dans le testeur.

 
Renat:

Pouvez-vous joindre un exemple du code source dans le ticket servicedesk ? Le code sera retiré après vérification.

Il est fort probable qu'il s'agisse de fonctions longues, mais vous feriez mieux de nous envoyer le code afin que nous puissions l'examiner et corriger l'erreur. Il aidera de nombreux commerçants.

Ok, j'ai joint 2 options avec "erreur de génération de code" et "erreur d'optimisation de l'arbre". La fonction onInit est vraiment longue (~1000 lignes de code généré).

Ticket #217917.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Vigor:

Ok, j'ai joint 2 variantes avec "erreur de génération de code" et "erreur d'optimisation de l'arbre". La fonction onInit est vraiment longue (~1000 lignes de code généré).

Ticket #217917

Merci, nous allons nous en occuper lundi.
 
Valmars:

Si je comprends bien, avant de procéder au test, le testeur crée un environnement de marché pour le compte connecté (le dernier connecté s'il n'y a pas de connexion au serveur), vérifie la synchronisation des données avec le serveur (encore une fois, s'il y a une connexion), télécharge les cotations manquantes à partir de la date de début du test (s'il y a une connexion), crée une séquence de cotations de test pour tous les symboles nécessaires, et seulement ensuite commence le test. Que faire s'il ne parvient pas à télécharger l'historique nécessaire (par exemple, en raison de l'absence d'historique sur le serveur ou de l'absence de connexion avec le serveur) ? ? Il vous le dit honnêtement. Non, tu n'es pas obligé.

Ensuite, vous voulez obtenir la date de début de l'historique sur le serveur (dans le testeur). Il semble que cette propriété ne soit pas incluse dans l'environnement de marché du testeur, alors qu'elle aurait pu être sauvegardée depuis le serveur. Est-ce une erreur ? Je ne pense pas. Après le début des tests, le testeur ne peut pas accéder au serveur (via le terminal) pour télécharger les devis dont vous avez besoin. Tout ce qui est disponible est déjà chargé par le testeur pendant la phase d'initialisation du processus de test et la séquence de test a déjà été formée et ne peut être modifiée. Au lieu de SeriesInfoInteger(symbol,0,SERIES_SERVER_FIRSTDATE), dans votre cas, je pense que vous pouvez utiliser SeriesInfoInteger(symbol,0,SERIES_FIRSTDATE), cela devrait fonctionner dans le testeur.


La même fonction renvoie zéro. J'ai aussi essayéSERIES_TERMINAL_FIRSTDATE . La conclusion est que la fonction SeriesInfoInteger ne fonctionne pas dans le testeur. Il ne fonctionne que pour l'instrument sur lequel le test est en cours. Peut-être avez-vous une idée de la façon dont on peut effectuer le test pour des instruments dont la date de début d'historique est différente lorsqu'on sélectionne l'intervalle "Tout l'historique".
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту - Документация по MQL5
 
Encore une fois, l'heure sur le terminal est passée à GMT+0 alors qu'elle devrait être GMT+1, cela a déjà été discuté. Veuillez le corriger.