Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1190

 
MakarFX:

Fermeture du serveur de démonstration MetaQuotes

MetaQuotes Software Corp.

4 mars 2009

Le 5 avril 2009, le serveur "demo.metaquotes.net" sera fermé. Cependant, le centre d'histoire avec l'histoire minute continuera son travail.

Depuis ce jour, notre entreprise refuse d'utiliser le serveur de démonstration. Aujourd'hui, le nombre de sociétés utilisant la plateforme MetaTrader 4 est si élevé que nous ne voyons pas la nécessité de maintenir notre propre serveur.

C'est une sorte d'antiquité (un autre serveur est mentionné). Cela a été fait plusieurs fois cette année, la dernière fois il y a un mois sur MetaQuotes-Demo un nouveau compte de démonstration a été créé normalement.

De plus, si le serveur est supprimé, pourquoi est-il affiché et envoyé dans l'assistant d'ouverture de compte ? Le blocage ne se produit que lors de la dernière étape.

 
Artyom Trishkin:

La première fois que l'indicateur accède aux données historiques, s'il n'y a pas assez de données locales, les données sont chargées et la fonction renvoie une erreur.

Je le comprends parfaitement. S'il s'agissait d'un nombre insuffisant de barres dans l'historique, les deux fonctions renverraient 0. Cependant, l'une d'entre elles renvoie 0, tandis que l'autre renvoie correctement le nombre de barres dans l'historique. De plus, ils sont appelés l'un après l'autre :

Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); // Этот же вызов iBars() работает нормально
  }

Dans le premier cas, les données proviennent des prémembres prêts (symbol et timeframe) de la classe Loader (correctement initialisés), mais dans le second cas, des fonctions Symbol() et Period() (qui renvoient exactement les mêmes valeurs que celles écrites dans symbol et timeframe). Les valeurs des variables sont identiques à celles des fonctions (j'ai vérifié). Mais il n'est pas clair où iBars(symbol, timeframe) s'embrouille avec un symbole et un timeframe absolument corrects. Alors que iBars(Symbol(), Period()) ne fait pas d'erreur. J'ai donc décidé que ce devait être une erreur dans le terminal lui-même ou une compilation incorrecte du code source.

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Если указаны параметры start_time и stop_time, то функция возвращает количество баров в диапазоне дат. Если эти параметры не указаны, то функция возвращает общее количество баров. Если данные для таймсерии с указанными параметрами при вызове функции Bars() еще не сформированы в терминале, или данные таймсерии в момент вызова функции не...
 
Mihail Matkovskij:

Je le comprends très bien. S'il s'agissait du manque de barres dans l'historique, les deux fonctions renverraient 0. Mais en l'état, une fonction renvoie 0, tandis que l'autre renvoie correctement le nombre de barres dans l'historique. De plus, ils sont appelés l'un après l'autre :

Dans le premier cas, les données proviennent des prémembres prêts (symbol et timeframe) de la classe Loader (correctement initialisés), mais dans le second cas, des fonctions Symbol() et Period() (qui renvoient exactement les mêmes valeurs que celles écrites dans symbol et timeframe). Les valeurs des variables sont identiques à celles des fonctions (j'ai vérifié). Mais il n'est pas clair où iBars(symbol, timeframe) s'embrouille avec un symbole et un timeframe absolument corrects. Alors que iBars(Symbol(), Period()) ne fait pas d'erreur. J'ai donc décidé qu'il y avait une erreur quelque part dans le fonctionnement du terminal.

Maintenant, écris-le comme ça, comme Igor l'a conseillé :

Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(Symbol(), Period())); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(symbol, timeframe)); // Этот же вызов iBars() работает нормально
  }
Et n'oubliez pas que c'est un constructeur de classe, et qu'il est appelé avant l'initialisation.
 
Mihail Matkovskij:

Je le comprends très bien. S'il s'agissait du manque de barres dans l'historique, les deux fonctions renverraient 0. Mais en l'état, une fonction renvoie 0, tandis que l'autre renvoie correctement le nombre de barres dans l'historique. Et ils sont appelés les uns après les autres :

Vous inventez une histoire

et ensuite vous décidez de l'écrire comme une réclamation et ensuite la question

Que dit l'aide à l'erreur 4401 ?

Qu'ai-je écrit ?

Comprenez-vous la différence entre un manque de barres et un graphique qui n'est pas prêt ?

vous avez la situation après le redémarrage du terminal avec le démarrage de l'indicateur, et vous demandez les données dans l'initialisation globale du programme MQL (constructeur de classe), qui sera exécuté avant OnInit()


parti, vous écrivez plus vite que vous ne lisez, cherchez dans le forum 4401 - toutes les réponses

 
MakarFX:

Je calcule le lot comme suit

Il est au début de l'EA...et je l'ai mis à la toute fin du code

#property link      "http://www.mql5.com"
input double CheckLots = 0.01;
input int    Persent   = 5;
   double Lots=NormalizeDouble(AccountBalance()*CheckLots/1000-0.005,2);  

Lorsque la variable Lots est appelée dans la fonction OnTick, l'EA la retrouve et la recalcule.

Ça ne peut pas être comme ça. La déclaration et l'initialisation sont en cours, et la variableLots est assignée avec une expression.

NormalizeDouble(AccountBalance()*CheckLots/1000-0.005,2)

Cette affectation ne peut être effectuée qu'une seule fois au démarrage. Il est impossible qu'une expression soit automatiquement affectée à chaque accès àLots. Je n'ai pas entendu dire que MQL pouvait faire ça.

 
Seric29:

Ça ne peut pas être comme ça. Vous avez la déclaration et l'initialisation, et une expression est assignée à la variableLots.

Cette affectation peut être faite une fois au démarrage, il ne faut pas que chaque fois que vous accédez àLots, une expression soit automatiquement affectée. Je n'ai pas entendu dire que MQL pouvait faire ça.

J'ai vérifié, quand l'équilibre change, le lot change aussi.
 
MakarFX:
J'ai vérifié, quand l'équilibre change, le lot change aussi.

Wow, je vais vérifier. Je sais que l'on peut initialiser des variables avec des éléments de tableau avec des fonctions, mais je ne savais pas que cela changeait automatiquement, je ne pense pas qu'il y ait une telle chose en C++ non plus, je vérifierai plus tard.

 
Artyom Trishkin:
Et n'oubliez pas que c'est un constructeur de classe, et qu'il est appelé avant l'initialisation.

Ceci si l'objet est automatique. Mais je le crée avec le mot clénew (dans OnInit()) et le supprime avec le mot clé delete (dans OnDeinit()). C'est-à-dire que j'utilise un pointeur vers un objet de type Loader. Mais je pense que vous connaissez tous ces détails. C'est pourquoi le chargeur est créé dans OnInit() et il ne peut y avoir d'erreur ici.

Si vous voulez dire échanger les fonctions, j'ai essayé et le résultat est le même. Seuls les messages se succèdent dans un ordre différent :)

public:  
  Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); 
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); 
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
  }

Résultat :

2020.06.24 23:10:48.568 Loader::Loader symbole : EURUSD timeframe : PERIOD_H1

2020.06.24 23:10:48.568 Loader::Barres de chargeurs (2) : 140435

2020.06.24 23:10:48.568 Loader::Barres de chargement : 0

2020.06.24 23:10:48.568 Loader::Loader Error : 4401

Veuillez noter que cela ne se produit que si et seulement si le terminal est redémarré ! Car au premier démarrage du terminal (après le démarrage de Windows), cet exemple fonctionne correctement.
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
 
Igor Makanu:

Tu as inventé une histoire.

et a ensuite décidé d'en faire une plainte.

Aucune réclamation ! Et qu'en est-il si j'ai fourni le code source et même décrit la séquence d'actions pour tester son fonctionnement ? Manifestement, vous m'avez mal compris...

Igor Makanu:

Et vous demandez des données dans l'initialisation globale du programme MQL (constructeur de classe), qui sera exécuté avant OnInit().


parti, tu écris plus vite que tu ne lis,cherche dans le forum 4401 - toutes les réponses


Il ne doit pas être exécuté avantOnInit(), ai-je écrit dans un post précédent. C'est vous qui ne lisez pas attentivement, tant les posts que le code source que j'ai ajouté pour les tests.

 
Stanislav Korotky:

Il s'agit d'une certaine antiquité (un autre serveur est mentionné). Plus d'une fois cette année, la dernière fois il y a un mois sur MetaQuotes-Demo un nouveau compte de démonstration a été créé normalement.

De plus, si le serveur est supprimé, pourquoi est-il affiché et envoyé dans l'assistant d'ouverture de compte ? Le blocage ne se produit que lors de la dernière étape.

Oui, quelque chose ne s'enregistre pas, même dans le terminal mobile. Au début de l'année, tout s'est enregistré.