Testeur soutenant les scripts et les conseillers MG4 - page 3

 
AlexeyVik:
Eh bien, je ne vais pas prouver que c'est vrai. Pour une personne qui n'est pas familière avec la programmation C++ et la POO en général, c'est plutôt compliqué et pas du tout pour le plaisir des mots ou la création d'un mythe. Aussi étrange que cela puisse paraître, j'ai tout compris en une semaine et j'ai écrit ce dont j'avais besoin. Il s'agit d'un mythe complètement différent ; cela montre que l'apprentissage de mql5 est accessible même aux non-professionnels, comme moi.
Dans n'importe quelle POO, vous pouvez programmer de manière algorithmique, et utiliser la POO elle-même uniquement comme un emballage. Lorsque j'ai commencé à coder en Java, je n'ai pas non plus compris la POO au début, mais je n'ai pas rencontré de problèmes particuliers. Les problèmes surviennent plus tard, car il est très difficile de lire les matières premières dans les langages algorithmiques. Il est beaucoup plus difficile d'utiliser les bibliothèques dans les langages algorithmiques, car il faut les boulonner avant de les utiliser.
 
Reshetov:
Vous pouvez programmer de manière algorithmique dans n'importe quelle POO, mais n'utilisez la POO que comme enveloppe. Lorsque j'ai commencé à coder en Java, je n'ai pas non plus compris la POO au début, mais je n'y voyais aucun problème. Les problèmes surviennent plus tard, car il est très difficile de lire les matières premières dans les langages algorithmiques. L'utilisation des bibliothèques en algorithmique est beaucoup plus difficile, car il faut les visser avant de les utiliser.
Yuri, pourquoi tu m'expliques à quel point c'est facile ? Pour une personne, c'est simple, pour une autre personne, c'est très simple, et pour quelqu'un, c'est inaccessible. Je n'ai pas dit qu'il était impossible d'apprendre... Je parlais seulement des différences entre les langues... le familier et le nouveau.
 
Renat:
Pas du tout différent. Ce sont deux langages identiques avec un seul compilateur.
Dans cette optique, le C++ n'est pas différent du JavaScript. Et c'est vrai !
 
Integer:
Dans cette optique, le C++ n'est pas non plus différent du JavaScript. Et c'est vrai !

Vous ne pouvez rien voir d'autre sur notre forum.

Mais il n'y a pas de responsabilité. Tu peux débiter tout ce que tu veux.

 
AlexeyVik:
Yuri, pourquoi tu m'expliques à quel point c'est facile ? Certaines personnes le trouvent simple, d'autres très simple, et d'autres encore le trouvent inaccessible.
Il est difficile de comprendre s'il n'y a pas de documentation, pas d'exemples, pas d'articles. Mais quand on a tout, et qu'on peut poser des questions dans un cas problématique sur le forum, c'est une excuse pourrie pour parler d'inaccessibilité.
 
Reshetov:
Il est difficile de comprendre s'il n'y a pas de documentation, pas d'exemples, pas d'articles. Mais lorsque tout est là, et que vous pouvez poser des questions dans un cas problématique sur un forum, c'est une excuse pourrie pour parler d'inaccessibilité.

Va-t'en. Personnellement, je peux maîtriser cette langue sans aucun problème ni question. Mais pour quelqu'un qui est inaccessible en raison de son caractère, vous pouvez lui écrire n'importe quoi.

Je n'arrive toujours pas à comprendre pourquoi vous avez entamé un dialogue et exprimé une opinion sur un sujet complètement différent.

 
Renat:

Ce que vous ne voyez pas sur ce forum.

Pourquoi, il n'y a aucune responsabilité. Vous pouvez dire n'importe quoi.

Oui, c'est ça. Surtout en utilisant l'autorité de sa position supérieure.

Toutes les langues sont les mêmes, sauf les langues extravagantes. Tous ces éléments peuvent être appris en 21 jours par n'importe quel crétin. Tous les for, while, if, switch peuvent avoir une notation différente, mais cela ne fait pas de différence en principe. Ce n'est pas la façon dont les opérateurs sont écrits qui est importante, mais l'infrastructure avec laquelle le langage interagit. À cet égard, MT4 et MT5 sont deux mondes différents.

La différence en tout. En commençant par le petit - avec la numérotation des barres dans l'indicateur, dans MT4 de droite à gauche, dans MT5 de gauche à droite. Nous poursuivons avec le plus important - la position agrégée et l'organisation des données sur l'historique des échanges. La plus grande différence réside dans ce qui est souvent requis - dans la manière d'accéder aux données des cotations et des indicateurs, la copie des données nécessite une vérification, puis une indexation de gauche à droite, puis de droite à gauche, le moment de la barre est soit inclus dans la plage, soit non. Prenez seul la discussion de la fonction iBarShift() dans CodeBase.

Dans MT4, pour assurer le fonctionnement stable de l'EA il suffisait de vérifier la valeur de retour de OrderSelect(), mais dans MT5 il est nécessaire de faire des vérifications à chaque étape, même aux données du dernier tick. Il existe également certaines subtilités de la programmation MT5, que vous n'apprendrez qu'après avoir beaucoup souffert, car les pièges sont nombreux.

 

Je soutiens de tout cœur votre opinion !

L'extension des fonctionnalités est bien sûr une bonne chose, mais sous le capot de MT5, nous aurions dû laisser les fonctions de MT4 pour des raisons de compatibilité. Bien entendu, seuls ceux qui entrent dans le cadre du modèle de trading MT5.

Pour que les sources de MT4 soient portées avec un minimum de changements.

Bien que j'utilise MT5 comme testeur multi-devises, les appels de fonctions déraisonnablement complexes me rebutent.

Les mêmes fonctions pour le passage à MT5(https://www.mql5.com/ru/articles/81), pourquoi ne pas les implémenter dans le noyau lui-même ?

Pourquoi faut-il renommer les fonctions pour convertir les types, par exemple

CharToStr - CharToString,  StrToDouble - StringToDouble

Ça semble être élémentaire, mais... Des réformes pour le plaisir des réformes ?

Ou des fonctions permettant de travailler avec le temps, par exemple

int Hour()
int HourMQL4()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.hour);
  }

Fonction de récupération des données d'un graphique

double iClose(string symbol,
              int timeframe,
              int shift)
double iCloseMQL4(string symbol,int tf,int index)
{
   if(index < 0) return(-1);
   double Arr[];
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(CopyClose(symbol,timeframe, index, 1, Arr)>0) 
        return(Arr[0]);
   else return(-1);
}

Il existe des centaines d'exemples de ce type !

Bien sûr, MT5 est plus fonctionnel, mais MT4 est plus pratique ! Et c'est parfois bien plus important !

 
Integer:

Exactement. Notamment en profitant de l'autorité de sa position supérieure.

L'affirmation "le C++ n'est pas non plus différent du JavaScript de cette manière" est une absurdité dans la veine de la discussion sur la différence entre MQL4 et MQL5. Et quelqu'un a lâché le morceau.

La crédibilité se gagne par un travail long et difficile. J'ai rempli ce volume et je suis ce que je dis.


Il y a une différence dans tout. En commençant par un point mineur - la numérotation des barres dans l'indicateur, dans MT4 de droite à gauche, dans MT5 de gauche à droite. Nous poursuivons avec le plus important - la position agrégée et l'organisation des données sur l'historique des échanges. La plus grande différence réside dans ce qui est souvent requis - dans la manière d'accéder aux données des cotations et des indicateurs, la copie des données nécessite une vérification, puis une indexation de gauche à droite, puis de droite à gauche, le moment de la barre est soit inclus dans la plage, soit non. Prenez seul la discussion de la fonction iBarShift() dans CodeBase.

Quelle étrange situation nous avons. N'importe quelle langue peut être apprise par un mannequin en 21 jours, mais la numérotation des barres et l'accès aux données deviennent un problème.

Là encore, les langages sont presque identiques, ils ne diffèrent que par un petit nombre de fonctions et ont un compilateur commun. MQL4 a une approche dépassée de la gestion des données qui est inacceptable pour les systèmes ayant un historique profond et détaillé. Utilisez les nouvelles fonctions CopyXXX dans MQL4 et ce sera comme dans MQL5.


Dans MQL4 pour assurer la stabilité de l'EA il suffisait de vérifier la valeur de retour de OrderSelect(), et dans MQL5 la vérification est nécessaire à chaque étape, même à la réception des données du dernier tick. Il existe également certaines subtilités de la programmation de MT5, que vous ne devrez apprendre qu'après avoir eu beaucoup d'accrocs, car les pièges sont nombreux.

Dans MQL4 et MQL5, vous devez vérifier les résultats des fonctions partout.

Dans MQL4, de nombreux traders ignoraient simplement la vérification et prenaient les données telles quelles. Dans MQL5, ils écrivent la même chose, et ensuite leurs programmes forex se plantent lorsqu'ils sont lancés sur des CFD, des futures ou des actions, simplement parce que les auteurs étaient trop paresseux pour vérifier les paramètres des instruments ou la disponibilité des données.

 
Nemser:

Même si j'utilise MT5, en tant que testeur multi-devises, mais les appels de fonction inutilement compliqués sont répugnants.

Réfléchissez à ce que les nouvelles fonctions d'accès aux données fournissent et pourquoi elles sont faites de cette manière.

MetaTrader 4 dispose d'une profondeur d'historique limitée, d'horizons temporels distincts et d'un accès direct à ses barres de symboles via Open/High/Low/Close/Time[xxx]. Un tel accès direct est très coûteux à mettre en œuvre en termes de ressources et de coût de l'unité centrale. Considérez que chaque conseiller expert a sa propre copie locale de ces données pour éviter les conflits avec les autres conseillers experts et le terminal lui-même.

Avec le nombre croissant de symboles (par exemple, dans MT5, vous pouvez avoir 5 000 à 10 000 symboles) et l'utilisation de l'historique profond d'une minute comme base de toutes les périodes, il est pratiquement impossible d'utiliser les méthodes de MT4. Il n'y a pas assez de RAM, et la copie de gros morceaux nuit aux performances. C'est pourquoi MT5 ne maintient plus automatiquement une copie cachée et coûteuse du graphique pour chaque expert.

Au lieu de cela, nous sommes passés à des fonctions CopyXXX très économiques où le développeur demande exactement au tableau local la quantité de données dont il a besoin, et non la totalité du graphique disponible. Vient ensuite la gestion des données locales la plus rapide possible (au lieu de l'ancienne méthode plutôt coûteuse Open/High/Low/Close/Time[xxx]), et l'auteur peut mettre ces données en cache et les utiliser avec parcimonie lors du prochain appel. Les économies de mémoire et de CPU sont énormes. En outre, la plate-forme elle-même est particulièrement libre de gérer de vastes bases de données - l'accès à celles-ci se fait toujours à la demande (plutôt que par un accès direct non supervisé), ce qui permet une gestion souple des caches.

Il convient également de noter que la simplicité des appels Open/High/Low/Close/Time[xxx] dans MQL4 était limitée au symbole et à la période en cours, et que toutes les autres données pour les autres symboles et périodes étaient obtenues à l'aide des fonctions iClose/iLow(...), ce qui entraînait de sérieux retards. La transition dans MQL5 vers un modèle de fonction unique CopyXXX a radicalement amélioré la situation, permettant aux développeurs d'obtenir les morceaux de données requis en une seule requête, et de ne pas faire de multiples appels bloqués (pensez aux verrous dans chaque appel unique à iClose).


Les mêmes fonctions pour le passage à MT5(https://www.mql5.com/ru/articles/81), alors pourquoi ne pas les implémenter dans le noyau lui-même ?

Ce ne sont pas nos fonctions et cet article non plus. Cet article est un ensemble de béquilles monstrueuses, mais libérées pour montrer la différence.

J'ai expliqué à plusieurs reprises la nécessité d'utiliser les nouvelles fonctionnalités de MQL5, et non les horribles béquilles.


Pourquoi doivent-ils renommer les fonctions de conversion de type, par exemple

ça semble élémentaire, mais... des réformes pour le plaisir des réformes ?

C'est la bonne approche pour construire une architecture linguistique de qualité. Les noms des fonctions doivent être compréhensibles et ne pas être un ensemble d'abréviations.

Le nouveau langage et les fonctions pratiques d'autocomplétion nous ont permis de réviser le langage et de le rendre plus propre.


Ou, par exemple, les fonctions temporelles Obtenir des données à partir d'un graphique Et il y a des centaines d'exemples de ce genre !

Il s'agit d'exemples de béquilles (on dit généralement "faire une amygdalectomie avec des trous glandulaires") qui ne doivent pas servir de comparaison.

Le matériel théorique est devenu obsolète depuis que MQL4 a été directement réduit à MQL5 et maintenant MQL4 a beaucoup de fonctions compatibles.


Bien sûr, MT5 est plus fonctionnel, mais MT4 est plus pratique ! Et c'est parfois bien plus important !

Je ne suis pas d'accord.

MetaTrader 5 est beaucoup plus convivial, tant au niveau du logiciel que de la langue.

Raison: