Erreurs, bugs, questions - page 1661

 
Alexey Viktorov:

Qu'il s'agisse d'un bug ou d'une question, mais il y a quelque chose de pas clair... se produit dans le testeur et dans le débogage... Tout va bien sur EURUSD, mais il y a un problème sur USDJPY...

Il y a eu un problème dans la construction, une douzaine d'années auparavant, lorsque le visualiseur montrait le futur d'un tick, alors que le MQL fonctionnait normalement - le futur n'était pas vu.

Essayez de comparer PositionGetDouble(POSITION_PROFIT) sur le prochain tick. Si cela coïncide avec ce que le visualiseur a montré auparavant - le problème est là. Slawa a donné une explication et a promis de la corriger.

Sinon - un autre bug dans ce cas.

 
fxsaber:

Sur une version antérieure d'une ou deux douzaines à la version actuelle, il y avait un problème lorsque le visualiseur affichait le futur sur un tick, alors que MQL fonctionnait bien - le futur n'était pas vu.

Essayez de comparer PositionGetDouble(POSITION_PROFIT) sur le prochain tick. Si cela coïncide avec ce que le visualiseur a montré auparavant - le problème est là. Slawa a donné une explication et a promis de la corriger.

Sinon - un autre bug dans ce cas.

Peut-être, mais le code ne prévoit pas de vérification au prochain tick. Une seule fois au moment de l'ouverture d'un nouveau bar. Et quelle garantie y a-t-il que ces valeurs proviennent du prochain tick ? Aucun... J'ai réessayé ; la perte est de 2,55, mais le débogueur affiche toujours 0,93.

Mais, croisons les doigts... le testeur 5 est bien meilleur que le testeur 4... Seuls des pépins et un fonctionnement inadéquat... Comment pouvez-vous déboguer un conseiller expert avec de tels problèmes ? Comment les gens font-ils autrement pour optimiser ? En fait, l'optimisation est une auto-illusion, et avec de tels bidouillages, c'est une auto-illusion au degré du mensonge 8.

Je vais devoir le tester sur une démo... depuis des semaines...

 

Ce n'est pas parce que le visualiseur montre des absurdités que le testeur lui-même est faux. Le testeur ne se soucie pas des problèmes de visualisation, pas du tout.

Utilisez TickValue pour calculer la taille du profit et la comparer à POSITION_PROFIT. Vous verrez que tout est pareil. La visualisation semble être un bug.

 
fxsaber:

Ce n'est pas parce que le visualiseur montre des absurdités que le testeur lui-même est faux. Le testeur ne se soucie pas des problèmes de visualisation, pas du tout.

Utilisez TickValue pour calculer la taille du profit et la comparer à POSITION_PROFIT. Vous verrez que tout est pareil. La visualisation semble être un bug.

Oui, je l'ai recalculé avant de poster la question. Il semble que ce soit vrai, vous pouvez recalculer à partir des captures d'écran. Je n'ai pas commencé à vérifier pour une raison. La perte est calculée en fonction de la taille du lot qui conduira au profit attendu à la fermeture du take profit. Tout était calculé correctement sur EURUSD, mais soudainement les pertes ne sont pas couvertes sur USDJPY... J'ai commencé à vérifier la formule... et a atteint ce bug. Il s'avère que le visualiseur n'a rien à voir avec cela.

 
Alexey Viktorov:

Oui, je l'ai compté avant de poster la question. Il semble que ce soit vrai, vous pouvez recalculer à partir des captures d'écran. Je n'ai pas commencé à vérifier pour une raison. La perte est calculée en fonction de la taille du lot à laquelle le bénéfice attendu sera fermé à la prise. Tout était calculé correctement sur EURUSD, mais soudainement les pertes ne sont pas couvertes sur USDJPY... J'ai commencé à vérifier la formule... et a atteint ce bug. Il s'avère que le visualiseur n'a rien à voir avec cela.

Je suis désolé, mais je ne comprends pas votre point de vue. Selon vous, qui est l'insecte - le testeur ou le visualisateur ?
 

Erreur de compilation de Script1.mq5

//Script.mqh
typedef void (*fn)();
#import "Script1.ex5"
        void g();
#import "Script2.ex5"
        void h();
        void h( fn );
#import
class A {
public:
        void f1() { h( g ); } //Error: #1 - no one of the overloads can be applied to the function call
                              //Error: #2 - cannot resolve function address
        void f2() {    g(); } //нормально (*)
        void f3() { Print( __FUNCTION__ ); }
};
//Script1.mq5
#property library
#include "Script.mqh"
void g() export
{
        A a;
        a.f3();
}

Erreur n° 1. L'appel h est sans ambiguïté par la signature ici.

Erreur n°2. Dans A::f1() l'appel de h( g ) au sens de g - peut sembler ambigu, mais d'un autre côté dans A::f2() le compilateur ne pose pas de questions inutiles concernant g() (et à juste titre - au moins au début les problèmes existants d'inclure le fichier d'en-tête avec la déclaration de la fonction dans le module avec son implémentation et son utilisation ultérieure dans ce module ont été résolus il y a longtemps). Et d'ailleurs, il est difficile de le réécrire autrement, car Script.mqh est un fichier d'en-tête commun

 
fxsaber:
Je suis désolé, mais je ne comprends pas votre point de vue. Qui, selon vous, a tort - le testeur ou le visualisateur ?

S'il affiche des valeurs similaires à la vérité, mais les calcule en utilisant des données erronées, le problème se situe dans mql5 et non dans le testeur ou le visualiseur.

Dans l'ensemble, merci pour votre contribution, je battrai le problème à long terme. Et je vérifierai une autre pièce similaire aujourd'hui. Peut-être que c'est le problème des tiques à cet endroit, hhz ?

 

Pourquoi l'avertissement est-il sur un pied d'égalité ?

void OnStart()
{
  uchar Data[];  
  ArrayInitialize(Data, UCHAR_MAX); // Warning: truncation of constant value
}
 
Chers professionnels, aidez-moi à comprendre le problème. Le conseiller expert fonctionne grâce au signal de l'indicateur dont la période peut être modifiée dans une large gamme allant de 3 barres à 10000 et plus. L'indicateur lui-même fonctionne bien et réagit de manière adéquate aux changements de période dans ces limites. Cependant, le conseiller expert du testeur de stratégie n'accepte pas les paramètres supérieurs à 1002 barres et signale "Zero Divide". Quel peut être le problème ? Je n'ai trouvé aucune limitation dans le code de l'Expert Advisor.
 
fxsaber:

Pourquoi l'avertissement sur un point plat ?

Il n'y a pas de surcharge de cette fonction avec uchar. Il n'y a que l'omble. C'est pourquoi il alerte si la constante est supérieure à 127.