Erreurs, bugs, questions - page 1904

 
Artyom Trishkin:

Le calcul n'est pas unique - s'il n'y a qu'une seule instance de la classe, alors le calcul devrait l'être, s'il y a plusieurs instances, alors pourquoi dupliquer le même calcul dans d'autres instances de la même classe ? Il faut des ressources.

En même temps, faire un autre cycle long dans la classe parent pour calculer ces mêmes données n'est pas non plus optimal (nous avons déjà deux cycles longs), et la classe enfant ne sera pas autosuffisante.

J'ai suggéré comment faire ce dont nous avons besoin sans duplication. Nous ne parlons pas de descendants.
 

Bonjour !

Après 4 ans, je suis revenu à un seul EA (acheté en 2013 et oublié). J'ai décidé de réessayer. Mais maintenant le système donne une erreur dans une des lignes de code. Apparemment, quelque chose a changé en 4 ans avec Metatrader, car cela fonctionnait bien avant. Je n'ai aucune idée de comment programmer, c'est pourquoi j'ai acheté Expert Advisor). Pouvez-vous me dire quelle peut être l'erreur.

Voici une partie du code

extern int Bperiod = 20 ; // Période de calcul de la moyenne de la ligne de l'indicateur principal.

extern int Bdeviation = 2 ; // Déviation par rapport à la ligne de base.

extern int Bshift = 0 ; // Décalage de l'indicateur par rapport au graphique des prix.

extern int Baprice = 0 ; // CLOSE=0, OPEN=1, HIGH=2, LOW=3, MEDIAN=4, TYPICAL=5, WEIGHTED=6 .

chaîne externe _6 = "========" ;

extern bool UseAutoDig = true ; // If=true->les variables externes en points sont multipliées par 10.

extern bool UseECN\NDD = true ; // Si=true->les ordres sont établis sans arrêts, puis modifiés.

L'erreur s'affiche à la dernière ligne de la commande

UseECN\NDD, cette commande est répétée de nombreuses fois dans l'EA et une erreur se produit à chaque ligne avec cette commandeExemples d'

erreurs

'\' - séquence d'échappement illégale e_plat2.mq4 49 22

NDD' - point-virgule attendu e_plat2.mq4 49 23

UseECN" - identifiant non déclaré e_plat2.mq4 144 6

"NDD" - identifiant non déclaré e_plat2.mq4 144 13

NDD - un opérateur est attendu e_plat2.mq4 144 13

UseECN' - identifiant non déclaré e_plat2.mq4 172 6

'4206' - valeur de cas déjà utilisée e_plat2.mq4 643 8


Si vous le voulez bien, quelle pourrait être la raison ?




 
platoshkasexy:

UseECN\NDD cette commande est répétée de nombreuses fois dans l'Expert Advisor et dans chaque ligne où elle est présente, une erreur s'affiche

Remplacer dans tout le code "UseECN\NDD" par "UseECN_NDD" (Ctrl+H)

 
Andrey Khatimlianskii:

Remplacer dans tout le code "UseECN\NDD" par "UseECN_NDD" (Ctrl+H)


Merci beaucoup ! On dirait qu'il a compilé !

Je vais tester...

 
Andrey Khatimlianskii:

Pourquoi avez-vous besoin de ces autres instances s'il n'y a qu'un seul calcul ?


Vous feriez mieux de donner une description plus détaillée du problème, la réponse sera alors plus concrète.

La classe comporte une boucle qui collecte des données sur tous les ordres et toutes les positions 1) du compte et 2) seulement ceux qui correspondent au filtre m_symbol et m_magic.

Par conséquent, une fois la boucle terminée, nous disposons de données 1) sur l'ensemble du compte et 2) uniquement sur les ordres et les positions appartenant à l'EA.

Cependant, si un EA utilise plusieurs symboles ou magiciens, nous devons créer des instances de la classe pour recueillir des statistiques pour chaque symbole/magie. C'est ici que la question se pose : pourquoi avons-nous besoin de collecter dans ces nouvelles instances des statistiques (1) qui ont déjà été collectées sur la toute première instance de la classe ?

D'où la question : comment savoir, à l'intérieur de la classe, si son instance est la seule, et donc s'il faut collecter la statistique 1, ou, si l'instance n'est pas la seule, ne pas collecter la statistique 1, et la donner dès la toute première instance (ici aussi, on ne sait pas comment, à l'intérieur de la classe, si elle n'est pas la seule instance, rediriger la demande vers la toute première instance de la classe pour donner la statistique 1).

 
Artyom Trishkin:

La classe comporte une boucle qui collecte des données sur tous les ordres et toutes les positions 1) du compte et 2) seulement ceux qui correspondent aux filtres m_symbol et m_magic.

Par conséquent, une fois la boucle terminée, nous disposons de données 1) sur l'ensemble du compte et 2) uniquement sur les ordres et les positions appartenant à l'EA.

Cependant, si un EA utilise plusieurs symboles ou magiciens, nous devons créer des instances de la classe pour recueillir des statistiques pour chaque symbole/magie. Une question se pose ici : pourquoi avons-nous besoin de collecter les statistiques (1) dans ces nouvelles instances, qui ont déjà été collectées dans la première instance de la classe ?

D'où la question : comment savoir, à l'intérieur de la classe, que son instance est la seule, et donc qu'il est nécessaire de collecter la statistique 1, ou, si l'instance n'est pas la seule, ne pas collecter la statistique 1, et la délivrer à partir de la toute première instance (on ne sait toujours pas comment, à l'intérieur de la classe, si elle n'est pas la seule instance, rediriger la requête vers la toute première instance de la classe pour délivrer la statistique 1).

1) Collecter des statistiques pour tous les mages/outils d'une même classe. La liste des mages doit être spécifiée lors de l'initialisation et placée dans un tableau.

2) Comme déjà conseillé, faites en sorte que les résultats de la statistique n°1 soient statiques, et s'ils sont disponibles, ne commencez pas à les recalculer.

 
Artyom Trishkin:

La classe comporte une boucle qui collecte des données sur tous les ordres et toutes les positions 1) du compte et 2) seulement ceux qui correspondent au filtre m_symbol et m_magic.

Par conséquent, une fois la boucle terminée, nous disposons de données 1) sur l'ensemble du compte et 2) uniquement sur les ordres et les positions appartenant à l'EA.

Cependant, si un EA utilise plusieurs symboles ou magiciens, nous devons créer des instances de la classe pour recueillir des statistiques pour chaque symbole/magie. C'est ici que la question se pose : pourquoi devrions-nous collecter les statistiques (1) dans ces nouvelles instances, qui ont déjà été collectées dans la première instance de la classe ?

D'où la question : comment savoir, à l'intérieur de la classe, si son instance est la seule, et donc s'il faut collecter la statistique 1, ou, si l'instance n'est pas la seule, ne pas collecter la statistique 1, et la donner dès la toute première instance (ici aussi, on ne sait pas comment, à l'intérieur de la classe, si elle n'est pas la seule instance, rediriger la demande vers la toute première instance de la classe pour donner la statistique 1).

Si l'anglais n'est pas un problème - j'ai publié un exemple d'analyse hypercube sur mon blog. Parcourez l'historique une fois, puis demandez des informations à l'hypercube dans les tranches (différentes) souhaitées. Il existe, bien sûr, des sélecteurs par magicien et par symbole.
 
Artyom Trishkin:

D'où la question : comment savoir à l'intérieur de la classe que son instance est la seule, ce qui signifie que vous devez collecter la statistique 1, ou, si l'instance n'est pas la seule, alors ne collectez pas la statistique 1, et donnez-la dès la première instance.

On vous l'a déjà dit :

Mieux encore, tous les calculs uniques devraient être placés dans une classe distincte et en faire un singleton.

La première fois qu'on accède à un singleton, on lit les statistiques, puis on les récupère seulement.


 

Messieurs les développeurs, veuillez expliquer pourquoi l'événement de typeOnTesterPass, lors de l'optimisation du nombre de variantes supérieur à8.6e+18, n'est appelé que lors de la création d'une nouvelle génération ?

Et pourquoi n'y a-t-il pas un seul mot sur cette fonctionnalité dans le fichier d'aide ?

Pourquoi dois-je fouiller dans la moitié d'un Expert Advisor pour trouver une réponse, pourquoi cette fonction fonctionne correctement dans un EA, alors que dans l'autre, elle n'écrit les résultats d'optimisation dans le fichier que lors d'une nouvelle génération ?


Comment puis-je contourner cette limitation ?

 
8.6 е+18
Êtes-vous sûr que ce nombre est exactement 860000000000000000 ?
Si vous convertissez ce nombre de bits en gigaoctets, vous obtenez - 1075000000000000GB.
Raison: