Discussion de l'article "Présentation de MQL5 : Comment écrire un simple Expert Advisor et un indicateur personnalisé" - page 2
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
Pour les tampons d'indicateurs, il est indiqué SetIndexBuffer:
Pour les Expert Advisors, il devrait en être de même.
Pas encore d'analogie. Lors de la vérification de ce code
j'ai placé un point d'arrêt en face de l'opérateur return. Le débogueur produit le résultat suivant : high "dynamic array[8563], S". Je comprends que S est l'abréviation de "Series".
L'analogie ne fonctionne pas encore. Lorsque l'on vérifie ce code
j'ai placé un point d'arrêt en face de l'opérateur return. Le débogueur génère le résultat suivant : high "dynamic array[8563], S". Je comprends que S signifie "Series".
Alors pourquoi cela ne fonctionne-t-il pas ? Si vous avez des doutes, vérifiez explicitement la présence de séries à l'aide de la fonction ArrayGetAsSeries:
Résultat
Pourquoi cela ne fonctionne pas. En cas de doute, vérifiez explicitement la sérialité à l'aide de la fonction ArrayGetAsSeries:
Permettez-moi de vous rappeler de quoi je parle. Je demandais si les tableaux devaient toujours être indexés après avoir été copiés. Vous avez fait référence à la note de la fonction SetIndexBuffer et avez dit qu'il devrait en être de même pour les EA. Cette note de fonction SetIndexBuffer implique que"après la liaison, le tableau dynamique buffer[] sera indexé comme les tableaux ordinaires, même si le tableau lié est prédéfini pour être indexé comme les séries temporelles".
Par conséquent, j'ai vu une analogie pour les AE en ce sens qu'après avoir utilisé les fonctions CopyTime, CopyHigh et CopyLow, les tableaux récepteurs devront également être indexés comme des tableaux normaux. Pour tester cette analogie, j'ai placé la fonction ArraySetAsSeries avant la fonction CopyHigh, dans la fonction OnInit(). Mais mon exemple et la vérification explicite de la sérialisation par la fonction ArrayGetAsSeries que vous avez suggérée montrent qu'après l'utilisation de la fonction CopyHigh, l'indexation prédéfinie (comme dans timeseries) du tableau récepteur high[] n'a pas changé. Cela indique à son tour que l'analogie avec la fonction SetIndexBuffer que vous avez mentionnée n'est pas encore observée, car sinon la vérification explicite de la sérialisation aurait dû montrer que IsSeries=false.
Yedelkin:
Pour tester cette analogie, j'ai placé la fonction ArraySetAsSeries avant la fonction CopyHigh, dans la fonction OnInit(). Mais mon exemple et la vérification explicite de la sérialisation par la fonction ArrayGetAsSeries que vous avez suggérée montrent qu'après l'utilisation de la fonction CopyHigh, l'indexation prédéfinie (comme dans timeseries) du tableau récepteur high[] n'a pas changé.
En fait, je voulais dire qu'après avoir défini la sérialisation du tableau global dans OnInit() ou dans une autre fonction, cette sérialisation ne changera nulle part ailleurs. La seule exception est liée à la fonction SetIndexBuffer().
Je pense que nous sommes parvenus à un accord sur cette question et que nous pouvons la considérer comme épuisée.
Oui, la question a reçu une réponse. Merci pour cette clarification !
Quelques questions.
1.
Il est dit que "Dans l'opérateur if..., l'opérateur return est utilisé pour terminer l'exécution de la fonction OnTick".
Est-ce que OnTick? et non pas if (....) {...} ?
2.
Dans MQL4, la recherche inverse était recommandée.
Qu'est-ce qui est mieux ?3. Téléchargement de l'Expert Advisor et de l'indicateur (pour les modérateurs d'Opera 10.54, problèmes de téléchargement des fichiers attachés). Le tout compilé. Commencé dans le testeur sur M5 en sélectionnant le mois dernier.
Journal
2010.05.15 13:16:02 Core 1 Déconnecté
2010.05.15 13:16:01 Core 1 Fichier journal "D:\NMetaTrader 5\NTester\Agent-127.0.0.0.1-3000\s20100515.log" écrit
2010.05.15 13:16:01 Core 1 EURUSD,M5 : 553908 ticks (2580 barres) générés en 1431016 ms (total des barres dans l'historique 100352)
2010.05.15 13:16:01 Core 1 OnTester result 0
2010.05.15 12:52:13 Core 1 EURUSD,Daily : l'historique commence à 2009.01.02 00:00
2010.05.15 12:52:13 Core 1 EURUSD,Daily : le cache de l'historique est réservé à une estimation de 355 barres.
2010.05.15 12:52:13 Core 1 EURUSD : contient 484483 enregistrements M1 de données de début de 2009.01.02 06:01 à 2010.05.03 00:00
2010.05.15 12:52:10 Core 1 Lots=0.100000
2010.05.15 12:52:10 Core 1 MAper=240
2010.05.15 12:52:10 Core 1 EndHour=19
2010.05.15 12:52:10 Core 1 StartHour=7
2010.05.15 12:52:10 Core 1 EURUSD,M5 : le test de Experts\expert.ex5 de 2010.05.01 00:00 à 2010.05.14 00:00 a commencé avec les entrées :
Le temps d'exécution a été très long et aucune transaction n'a été ouverte. Le trading automatique est autorisé. Il n'y a pas de messages dans le journal ((( (edit probablement je ne sais pas encore comment les trouver). L'indicateur et le conseiller expert se trouvent là où ils devraient être. Windows XP, MT (build 274).
4. J'ai essayé le mode débogage, mais il ne fonctionne pas. Probablement à cause du samedi. Pas de guillemets. J'ai fait le point d'arrêt de la même manière que dans l'article. Si j'ai raison, c'est dommage, il s'avère que l'on ne peut déboguer que les jours ouvrables. Ce serait bien pour le débogage de pouvoir télécharger son propre fichier avec les données nécessaires et (ou) avec quelques données typiques (que ce soit un morceau d'histoire pour un jour), ce sera suffisant pour le débogage.
5) Si quelqu'un a fait des recherches sur la fonction Copy... merci de partager des informations sur la façon dont elle fonctionne s'il manque des barres. Bien qu'il serait probablement préférable de commander un article.
Quelques questions.
1. Il est dit que "Dans l'opérateur if..., l'opérateur return est utilisé pour terminer l'exécution de la fonction OnTick".
S'agit-il de OnTick? et non de if (....) {...} ?
D'après la description de l'opérateur de retour return :
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Результат вычисления выражения возвращается вызываемой функции. Выражение может содержать оператор присваивания.La fonction courante pour l'instruction return dans cet exemple est la fonction OnTick().
4. J'ai essayé le mode débogage, mais il ne fonctionne pas. Probablement à cause du samedi. Pas de guillemets. J'ai fait le point d'arrêt de la même manière que dans l'article. Si j'ai raison, c'est dommage, il s'avère que l'on ne peut déboguer que les jours ouvrables. Ce serait bien pour le débogage de pouvoir télécharger son propre fichier avec les données nécessaires et (ou) avec quelques données typiques (que ce soit un morceau d'histoire pour un jour), ce sera suffisant pour le débogage.
Le site a déjà abordé des questions similaires sur le débogage. Si vous êtes intéressé, utilisez la fonction de recherche et cherchez le mot "Débogage".
Après avoir chargé la mise à jour automatique (build 275), le compilateur a commencé à générer des avertissements sur les lignes où des conditions du type suivant sont vérifiées
Les avertissements sont du même type : Questions : le bon fonctionnement du compilateur implique-t-il l'apparition de ces avertissements dans la situation spécifiée ? De quelle "conversion" parle-t-on ?Après avoir chargé la mise à jour automatique (build 275), le compilateur a commencé à générer des avertissements sur les lignes où des conditions du type sont vérifiées
Les avertissements sont du même type : Questions : le travail correct du compilateur implique-t-il l'apparition de ces avertissements dans la situation spécifiée ? De quelle "conversion" parle-t-on ?L'avertissement a été introduit pour inciter les programmeurs à faire attention et à revérifier leur code.
Vous pouvez vous débarrasser des avertissements en convertissant explicitement le résultat de la fonction en un énumérateur ou un énumérateur en int.
Quelques questions.
1. Il est dit que "Dans l'opérateur if..., l'opérateur return est utilisé pour terminer l'exécution de la fonction OnTick".
S'agit-il de OnTick? et non de if (....) {...} ?
Si au moins une des conditions de l'opérateur
au moins une des conditions est remplie, c'est-à-dire qu'au moins un des tableaux n'a pas pu être copié complètement (il n'y a pas assez de données historiques ou une erreur s'est produite) - la fonction OnTick est interrompue, car les calculs ultérieurs sont impossibles sans ces données.
2. dans MQL4, l'énumération inverse était recommandée.
Qu'est-ce qui est mieux ?Variantes
и
sont équivalentes, mais la première variante est plus courte dans le texte, c'est pourquoi elle a été utilisée.
3. Téléchargement de l'Expert Advisor et de l'indicateur (pour les modérateurs, Opera 10.54 a des problèmes avec le téléchargement des fichiers attachés). Tout a été compilé. Je l'ai exécuté dans le testeur sur M5, en sélectionnant le dernier mois.
Le temps d'exécution a été très long et aucun trade n'a été ouvert. Le trading automatique est autorisé. Il n'y a pas de messages dans le journal ((( (je ne sais probablement pas encore comment les trouver). L'indicateur et le conseiller expert se trouvent là où ils devraient être. Windows XP, MT (build 274).
4. J'ai essayé le mode débogage, mais il ne fonctionne pas. Probablement à cause du samedi. Pas de guillemets. J'ai fait le point d'arrêt de la même manière que dans l'article. Si j'ai raison, c'est dommage, il s'avère que l'on ne peut déboguer que les jours ouvrables. Ce serait bien pour le débogage de pouvoir télécharger son propre fichier avec les données nécessaires et (ou) avec quelques données typiques (que ce soit un morceau d'histoire pour un jour), ce sera suffisant pour le débogage.
5) Si quelqu'un a fait des recherches sur la fonction Copy... merci de partager des informations sur la façon dont elle fonctionne s'il manque des barres. Bien qu'il serait probablement préférable de commander un article.
Pour être honnête, mon testeur ne fonctionne pas très bien non plus : les tests prennent beaucoup plus de temps que les tests d'un EA similaire dans MQL4 ; les transactions ne sont ouvertes que pendant le premier ou les deux premiers jours de l'intervalle de test (ceci est observé lorsque l'on teste différents Expert Advisors).
Les fonctions OnTick et OnCalculate sont lancées lorsqu'une nouvelle cotation est reçue, donc pour leur débogage, il est nécessaire de recevoir des cotations (cela ne fonctionnera pas le week-end). Sinon, le débogueur fonctionne normalement (essayez-le, demandez-moi si vous avez besoin de quelque chose).
En ce qui concerne les tableaux-séries temporelles : - le sens des tableaux peut être modifié à tout moment dans les deux sens, l'emplacement des tableaux en mémoire ne change pas, seul l'indexation change (de 0,1,2,...,dernier à dernier ,...,2,1,0).