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
Pas de problème, angevogeur
Le code était à l'origine ceci :
Je l'ai simplement modifié en ceci :
Comme vous pouvez le voir, je n'ai pas changé la "viande" des fonctions. J'ai simplement fait les modifications nécessaires pour me conformer à la nouvelle fonctionnalité. Une chose sur laquelle je suis encore un peu confus est le changement de start() à OnStart() ou OnTick(), quel qu'il soit (j'ai oublié pour le moment, mais j'utilise toujours start() sans problème. Je dois préciser qu'il s'agit d'un indicateur personnalisé. Une autre chose qui me dérange est la limitation de ce que l'on peut utiliser selon que l'on code un EA, un indicateur ou un script. Il y a des choses qui ont du sens (comme l'interdiction d'implémenter des transactions à moins de coder un EA) et d'autres qui n'en ont pas (comme l'interdiction d'utiliser une MessageBox dans un indicateur). Une autre chose qui me dérange vraiment est l'absence d'événements disponibles pour des choses comme l'ouverture et la fermeture des transactions. Cela serait vraiment utile pour ce que je suis en train de mettre en place actuellement.
Voici un exemple de ce à quoi je veux en venir avec ma dernière déclaration : Je veux pouvoir afficher un signal d'achat si certains critères sont remplis, afficher un signal de clôture de transaction d'achat si certains critères sont remplis, mais je veux aussi permettre à mon utilisateur d'annuler le signal d'achat et d'attendre un autre s'il le souhaite, et faire de même pour le signal de clôture. S'il choisit de fermer la transaction, je veux que les signaux d'achat et de fermeture disparaissent et que l'indicateur surveille les critères d'entrée pour une autre transaction. Les parties d'annulation fonctionnent parfaitement mais je ne peux pas détecter les événements d'ouverture et de fermeture car MQL4 ne fournit pas la messagerie pour cela.
Si vous avez regardé mon profil, vous aurez vu que je ne suis en aucun cas un programmeur novice. Le langage ne fournit tout simplement pas toutes les fonctionnalités qu'un professionnel attend d'une plateforme de développement moderne. Dans un autre ordre d'idées, je n'arrive pas à faire fonctionner le débogage, ce qui est un problème majeur. J'ai suivi la documentation, mais lorsque j'ai essayé de mettre le débogueur en marche, j'ai obtenu un graphique qui a fait apparaître la boîte de dialogue des propriétés pour initialiser mon indicateur, mais lorsque j'ai cliqué sur OK pour terminer la configuration de l'indicateur, le graphique a disparu et c'est tout. Peut-être que des choses se perdent dans la traduction du russe à l'anglais et que quelque chose m'échappe ou peut-être que le "gâteau" n'est pas tout à fait cuit. En tant que professionnel, je sais combien la création d'un langage et d'un environnement de développement comme celui-ci est une tâche monumentale. Mes remarques s'apparentent davantage à des conseils pratiques à l'intention du personnel chargé du développement qu'à des plaintes.
Prof
Pas de problème, angevogeur
Le code était à l'origine celui-ci :
Prof
Si vous n'avez pas déclaré les variables que je vais définir et si les méthodes que je vais appeler ne sont pas déclarées et étoffées, le programme ne compilera pas. Ce n'est pas possible. Je m'attendais à ce que vous le sachiez. J'ai posté ce que je pensais que vous demandiez - la solution qui a résolu mon problème. Quoi qu'il en soit, si vous utilisez MetaQuotes et que vous essayez de comprendre ce qui se passe avec MetaTrader et de le résoudre, j'ai posté plus d'informations ci-dessous. Commentez le bloc if dans init(), déclarez MA_Display_Time_Frame globalement comme un entier et ajoutez ces méthodes :
Puisque ceci est destiné à être un produit commercial, ce n'est pas tout le code de l'indicateur, mais cela devrait compiler et potentiellement causer le problème en utilisant les méthodes originales init() et deinit(). C'est suffisant pour créer un couple d'étiquettes et de boutons. Comme l'un des posters l'a mentionné, l'échec était intermittent. Il était cependant lié à toute action qui aurait provoqué la désinitialisation de l'indicateur, comme la modification des propriétés de l'indicateur, le changement de cadre temporel ou l'arrêt et le redémarrage du terminal. Si vous voulez tester la modification des propriétés, ajoutez ces externs aux globales :
Si vous ajoutez les externs, il n'est pas nécessaire de commenter le bloc if qui y fait référence. Cela devrait être suffisant pour que vous puissiez compiler et essayer de reproduire le problème. Le problème ne s'est pas produit depuis que j'ai changé les anciennes fonctions d' initialisation et de désinitialisation et que je suis passé aux nouvelles versions. Si vous avez besoin d'autre chose, faites-le moi savoir. Je garderai un œil sur le fil de discussion.
J'ai eu une situation similaire, l'indien fonctionnait bien lorsqu'il était déposé sur la carte.
Il a bien fonctionné après le changement de paramètres, il a bien fonctionné après le changement de Tf.
Après avoir fermé le MT4 et l'avoir redémarré, l'indi n'apparaissait pas.
Il était dans la liste des indicateurs sur le graphique, mais il ne fonctionnait pas.
Après avoir ouvert la fenêtre des paramètres et cliqué sur le bouton OK, l'indi a immédiatement disparu de la liste.
J'ai essayé toutes les astuces, y compris celles décrites dans les messages ci-dessus, mais rien n'a fonctionné.
Il s'est avéré que c'était le problème de la division par 0 !
La simple condition : if(x!=0) a résolu le problème.
Oui, je viens d'avoir le même problème avec un autre indi.
Sans le "si" à chaque démarrage de la plateforme, l'indi a le problème de division par 0,
le nouveau MT4 semble n'avoir aucune information stockée jusqu'à ce qu'il soit coché.
L'autre solution serait d'utiliser OnCalculate() au lieu de start() ou OnStart(), je suppose ?
Mais, c'est quelque chose dont il faut se plaindre auprès de MetaQuotes.
Vous devez utiliser l'astuce du retour (0).
Quelqu'un développera un peu plus s'il y a un intérêt.
Vous devez utiliser l'astuce du retour (0).
Quelqu'un élaborera un peu plus si cela suscite de l'intérêt.
Eh bien, les anciens indicateurs que vous pouvez trouver partout sur Internet ne voient pas leur code modifié automatiquement.
Si quelqu'un peut bidouiller des codes et comprendre le problème, il peut le faire tout seul.
Tous les autres ne peuvent que ressentir l'inconfort de ne pas voir leurs indicateurs chaque fois qu'ils ouvrent MT4.
S'ils ont un modèle, ils peuvent l'utiliser pour restaurer l'indicateur, mais cela signifie qu'ils doivent le faire à chaque fois.
Les modèles sont une autre histoire, dans le nouveau Built 625.
Les gars,
Vous êtes tous à côté de la plaque. Ce que vous décrivez est un problème de timing qui a toujours été un problème. Vous pouvez vous en occuper très simplement avec ceci :
Toute erreur de division par zéro que vous obtenez est due au fait que vous essayez de faire des calculs avant que le serveur ne soit installé. Si vous effectuez des calculs dans la fonction d'initialisation, ne le faites pas ! Mettez le code ci-dessus dans votre start() ou OnStart() et ensuite faites ce dont vous avez besoin. Dadas, essayer d'être aussi simple que vous l'êtes va vous faire perdre beaucoup de temps. Vous avez de la chance avec votre indi.
Quand un indi disparaît, vous avez un échec d'initialisation. Si vous regardez vos logs, vous verrez "global initialization failure". Vous devez trouver pourquoi vous obtenez cela et le résoudre. Si vous ne le faites pas, vous n'aurez fait que mettre un pansement sur une coupure qui nécessitait des points de suture et cela se retournera contre vous.
Il me semble que cette erreur n'a rien à voir avec OnInit() et que la description de l'erreur est trompeuse.
Avec une seule ligne de code
On obtient l'erreur array out of range.
Changez d'horizon temporel et vous obtenez Global initialisation failed et l'indicateur est supprimé du graphique.