Erreurs, bugs, questions - page 720

 

Bonjour à tous !

J'ai rencontré ce bug (ou peut-être que je comprends mal quelque chose)

Lorsque l'on regarde l'historique d'un mois, les données adéquates sont affichées, c'est-à-dire gagné 740, swap -250.

Dans le même temps, lorsque je regarde l'ensemble de la période, les 500 points gagnés et l'échange sont presque les mêmes.

C'est pourquoi je ne comprends pas comment il peut en être ainsi lorsque les gains pour l'ensemble de la période sont inférieurs au total mensuel.

Si vous le souhaitez, je peux joindre les rapports d'historique

 
tol64:

C'est pourquoi si vous placez un 5e ordre d' achat stop en attente avec une position ouverte de 3 lots et 4 ordres d'achat stop existants de 3 lots chacun (avec une limite de 15 lots), vous ne devriez pas réussir.

En général, oui - en termes de ce qui est décrit dans l'aide.

Mais logiquement - pas nécessairement. Sur les marchés boursiers, il n'y a que des ordres à cours limité dans la pile, tandis que les ordres stop sont stockés sur le serveur du courtier et ont deux paramètres - le prix d'activation ("Price" en MT) et le prix de l'ordre à cours limité placé (le pire prix auquel la transaction est prête à être exécutée). Cette fonction est similaire à BuyStopLimit et SellStopLimit dans MT5, mais la limite peut être égale au prix stop ou supérieure (pour BuyStopLimit) ou inférieure (pour SellStopLimit). Sur les marchés boursiers, le fait de fixer une limite plus élevée (pour l'achat) entraîne une transaction, alors que cela ne peut être fait en MT. Ainsi, sur les marchés boursiers, particulièrement peu développés (par exemple, la Bourse ukrainienne), assez souvent (et surtout le jour de l'expiration d'un indice trimestriel à terme entre 16h30-16h35) les stops n'ont pas le temps de travailler et la coupe est remplie d'ordres Limit, qui dans des conditions normales, conduiraient immédiatement à l'exécution.

Ainsi - Limite sur le marché - engagement ferme d'acheter / vendre (si l'argent devient soudainement rare, le courtier peut supprimer l'ordre, mais avant qu'il ne vienne à l'exécution), tandis que STOP - simplement un enregistrement sur le serveur du courtier, donc au moment d'atteindre le prix d'activation le courtier peut estimer les fonds libres et décider - exposer la limite ou non. C'est pourquoi je dis que pour les limites, vous devez respecter les limites, mais pour les arrêts, en théorie, vous n'avez pas à le faire.

 
Yedelkin:

Vous êtes arrivé à DoubleToString ? :)

Ah, regarde NormalizeDouble :

Vous devez garder à l'esprit qu'un nombre normalisé, lorsqu'il est transmis au Journal à l'aide de la fonction Print(), peut contenir plus de décimales que prévu.

   double pi=M_PI;
   Print("pi=",DoubleToString(pi,16));
      
   double pi_3=NormalizeDouble(M_PI,3);
   Print("NormalizeDouble(pi,3) = ",DoubleToString(pi_3,16))
   ;
   double pi_8=NormalizeDouble(M_PI,8);
   Print("NormalizeDouble(pi,8) = ",DoubleToString(pi_8,16));
   
   double pi_0=NormalizeDouble(M_PI,0);
   Print("NormalizeDouble(pi,0) = ",DoubleToString(pi_0,16));
/*
   Результат:
   pi= 3.1415926535897931
   NormalizeDouble(pi,3)= 3.1419999999999999                          <-----------
   NormalizeDouble(pi,8)= 3.1415926499999998                          <-----------
   NormalizeDouble(pi,0)= 3.0000000000000000
*/

Rien de déroutant?

 
victorg:

Ah, regarde NormalizeDouble :

Quelque chose de confus?

Non, rien de déroutant. Dans votre exemple

void OnStart()
  {
  double a=2000000.0/3.0;
  Print(DoubleToString(a,30));
  }
il n'y avait aucune référence à l'utilisation de la fonction NormalizeDouble() et aux nombres normalisés. En conséquence, ma remarque"Avez-vous atteint DoubleToString ?:)" était accompagné d'une citation de la fonctionDoubleToString() sans l'ombre d'une gêne.Et personne n'a encore réfuté la pertinence de cette citation.
 
Yedelkin:

Non, rien n'est confus. Dans votre exemple.

Il n'a jamais été question de l'utilisation de la fonction NormalizeDouble() et des nombres normalisés. En conséquence, ma remarque"Avez-vous atteint DoubleToString ?:)" était accompagné d'une citation de la fonctionDoubleToString() sans l'ombre d'une gêne.Et personne n'a encore réfuté la pertinence de cette citation.

En fait, je ne fais pas référence à votre commentaire, mais au dock sur NormalizeDouble().

 
notused:

En général, oui - en termes de ce qui est décrit dans l'aide.

Mais logiquement - pas nécessairement. Sur les marchés boursiers, il n'y a que des ordres à cours limité dans la pile, tandis que les ordres stop sont stockés sur le serveur du courtier et ont deux paramètres - le prix d'activation ("Price" en MT) et le prix de l'ordre à cours limité placé (le pire prix auquel la transaction est prête à être exécutée). Cette fonction est similaire à BuyStopLimit et SellStopLimit dans MT5, mais la limite peut être égale au prix stop ou supérieure (pour BuyStopLimit) ou inférieure (pour SellStopLimit). Sur les marchés boursiers, le fait de fixer une limite plus élevée (pour l'achat) entraîne une transaction, alors que cela ne peut être fait en MT. Ainsi, sur les marchés boursiers, particulièrement peu développés (par exemple, la Bourse ukrainienne), assez souvent (et surtout le jour de l'expiration d'un indice trimestriel à terme entre 16h30-16h35) les stops n'ont pas le temps de travailler et la coupe est remplie d'ordres à cours limité, qui dans des conditions normales, conduiraient immédiatement à l'exécution.

Ainsi - Limite sur le marché - engagement ferme d'acheter / vendre (si l'argent devient soudainement rare, le courtier peut supprimer l'ordre, mais avant qu'il ne vienne à l'exécution), tandis que STOP - simplement un enregistrement sur le serveur du courtier, donc au moment d'atteindre le prix d'activation le courtier peut estimer les fonds libres et décider - exposer la limite ou non. C'est pourquoi je dis que pour les limites, les limites doivent être respectées, alors que pour les arrêts, en théorie, elles ne doivent pas l'être.

Merci pour cette explication détaillée.

Valery, avez-vous essayé d'implémenter une auto-stratégie dans le Strategy Tumbler de MT5 ? J'ai essayé il y a environ un mois et ça n'a pas marché, personne n'a répondu sur le forum. Je ne comprends pas si c'est un bug ou un malentendu de ma part. Jette un peu de lumière. :)

 

Bonjour !

Veuillez me conseiller, j'ai un indicateur iCustom dans un corps de programme ordinaire, il fonctionne bien et obtient le handle.

Si je le place dans la bibliothèque EX5, j'obtiens un indicateur handle=-1 et le programme principal ne parvient pas à appeler l'indicateur :

"Le chargement du DZMACD EURGBP,M15 a échoué".
"Impossible de charger l'indicateur personnalisé 'DZMACD' [4002]"

En même temps, les indicateurs standards, comme iMA ou iMACD, fonctionnent normalement dans la même bibliothèque ex5, ils obtiennent la poignée.

Je ne sais pas ce que je fais de mal ou c'est un bug ?

Документация по MQL5: Технические индикаторы / iCustom
Документация по MQL5: Технические индикаторы / iCustom
  • www.mql5.com
Технические индикаторы / iCustom - Документация по MQL5
 
Dans la structureMqlDateTime

intday;// jour

Cela signifie-t-il le jour du mois ?
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура даты
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура даты
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура даты - Документация по MQL5
 
victorg:

En fait, je ne faisais pas référence à votre commentaire, mais à la doc NormalizeDouble().

En fait, le message était formulé comme suit:

victorg:

Yedelkin:

Êtes-vous arrivé à DoubleToString ? :)

Ah, regarde NormalizeDouble :

Rien ne t'embarrasse?

C'est-à-dire qu'il y avait une citation directe de "mon commentaire" avec la suggestion "regardez autre chose là-haut" et la question "est-ce que ça prête à confusion ?".

Si vous vouliez présenter uniquement les résultats d'une nouvelle recherche sous la forme "...à propos d'un dock par NormalizeDouble()" - vous l'écririez ainsi, sans citer d'informations inutiles. Je suppose que oui.

Puisque, cependant, votre post a utilisé un lien nommé et exactement à ma réplique - a dû préciser que NormalizeDouble() n'avait rien à voir avec ma réplique ou votre post original, que j'ai pris la liberté de commenter.

 
Fia:

Bonjour !

S'il vous plaît conseiller, j'ai iCustom indicateur dans le corps habituel du programme fonctionne bien, il obtient handel, tout fonctionne.

Si je le place dans la bibliothèque EX5, j'obtiens Handel= -1 et le programme principal ne parvient pas à appeler l'indicateur :

"Le chargement du DZMACD EURGBP,M15 a échoué".
"Impossible de charger l'indicateur personnalisé 'DZMACD' [4002]"

En même temps, les indicateurs standards, comme iMA ou iMACD, fonctionnent bien dans la même bibliothèque ex5, ils obtiennent la poignée.

Je n'arrive pas à comprendre ce que je fais de travers ou c'est un bug ?

Les paramètres de l'indicateur personnalisé dans la bibliothèque sont-ils corrects ?

ERR_WRONG_INTERNAL_PARAMETER

4002

Paramètre erroné dans l'appel de fonction du terminal client interne