Je suis complètement perdue - page 3

 
FMIC, il y a des CHOSES dans cette documentation qui n'ont pas vraiment de sens. Celui qui a écrit cette chose l'a clairement écrite pour un public qui n'a jamais écrit un programme en gwbasic ou pseudocode, sans parler de l'exposition à des concepts de programmation de plus haut niveau. Ou du moins, l'intention de l'auteur était que ce soit compréhensible pour ces personnes, pas nécessairement qu'il soit exclusivement destiné à ces personnes. J'ai tendance à sauter les parties concernant les instructions if/else et les boucles for et ce qu'est une variable, pour l'amour du ciel, donc non, je ne le lirai pas du début à la fin. Pourtant, lorsque je saute ces parties, dans les sections suivantes, l'auteur n'a pas réussi à se placer du point de vue d'un débutant relatif, car quelqu'un comme moi, qui a une expérience limitée de la programmation, arrive et les pièces ne s'emboîtent toujours pas, une fois arrivé à un certain point de la littérature. Voici un autre exemple. Le type de données datetime. Je me rends ici : http://msdn.microsoft.com/en-us/library/system.datetime_members%28v=VS.90%29.aspx et je constate que les variables de type datetime sont par défaut beaucoup plus compliquées que ce que dit cette documentation. Par exemple, elle contient des informations sur les MILLISECONDS. Il peut s'agir de n'importe quelle année jusqu'à AD 9999. Pourtant, cette documentation SUGGÈRE que c'est différent, mais elle n'entre pas suffisamment dans les détails. Peut-être ne s'agit-il pas de la variable datetime standard du C++ mais de quelque chose de spécifique à MQL4 ? Le nombre de secondes depuis le début de 1970, valable jusqu'à la fin de 2037. Maintenant, il se trouve qu'il y a très près de 2^31 secondes dans cet intervalle de temps. Cela suggère qu'il s'agit d'un nombre entier long signé - puisqu'un nombre entier long non signé serait en fait valable au 22ème siècle à partir de 1970. Puis-je réellement l'UTILISER dans des opérations arithmétiques COMME SI c'était un entier long signé ? Ce n'est pas précisé. C'est ambigu. Il pourrait s'agir d'une variable de type chaîne de caractères glorifiée, mais avec certaines contraintes sur ce que la chaîne peut être. Il montre également quelques façons incomplètes de l'utiliser. Mais il n'est pas assez explicite sur toutes les façons dont on peut y accéder ou la manipuler. Puis-je simplement l'utiliser dans l'arithmétique des nombres entiers avec les ints ? Si je lis l'indice de temps d'un échantillon, puis-je simplement soustraire un graphique d'une minute d'un autre graphique d'une minute et, s'il s'agit de minutes consécutives, m'attendre à ce qu'elles diffèrent de 60 (éventuellement plus ou moins 1) ?

Il y a cette autre chose avec laquelle j'avais déjà un problème - la description de la série ArrayCopySeries est ambiguë. Elle suggère dans certaines parties que array[ ] est écrit dans certaines parties, mais dans d'autres parties, elle suggère qu'il ne l'est pas. Je l'ai examinée et je ne comprends absolument pas l'objectif de la fonction si elle ne copie PAS les données de la devise dans le tableau.

Voici une autre chose que j'aimerais savoir. Il est dit qu'un EA peut avoir 3 fonctions principales. init, deinit, et start. init est exécuté une fois lors de sa première exécution, start est exécuté à chaque fois qu'il y a un nouveau tick, et il ne dit rien sur deinit. L'exemple ici https://book.mql4.com/samples/expert n'a même pas de init. Il a un start. Il a des choses compliquées pour apparemment gérer les erreurs comme Fun_Error, peu importe ce que cela fait. Pas de init. Qu'en est-il des variables ? Les variables définies dans init sont-elles toujours valides quand il est terminé et quand "start" s'exécute ? Ou doivent-elles être déclarées en dehors des deux variables ? Les variables déclarées dans start sont-elles effacées à chaque fois que start s'exécute à nouveau ? Les variables déclarées en dehors de start sont-elles effacées ? J'espère que non ! Je ne suis même pas sûr d'avoir le droit d'ALTER les variables qui sont déclarées en dehors de toute fonction. Il semble qu'elles soient toutes des variables statiques globales d'après ce que j'ai vu.

Au fait, les symboles monétaires utilisés dans des fonctions comme iTime sont-ils censés être entre guillemets simples ou doubles ? "USDCHF" ou "USDCHF". Un millier de petites choses comme ça. Je suis sûr que n'importe laquelle d'entre elles fera que le programme ne sera pas compilé lorsque j'arriverai à la fin. Et avec un millier de petites choses différentes qui ne vont pas, il sera difficile de le déboguer.

RaptorUK oh bien sûr vous n'avez aucune obligation de m'aider. Et si votre idée d'un bon moment est de troller les gens sur les forums, de vous moquer d'eux parce qu'ils sont sur un forum pour demander de l'aide alors que le but d'aller sur un forum en premier lieu est de troller les gens, alors je vois que vous vous amusez et que vous remplissez ce que vous croyez être le rôle correct d'un utilisateur de forum. Quant à moi, si j'étais QUALIFIÉ pour aider quelqu'un, en répondant à une question à laquelle je peux répondre, je pourrais hypothétiquement être prêt à le faire. Je m'y connais en mathématiques, mais pas en programmation. Par exemple, si vous avez une douzaine d'indicateurs qui ne sont pas statistiquement indépendants, je sais comment les combiner de manière optimale en un indicateur composite, de façon à compenser le fait qu'ils sont statistiquement dépendants. Bien sûr, je ne vais certainement pas VOUS aider pour quoi que ce soit maintenant. Si je vous voyais le pied coincé dans une voie ferrée, je vous dirais : "Je pourrais vous aider, mais qu'est-ce que j'y gagne ?".

 
zortharg:
FMIC il y a des CHOSES dans cette documentation qui n'ont pas tout à fait de sens. ...

Je n'ai eu aucune difficulté à lire tout le livre du début à la fin, bien que je sois bien versé dans les langages de haut niveau et de bas niveau.

J'ai 45 ans et je suis développeur de logiciels depuis 1986. Je suis également titulaire d'un B.Sc. en ingénierie (électronique à courant faible). Je suis compétent en C, C++, C#, Pascal, Cobol, Fortran, Perl et beaucoup d'autres qui ont disparu depuis longtemps. Je suis également bien versé dans la programmation en Assembleur pour x86, Z-80, Pics et beaucoup d'autres architectures. Je le répète, je n'ai eu aucune difficulté à lire et à apprendre MQL4.

Donc, tout ce que je peux conclure, c'est que votre attitude hautaine consistant à critiquer la documentation, au lieu de vous concentrer sur l'objectif réel de l'apprentissage de MQL, ne peut signifier qu'une chose - Vous êtes en fait plus stupide que les non-programmeurs pour lesquels la documentation a été écrite.

Si vous pensez que MetaTrader et MQL sont si indignes de vous, alors pourquoi êtes-vous ici ? Je suis sérieux ! Pourquoi ?

Il y a beaucoup d'autres applications de trading et de systèmes algorithmiques. Choisissez-en un et allez les troubler !

Au fait, "RaptorUK" est un MODERATEUR sur le forum. Vous êtes le TROLL ici !

C'est mon dernier message sur ce fil ! Vous ne valez pas la peine de faire des efforts.

 
zortharg:

RaptorUK oh bien sûr vous n'avez aucune obligation de m'aider. Et si ton idée d'un bon moment est de troller les gens sur les forums, de te moquer d'eux parce qu'ils sont sur un forum pour demander de l'aide, alors que le but premier d'aller sur un forum est de troller les gens, alors je vois que tu t'amuses et que tu remplis ce que tu crois être le rôle correct d'un utilisateur de forum. Quant à moi, si j'étais QUALIFIÉ pour aider quelqu'un, en répondant à une question à laquelle je peux répondre, je pourrais hypothétiquement être prêt à le faire. Je m'y connais en mathématiques, mais pas en programmation. Par exemple, si vous avez une douzaine d'indicateurs qui ne sont pas statistiquement indépendants, je sais comment les combiner de manière optimale en un indicateur composite, de façon à compenser le fait qu'ils sont statistiquement dépendants. Bien sûr, je ne vais certainement pas VOUS aider pour quoi que ce soit maintenant. Si je vous voyais le pied coincé dans une voie ferrée, je vous dirais : "Je pourrais vous aider, mais qu'est-ce que j'y gagne ?".

Peut-être devriez-vous expliquer votre commentaire ?

L'audace des gens sur ce forum !


Beaucoup de personnes sur ce forum donnent de leur temps libre pour essayer d'aider... ... et vous venez vous attendre à être aidé comme si c'était un droit ! Je pense que tout le monde serait heureux de vous aider jusqu'à ce que vous démontriez votre attitude... vous devriez faire preuve d'un peu d'humilité lorsque vous demandez de l'aide.

Vous pouvez m'étiqueter comme vous le souhaitez, je n'en ai vraiment rien à faire, je sais pourquoi je suis ici et certaines personnes me remercient même d'essayer d'aider . . . Je suppose que cela vous dépasse.

 
zortharg:

Je dois donc télécharger les prix historiques une par une avec iclose ? https://docs.mql4.com/series/iClose Le problème, tel que je le vois, est que les données peuvent être mises à jour pendant que je suis en train de les télécharger. Ce serait très bien de pouvoir télécharger l'ensemble des données en un seul bloc. Je suppose que je peux télécharger l'heure avec iTime, puis utiliser iclose, puis utiliser iTime à nouveau sur le même index et si elle a changé, alors un nouvel intervalle de temps de barre a commencé et je dois revenir en arrière d'un numéro d'index. Mon raisonnement est-il correct ou y a-t-il quelque chose que je ne comprends pas ?


Pourquoi une fonction appelée ArrayCopySeries() nécessite-t-elle que vous copiiez vous-même la série ?

Vous déclarez le tableau mais n'avez pas besoin d'en spécifier la taille.

Lorsque vous accédez au tableau, mql fait de la "magie" et (avec un peu de chance) la bonne valeur apparaît au bon endroit.

Il y a un exemple sur la page.

Cela dit, la documentation en ligne n'est pas synchronisée pour le moment, alors utilisez l'aide du métaéditeur comme référence principale.

Regardez l'exemple jusqu'à ce que vous compreniez !

 
zortharg:
Le type de données datetime. Je vais ici : http://msdn.microsoft.com/en-us/library/system.datetime_members%28v=VS.90%29.aspx et je vois que les variables de type datetime sont par défaut beaucoup plus compliquées que ce que dit cette documentation. Par exemple, elle contient des informations sur les MILLISECONDS. Il peut s'agir de n'importe quelle année jusqu'à AD 9999. Pourtant, cette documentation SUGGÈRE que c'est différent, mais elle n'entre pas suffisamment dans les détails. Peut-être ne s'agit-il pas de la variable datetime standard du C++ mais de quelque chose de spécifique à MQL4 ? Le nombre de secondes depuis le début de 1970, valable jusqu'à la fin de 2037. Maintenant, il se trouve qu'il y a très près de 2^31 secondes dans cet intervalle de temps. Cela suggère qu'il s'agit d'un nombre entier long signé - puisqu'un nombre entier long non signé serait en fait valable au 22ème siècle à partir de 1970. Puis-je réellement l'UTILISER dans des opérations arithmétiques COMME SI c'était un entier long signé ? Ce n'est pas précisé. C'est ambigu. Il pourrait s'agir d'une variable de type chaîne de caractères glorifiée, mais avec certaines contraintes sur ce que la chaîne peut être. Il montre également quelques façons incomplètes de l'utiliser. Mais il n'est pas assez explicite sur toutes les façons dont on peut y accéder ou la manipuler. Puis-je simplement l'utiliser dans l'arithmétique des nombres entiers avec les ints ? Si je lis l'indice de temps d'un échantillon, puis-je simplement soustraire un graphique d'une minute d'un autre graphique d'une minute et, s'il s'agit de minutes consécutives, m'attendre à ce qu'elles diffèrent de 60 (éventuellement plus ou moins 1) ?

Pourquoi tant de mots pour demander une chose simple :)

Old MQL : https://docs.mql4.com/dateandtime Un groupe de fonctions permettant de travailler avec des données de type datetime(entier représentant le nombre de secondes écoulées depuis minuit, le 1er janvier 1970).

Nouveau MQL : https://www.mql5.com/en/docs/basis/types/integer/datetime - Le typedatetime est destiné à stocker la date et l'heure sous la forme du nombre de secondes écoulées depuis le 01 janvier 1970. Ce type occupe 8 octets de mémoire.

La plupart des langages qui utilisaient l'ancien entier 32 bits pour stocker le temps, sont passés à 64 bits, pour éviter de se ruiner lorsque l'année 2038 arrivera.

Il suffit d'ajouter et de soustraire comme vous le pensez. Mais gardez le type de données datetime , et évitez la tentation de le stocker dans une variable longue .

 

MERCI ydrol !

Hmmmmm. Je ne sais pas si static_cast existe dans mql4, mais est-ce que je peux utiliser n'importe quelle opération arithmétique normale sur les dates, tant que je sauvegarde le résultat dans une autre date ? Par exemple, si X[] est un tableau de dates, et que je veux travailler avec le nombre de minutes, je pourrais prendre Y=(X[17]+30)/60 tant que Y est une date et non un long ? N'est-ce pas ? Ou plutôt, je pourrais prendre Y=(X[17]-X[16]+30)/60 parce que ce serait mauvais si X[17] était 29 mod 60 et X[16] était 30 mod 60, il penserait qu'il y a 2 minutes d'intervalle si je le faisais de la première façon.

Oh mec, le code que j'ai fait jusqu'à présent est déjà si long, et tout ce qui est fait est de lire dans les données et maintenant je dois compenser les données sautant des minutes (ou le week-end entier !) en décalant les données autour plus et interpolation, je me demande quelles sont les chances que cette dinde va fonctionner quand je suis fait avec elle, ha ha. Tout cela à partir d'un programme matlab qui montre que j'ai enfin une méthode de trading qui peut battre le spread/commission, mais le mettre en pratique est autre chose.

A tous ceux qui ne sont pas Ydrol, ok, je vous déclare vainqueurs de vos concours de p*** respectifs, donc félicitations et puisque vous avez gagné, vous pouvez arrêter de poster sur ce fil maintenant.

 

Hmmmmm. I don't know if static_cast even exists in mql4, but can I just use any regular arithmetic operations on datetimes then, so long as I save the result in another datetime?

Si le résultat de votre arithmétique est toujours un point dans le temps (c'est-à-dire toujours une valeur qui est le nombre de secondes depuis 1970), alors gardez-le en tant que datetime, sinon vous pouvez le convertir en un long ou un int. (Vous n'êtes pas obligé de le faire, mais cela évitera toute confusion ultérieure).

Cela ne sert à rien de se mettre tout le monde à dos, il suffit de changer d'approche pour obtenir l'aide que vous voulez :)

 

Eh bien, après avoir écrit un peu de code, il me semble en effet très difficile d'éviter de sauvegarder des résultats arithmétiques avec des dates comme entrées dans des ints. Mais static_cast<long> devrait théoriquement fonctionner comme en C++ ? Je n'en vois aucune mention dans la documentation.

Oh, au fait, le fuseau horaire. C'est UTC ? Ce livre n'arrête pas de dire le nombre de secondes depuis le 1er janvier 1970 à 0:00. Je pourrais supposer qu'il s'agit de l'heure UTC comme l'heure UNIX, sauf que nous avons déjà établi qu'il y a au moins quelques différences entre les variables "datetime" ici et ce que le C++ utilise (pas de millisecondes par exemple) - qui, il est vrai, n'est pas l'heure UNIX, mais est appelée "datetime" néanmoins - donc juste parce que ça ressemble superficiellement à l'heure UNIX parce que ça commence au début de 1970, je ne devrais pas supposer que c'est ce que c'est. S'agit-il nécessairement de l'UTC ou est-il possible que chaque courtier ait son propre décalage en fonction de son propre fuseau horaire et que je doive l'avoir dans le code pour qu'il puisse déterminer où se trouve le début de la semaine, modulo 10080 minutes, sur la base des données ? Le but étant de connaître le moment modulo 10080 où le trading commence et se termine, étant donné que le marché n'est ouvert que 7200 minutes sur ces 10080 minutes, afin de pouvoir liquider les positions à l'approche du week-end, et ne pas commencer à plein régime dès le début ou, ce qui est bien pire, prendre des décisions de trading radicales basées sur les discontinuités des prix entre la fin d'une semaine et le début de la suivante, ou même de ne pas tenir compte des interruptions lors de la détermination d'informations telles que la volatilité - que je définis comme la variation quadratique moyenne du prix après 1 minute - puis j'ajoute 1/4 fois la variation quadratique moyenne du prix après 2 minutes, 1/9 fois la variation quadratique moyenne du prix après 3 minutes et 1/16 fois la variation quadratique moyenne du prix après 4 minutes, puis je multiplie le tout par 1/(1+1/2+1/3+1/4)=0.48.

Hé, qu'est-ce que je peux dire, je suis venu demander de l'aide et ils ont été méchants et antagonistes avec moi dès le début. Si quelqu'un demande de l'aide, soit je ne la lui donne pas, soit je la lui donne. Si je ne connais pas la réponse à une question posée par quelqu'un, je ne fais pas la conversation au lieu d'y répondre, et si je ne veux pas prendre le temps de répondre correctement à la question, je ne prends pas le temps de me moquer de la personne qui la pose ou de lui donner une non-réponse inutile. Il y a une marge de manœuvre pour la dernière question si la personne pose une question dont elle devrait connaître la réponse si elle vit sur la planète Terre depuis plus d'un jour, ou si la question est rhétorique et surtout si elle est conçue pour être insultante pour un certain groupe de personnes. Je suis du genre à aller droit au but et je fonctionne selon un code d'éthique de type "tit-for-tat". Je suis poli avec les gens jusqu'à ce qu'ils soient méchants avec moi, puis j'arrête d'être poli, et je suis également honnête avec les gens jusqu'à ce qu'ils me mentent, me trompent et me volent, puis mon code de comportement civil par défaut disparaît et je vais mentir, tromper et voler en échange, sans pitié ni retenue. C'est peut-être une façon simpliste de voir le monde, mais je suis têtu et impitoyable.

Mais à vous, merci pour votre aide. Et si je peux vous aider en quoi que ce soit, n'hésitez pas à me le demander. Non pas que je suppose que vous cherchez de l'aide pour quoi que ce soit que je puisse faire.

 
zortharg:

Eh bien, après avoir écrit un peu de code, il me semble en effet très difficile d'éviter de sauvegarder des résultats arithmétiques avec des dates comme entrées dans des ints. Mais static_cast<long> devrait théoriquement fonctionner comme en C++ ? Je n'en vois aucune mention dans la documentation.

Au fait, le fuseau horaire. Est-ce que c'est UTC ?


C'est indépendant du fuseau horaire. ... combien de secondes y a-t-il entre 14h et 15h ? Vous n'avez pas besoin de connaître le fuseau horaire pour répondre 3600 ... si cela peut vous aider, supposez simplement que l'heure de départ, minuit le 1er janvier 1970, et l'heure qui vous intéresse se trouvent toutes deux dans le même fuseau horaire.
 

EDIT : Oups, comme cela a été souligné, il n'y a pas de fuseau horaire spécifique pour datetime. Cela dépend d'où vous l'avez obtenu ! (cela cause une complication inutile, contrairement à UnixTime sur lequel il était finalement basé !)

Le fuseau horaire pour datetime (secondes après 1970) est basé sur UTC. Tout comme le temps Unix. C'est UnixTime - le temps Unix 64 bits.

Unile true UTC, UnixTime ignorent les secondes intercalaires (voir 1er paragraphe) et ainsi l'arithmétique modulo fonctionne pour les minutes, et les heures.

datetime - datetime = long (durée en secondes) - bien qu'en ce qui concerne le trading, ce sera un int la plupart du temps que je peux envisager !

datetime +/- secondes(long) = datetime(autre date)

datetime +/- seconds(int) = datetime(another date)

Raison: