Erreurs, bugs, questions - page 1520
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
C'est dommage. Oui, un exit() comme en C++ serait bien. De nos jours, l'intégration de la réponse des fonctions imbriquées dans la fonction appelante est plutôt problématique. Et il n'y a pas de bibliothèque universelle.
Vous pouvez également créer une fonction distincte pour supprimer tous les objets du programme et l'appeler lorsque la condition de suppression du programme du terminal est remplie, suivie deExpertRemove(), dans ce cas, tout devrait se terminer plus rapidement... mais pas de façon certaine :)
Comme je l'ai déjà écrit, et comme cela a été suggéré dans un article sur ce site, en cas d'erreur dans une fonction imbriquée profonde, vous pouvez appeler la division par 0 ou quitter le tableau. Mais ce n'est pas agréable.
Oui, et il ne s'agit pas seulement de la POO (d'après ce que j'ai compris, vous le pensez). Tout simplement - si une erreur ne peut être corrigée, le programme sera interrompu.
S'arrête, mais pas immédiatement
Je ne comprends pas, est-il correct de travailler avec ExpertRemove() dans les indicateurs ou pas ?
Je pense qu'il existe une fonction pour les indicateurs, ou bien elle n'est plus pertinente.
ChartIndicatorDelete();
Je ne comprends pas, est-il correct de travailler avec ExpertRemove() dans les indicateurs ou pas ?
Non. ExpertRemove() est superposé dans les indicateurs.
"S'arrête, mais pas immédiatement", dit-on à propos d'ExpertRemove en général. Cette fonction n'interrompt pas le fonctionnement du programme.
Non. ExpertRemove() est superposé dans les indicateurs.
"S'arrête, mais pas immédiatement", dit-on à propos d'ExpertRemove en général. Cette fonction n'interrompt pas le fonctionnement du programme.
Veuillez donner un exemple. Donnez le code source de l'indicateur pour illustrer le problème.
En même temps, l'aide de la fonction IsStopped indique que le fonctionnement du programme est interrompu de force après 3 secondes s'il y a une commande pour terminer le programme mql.
Et si while(true) est remplacé par while(!IsStopped()), l'indicateur se termine avec succès lorsqu'il est retiré du graphique.
Une raison amusante pour l'erreur interne du compilateur (fonction utilisée dans l'indicateur) :
void SaveData ( uint handle_, int wrdata_, int interv_, string dpath_, int tmode_, int tmult_, long ctime_, long& ltime_ )
{
int ierr, wrtint ;
// ----
if ( interv_ > 0 ) // mode travail
{
si ( MQLInfoInteger ( MQL_TESTER ) == 0 ) { wrtint = interv_ ; } // n'a pas de signification
sinon{ wrtint = interv_ * tmult_ ; } // n'a pas d'importance
//
si ( ( ctime_ - ltime_ ) >= ( wrtint * 60 ) ) // si cette ligne est commentée, l'erreur disparaîtra.
{
// un peu de code pour sauvegarder les données ... n'a pas de sens - testé
//
ltime_ = ctime_ ; // en général, cela ne compte pas non plus
} // si ( ( ctime_ - ltime_ ) >= ( wrtint * 60 )
} // si ( interv_ > 0 )
// ----
retour ;
} // void SaveData
(Désolé, je n'ai pas utilisé le bouton SRC intentionnellement, car je ne peux pas sélectionner les parties nécessaires du texte avec ce bouton).
Le remède est évident, mais vous devriez convenir que c'est un problème plutôt amusant. :)))
Une société de courtage a une commission de 16x2 dollars pour un chiffre d'affaires d'un million. Elle a apparemment fixé une commission de 16 dollars dans les paramètres du serveur. Et maintenant, pendant le test sur leur commission serveur, 16x2 est déduit de chaque transaction quelle que soit la taille du lot, c'est-à-dire que le test adéquat ne peut être fait qu'avec 10 lots.
Est-ce leur manque de compétence dans la configuration des serveurs ou une réelle limitation de MT5 ? Que puis-je leur conseiller de faire exactement sur les serveurs, pour que la commission soit traitée correctement dans le testeur ?
En même temps, l'aide de la fonction IsStopped indique que le fonctionnement du programme est interrompu de force après 3 secondes s'il y a une commande pour terminer le programme mql.
Et si while(true) est remplacé par while(!IsStopped()), l'indicateur se termine avec succès lorsqu'il est retiré du graphique.
Tout est clair. Nous avons fait une indulgence pour la suppression normale.
Quand le terminal fermera, ce sera dur. Pas plus de 3 secondes.
Et je ne suis pas sûr que nous allons écrire cela dans la documentation, 1. pour ne pas se laisser aller à écrire des indicateurs aussi imprudents (avez-vous écrit cela pour vérifier ?) 2. Aussi relâché, aussi serré.