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
Oui... c'est la même chose en principe...
La nouvelle construction a cessé de copier des structures simples dans la boucle. Voici un script de test :
Résultat :
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Violation d'accès en lecture à 0x00000000209FFFAC dans 'E:\Program Files\Championship_2011\MQL5\Scripts\Test_Copy_Struct.ex5'.
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) i=0
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=3000.00 MAPeriod=100 MA_use=1 Lots=0.10 takeprofit=1000
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Setting reopened=110 overpos=130 TrailingStop=200 WithoutlossLevel=1300 WithoutlossProfit=1500
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=1000.00 MAPeriod=85 MA_use=0 Lots=0.15 takeprofit=1700
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD, M15) Setting reopened=110 overpos=140 TrailingStop=200 WithoutlossLevel=600 WithoutlossProfit=800
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=2000.00 MAPeriod=105 MA_use=1 Lots=0.13 takeprofit=2700
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Setting reopened=60 overpos=90 TrailingStop=1000 WithoutlossLevel=100 WithoutlossProfit=900
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=0.00 MAPeriod=0 MA_use=0 Lots=0.00 takeprofit=0
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Setting reopened=0 overpos=0 TrailingStop=0 WithoutlossLevel=0 WithoutlossProfit=0
https://www.mql5.com/ru/docs/basis/function/events dit à la fin :"Pour une meilleure compréhension, il sera utile d'exécuter l'indicateur dont le code est joint ci-dessous. "
Exécutez le code. Pendant le week-end. Il n'y a pas eu de meilleure compréhension - c'était bien comme ça, je pense, mais les pires impressions ont été ajoutées. Il n'y a pas de ticks pendant le week-end, donc prev_calculated = 0 à ce moment-là toujours, quand on passe d'une période à l'autre :
Cependant, à un moment donné, cette valeur apparaît (pas de reconnexion, honnêtement noble !) :
et de drôles de lignes sur le graphique :
Ou moitié moins amusant, comme ça :
Il y avait même des lignes au début de l'histoire sous forme de ZigZag (hélas, j'ai oublié de faire une capture d'écran et je n'ai pas pu la reproduire).
Des lignes apparaissent également sur d'autres TF, mais de manière plus éparse. Vous pouvez facilement le constater par vous-même.
Est-ce que c'est exactement ce que les auteurs voulaient dire ?
Pourquoi le résultat de prev_calculated est-il au moins inégal en l'absence de ticks, sinon étrange ? Y a-t-il un dysfonctionnement lors du passage d'un TF à l'autre ?
Ces lignes (ou d'autres) auraient-elles dû apparaître en dehors des tics ?
Dans de rares cas, les sauts relativement fréquents d'une TF à l'autre peuvent-ils générer une sorte de pseudotick qui déclenche le calcul des valeurs des barres sur l'historique, etc.
Dois-je m'attendre à ce que le comportement erratique du terminal soit éliminé ? Ou dois-je apprendre les mathématiques ?
Peut-être que j'essaie de faire quelque chose que je ne devrais pas vouloir faire ? Dans ce cas, justifiez votre point de vue.
J'ai beaucoup de questions... mais ce n'est que le début...
Suite...
Sur le même lien, il y a une phrase :"Note: si la fonction OnCalculate renvoie une valeur nulle, aucune valeur d'indicateur n'est affichée dans la DataWindow du terminal client. "
Voilà le truc... Si besoin est, j'accepterai volontiers toute croissance du bras et courrai immédiatement le redresser si nécessaire. Mais. Dans les indicateurs de complexité simple et moyenne, vous pouvez vous sortir de certaines situations d'achoppement. Mais au fur et à mesure que le code devient plus complexe, toute fonction de Copy... () (à la fois prenant un autre handle d'indicateur comme argument, et sans lui) commence à compliquer la situation, comme je le pense personnellement, traitant de la programmation MQL il y a une semaine. C'est à ce moment-là que l'on ne sait plus ce que l'on peut changer dans le code, car tout ce qui peut être changé l'a été, et le reste, me semble-t-il, ne doit pas être changé, car il n'a rien à voir avec le problème. Ou bien une pensée absolument désarmante surgit : changer tout l'algorithme, car les particularités et les aléas du terminal n'ont pas été pris en compte. Après tout, en étudiant le MQL à travers la documentation, vous devez faire face aux nuances, que les développeurs ont passées sous silence, très probablement par inadvertance. Et le programmeur MQL n'apprend jamais beaucoup de choses après avoir étudié complètement la documentation... Et ce qui est le plus décevant, c'est qu'en utilisant MQL, soit vous ne pouvez pas du tout corriger les nombreux caprices du terminal, soit vous pouvez utiliser des béquilles douteuses et un jour vous planter douloureusement...
Eh bien... Je suis devenu un peu fou aujourd'hui. C'est le week-end.
Et voici ce que je voulais vous dire ce matin...
https://www.mql5.com/ru/forum/1111/page570#comment_117425 - J'ai complètement résolu le problème principal de l'indicateur qui ne se dessine pas au début du terminal initial (j'espère que personne ne contestera que rien ne devrait empêcher un indicateur fractal de s'afficher correctement sur l'ensemble de l'historique même s'il n'y a pas de ticks ?)
C'était :
remplacé par :
Je reconnais mon inattention et le formalisme pernicieux qui en découle.
Mais. Il a aidé dans le cas le plus simple (j'ai volontairement simplifié l'indicateur initial). Dans un indicateur plus complexe, ces opérations n'ont pas été utiles - à un certain moment, les changements n'ont pas montré de différence, surtout maintenant qu'il y a beaucoup de fonctions de copie. Et j'aimerais beaucoup obtenir des instructions sensées sur la façon et l'endroit où aller ensuite. Après tout, on consacre tellement de temps à quelque chose qui fonctionne dès le départ. Jusqu'à présent, je ne sais même pas si c'est ma faute ou celle du terminal. Et je ne suis pas sûr que ce soit juste un manque de si et deretours... Ça a l'air suspect ici et là, comme d'autres, par exemple...
J'enverrai le code aux développeurs de mon personnel si nécessaire ; je peux également joindre un code similaire, mais implémenté d'une manière différente et qui fonctionne sans problèmes (bien qu'il ne corresponde pas tout à fait aux tâches et aux objectifs que j'explore).
Il y a une forte suspicion que le terminal s'amuse avec le cache (je suis presque hors du circuit, donc...). Pire encore, même MetaEditor affecte d'une manière ou d'une autre la gestion de ce qui se passe dans le terminal à ce moment-là.
Plus d'une fois j'ai rencontré un problème, lorsque j'ai modifié le code du programme MQL (qui imprime les données de débogage dans le journal de l'onglet Expert Advisor), que je l'ai recompilé, que je suis allé dans la fenêtre du Terminal et que j'ai vu les résultats précédents se répéter, bien que je puisse définitivement dire qu'il ne s'agit pas d'une sorte de reprise retardée d'un programme précédent non terminé. Donc, je compile et envoie le code mis à jour à MetaEditor avec F7, et pendant ce temps le terminal reçoit la commande pour rejouer l'ancien code (à partir du cache, ou quelque chose comme des pages de mémoire "truquées" par l'OS). Il est intéressant de noter qu'il est possible de défaire/décharger la version précédente du code .ex5 "coincée entre les dents" non seulement en déchargeant complètement le processus terminal.exe, mais dans certains cas rares - simplement en fermant MetaEditor. Comprenez-le comme vous voulez, je n'ai fait que relater ce que j'ai personnellement observé.
Récemment, il y a eu une situation où le design :
Le graphique n'affiche que la valeur du premier Print, mais il était inutile d'attendre la sortie des éléments du tableau. Après la suppression de la première impression et la recompilation, la sortie cyclique des éléments du tableau a commencé instantanément. S'agit-il d'une conspiration secrète des Princes contre la communauté MQL5 ou suis-je le seul à avoir autant de malchance ?De plus, je tiens à préciser que ces cas étranges de comportement du terminal ont été observés non pas sur une instance de MT5 surchargée de fenêtres graphiques, d'objets graphiques et de programmes MQL, mais avec une seule fenêtre graphique propre (sans compter le contour d'un indicateur en cours d'exécution).
1. Le code ArrayInitialize ne fonctionne pas, si la boucle est décommentée, tout va bien.
Et lorsque l'on déclare des variables dans une classe et un indicateur au niveau global avec le même nom, un avertissement apparaît.
1. La fonction PlotIndexSetDouble(z,EMPTY_VALUE) est utilisée pour les tampons indicateurs dans l'inite.
2. Ça s'affiche. Il est recommandé de marquer les membres de la classe avec le préfixe "m_".