Questions des débutants MQL4 MT4 MetaTrader 4 - page 102

 
STARIJ:

Le prix sur le graphique est sur l'axe vertical de bas en haut, tandis que le temps et la numérotation des barres sont sur l'axe horizontal à droite.

La barre zéro est la dernière barre actuellement disponible. Les barres suivantes existent dans l'historique, mais ne sont pas disponibles pour le testeur. Plus tard, lorsque cette barre sera calculée, le testeur passera à la barre suivante, qui deviendra zéro pour lui.


Donc, si je comprends bien, dès que le prix Open de la prochaine barre apparaît dans le testeur, il devient null[0]. Et si l'indicateur est fait de telle sorte qu'il est calculé 500 barres avant la barre [0] actuelle, cela signifie que le testeur calculera l'indicateur pendant ~ 2 ans (500 barres D1) avant la barre [0] actuelle...

Cela soulève la question suivante :

Maintenant l'indicateur est basé sur le traitement de l'événement Start() - ancienne version. Comme vous le sentez, lors des tests, à chaque appel de iCustom(), l'indicateur est calculé sur les 500 barres précédentes, 1600 tests ont été calculés pendant une heure et demie.
Nous pouvons construire l'indicateur sur le traitement des événements OnCalculate(), ce qui permet de calculer seulement les barres non calculées avant le prochain OnCalculate() - mais il est possible de le faire sur un flux de données réel dans un temps courant - comme je le comprends de la référence MQL4.
Dans le testeur, il réduira le nombre de barres calculées à chaque appel de iCustom() ?

 
MikeZv:

Si j'ai bien compris, dès que le prix de la barre ouverte suivante apparaît dans le testeur - il devient null[0]. Et si l'indicateur est fait de telle manière qu'il commence à être calculé 500 avant la barre [0] actuelle, cela signifie que le testeur calculera l'indicateur pendant ~ 2 ans (500 barres D1) avant la barre [0] actuelle...

Cela soulève la question suivante :

Maintenant l'indicateur est basé sur le traitement de l'événement Start() - ancienne version. Comme vous le sentez, lors des tests, à chaque appel de iCustom(), l'indicateur est calculé sur les 500 barres précédentes, 1600 tests ont été calculés pendant une heure et demie.
Nous pouvons construire l'indicateur sur le traitement des événements OnCalculate(), ce qui permet de calculer uniquement les barres non calculées avant le prochain OnCalculate() - mais il est possible de le faire sur un flux de données réel dans un temps courant - comme je l'ai compris dans la référence MQL4.
Dans le testeur, il réduira le nombre de barres calculées à chaque appel de iCustom() ?


L'indicateur est juste écrit de travers, donc c'est lent, j'ai besoin d'une réécriture professionnelle, alors il lira toute l'histoire et très rapidement... c'est tout...

 
Nikolay Ivanov:


L'indicateur est juste écrit de travers, donc c'est lent, vous avez besoin d'une réécriture professionnelle, alors il lira toute l'histoire et très rapidement... c'est tout...


Déjà réécrit ... :)

 

J'ai écrit un nouvel indicateur [onCalculate()] basé sur l'ancien [on Start()], la question ci-dessus a été posée.
J'exécute un script qui les compare les unes aux autres sur 5 ans (période D1) - une à une, toutes les valeurs coïncident.
J'ai copié le même ICustom() dans Expert Advisor et je l'ai sorti dans un fichier lors dutest de l'Expert Advisor.
Les anciennes valeurs des indicateurs sont affichées comme dans le script, les nouvelles valeurs des indicateurs sont toutes différentes ! !!
Pourquoi iCustom() dans un Expert Advisor pour un indicateur sur Start() sort les mêmes valeurs que dans le script,
mais pour un indicateur sur OnCalculate() la sortie dans l'Expert Advisor est différente de la sortie dans le script ?


 

Bonjour à tous.

Les gars, pouvez-vous me dire qui a rencontré ce problème ?

Certains courtiers binaires, par exemple Grand Capital, accumulent des revenus et débitent le compte non pas par le biais d'un profit sur une transaction, mais en tant que revenu sur/du solde(s) du compte.


J'ai plusieurs options de travail alternatives sur la façon de découvrir le résultat d'une transaction, mais la plus correcte reste de lire la valeur de la ligne du bilan et le montant des gains/pertes.

La question est donc la suivante : comment faire cela "sur le moment" mais sur l'ensemble de l'historique des transactions ? En d'autres termes, je suis intéressé par une fonction (incluse dans MQL4) qui chercherait dans tous les enregistrements de type balance et lirait le commentaire et la valeur elle-même. C'est la première fois que je suis confronté à une telle tâche en plusieurs années de programmation.

 
MikeZv:

J'ai écrit un nouvel indicateur [sur OnCalculate()] basé sur l'ancien [sur Start()], ce problème a été soulevé ci-dessus.
J'exécute le script qui les compare les uns aux autres pendant 5 ans (période D1) - un à un, toutes les valeurs coïncident.
J'ai copié le même ICustom() dans Expert Advisor et je l'ai affiché dans un fichier lorsque jeteste l'Expert Advisor.
Les anciennes valeurs des indicateurs sont affichées comme dans le script, les nouvelles valeurs des indicateurs sont toutes différentes ! !!
Pourquoi iCustom() dans un Expert Advisor pour l'indicateur sur Start() sort les mêmes valeurs que dans le script ?
et pour l'indicateur sur OnCalculate() la sortie dans l'Expert Advisor est différente de la sortie dans le script ?


Cela peut prendre beaucoup de temps pour deviner.

Je vérifierais le code pour voir s'il y a une mauvaise conversion des types de données, un doublement des noms de variables (c'est-à-dire que dans l'ancien code, on utilise des noms qui sont maintenant réservés) - en conséquence, la variable n'obtient pas les valeurs qu'elle devrait obtenir (tout d'abord, vérifiez les noms de variables utilisés dans OnCalculate - open, high, low, close, etc. - Vous pouvez les rencontrer assez souvent dans les anciens codes).
Quant à iCustom, il s'agit de la variante la plus simple, et les erreurs qui s'y produisent sont très probablement liées à des paramètres mal transmis (encore une fois, pour les raisons mentionnées ci-dessus).

Imprimez toutes les valeurs, ou exécutez en mode débogage et vérifiez où il y a une divergence.
 
Artyom Kuraev:

Cela peut prendre beaucoup de temps pour deviner.

Je vérifierais le code pour voir s'il n'y a pas de conversion incorrecte du type de données, de noms de variables dupliqués (c'est-à-dire que l'ancien code utilise des noms qui sont maintenant réservés) - en conséquence, la variable prend des valeurs erronées qu'elle devrait obtenir (tout d'abord, vérifiez les noms de variables utilisés dans OnCalculate - open, high, low, close, etc. - Vous pouvez les rencontrer assez souvent dans un ancien code).
Quant à iCustom, il s'agit de la variante la plus simple, et les erreurs qui s'y produisent sont très probablement liées à des paramètres mal transmis (encore une fois, pour les raisons mentionnées ci-dessus).

Imprimez toutes les valeurs, ou exécutez en mode débogage et vérifiez où va la divergence.
La sortie des deux indicateurs dans le script est la même.

Expert a des lignes COOPERÉES avec iCustom() du script. Les mêmes paramètres sont passés.

 
MikeZv:

L'Expert COPIE les lignes avec iCustom() du script. Les mêmes paramètres sont passés.

Le fait qu'ils soient copiés peut provoquer des erreurs. J'ai seulement suggéré des causes possibles et ce que je vérifierais en premier.

Le deuxième point, et c'est probablement la réponse la plus évidente, est que l'indicateur lui-même est surévalué et donnera une valeur lorsqu'il est appliqué à l'historique et une autre lorsqu'il fonctionne en mode testeur de stratégie. J'en ai parlé une fois, vous pouvez le voir sur deux photos.

Je n'insiste sur rien du tout, et ma réponse sera basée sur mon expérience. Si vous êtes sûr qu'aucune des options que j'ai suggérées ne vous convient, attendez d'autres réponses ou donnez plus d'informations sur le contexte :)

 
Artyom Kuraev:

Bonjour à tous.

Les gars, pouvez-vous me dire qui a rencontré ce problème ?

Certains courtiers binaires, par exemple Grand Capital, facturent des revenus et débitent le compte non pas par le biais d'un profit sur une transaction, mais en tant que revenu sur/du solde(s) du compte.


J'ai plusieurs options de travail alternatives sur la façon de découvrir le résultat d'une transaction, mais la plus correcte reste de lire la valeur de la ligne du bilan et le montant des gains/pertes.

La question est donc la suivante : comment faire cela "sur le moment" mais sur l'ensemble de l'historique des transactions ? En d'autres termes, je suis intéressé par une fonction (incluse dans MQL4) qui chercherait dans tous les enregistrements de type balance et lirait le commentaire et la valeur elle-même. C'est la première fois que je suis confronté à une telle tâche en plusieurs années de programmation.


#define  OP_BALANCE 6
#define  OP_CREDIT  7

Plus

OrdersHistoryTotal
StringFind(OrderComment(),txt,0)
 
Taras Slobodyanik:

plus

MERCI !

Tout s'est arrangé !
Raison: