Erreurs, bugs, questions - page 727

 
Renat:

Une question a été posée au sujet de FileReadArray, et dans l'explication, j'ai signalé qu'il possède une fonctionnalité qui lit le mauvais type de données.

D'où la question : comment cette fonctionnalité s'inscrit-elle dans la sécurité linguistique ?

Si c'est possible, pourquoi ne pas créer une fonction standard pour convertir un champ de bits au bon type ?

En général, il faut soit mettre de l'ordre et supprimer cette fonctionnalité, soit laisser les gens implémenter l'arithmétique longue.

Voici un exemple de cette fonctionnalité à travers un fichier d'effacement :

double arr[]; ulong arr1[]; 
//+------------------------------------------------------------------+
void OnStart()
  {   
   ArrayResize(arr,1); arr[0]=123.2564;
   WriteArrayFile();
   ReadArrayFile();
   Print(arr1[0]);
  }
//+------------------------------------------------------------------+
void WriteArrayFile(string folder="Calculator")
  {
   int han=FileOpen(folder+".dat",FILE_WRITE|FILE_BIN);
   if(han!=INVALID_HANDLE)
     {      
      FileWriteArray(han,arr);              
      FileClose(han);
     }
  }
//+------------------------------------------------------------------+
void ReadArrayFile(string folder="Calculator")
  {
   int han=FileOpen(folder+".dat",FILE_READ|FILE_BIN);
   if(han!=INVALID_HANDLE)
     {      
      FileReadArray(han,arr1);             
      FileClose(han);
     }
  }
//+------------------------------------------------------------------+
 
Paranoïa détectée.
 
TheXpert:
Paranoïa détectée.

Vous devriez y réfléchir.

Je suis en fait favorable à ce que l'on considère qu'il est sûr et que l'on fasse sa contrepartie sans utiliser de fichier, mais directement.

Mais si MQ reconnaît qu'il n'est pas sûr, alors il devrait être retiré de la fonction également.

ZZZY D'ailleurs peut-être que je me suis trompé aujourd'hui, je n'ai pas répondu à deux questions, vous m'éclairez, pointez le doigt là où c'est stupide.

 
Urain:

Voici un exemple de cette réparation via le fichier avec l'essuyage de la vis :


Pourquoi passer par un dossier ? C'est plus simple que ça. Lisez sur la conversion des types de données des structures simples
 
 
Renat:
Lors des tests sur les croisements, il existe une modélisation précise et d'autres taux pour une conversion correcte des bénéfices et des exigences de marge.
Essayez d'exécuter la visualisation et vous comprendrez immédiatement la quantité de calculs basés sur le nombre de caractères d'arrière-plan dans la surveillance du marché.
Je peux tout comprendre, mais une différence de 13,7x en vitesse... Eh bien, 2x c'est bon. Et la joie puérile de tester la vitesse du prix d'ouverture sur les majors a été remplacée par une déprime larmoyante sur les croisements. Et au lieu d'utiliser 30 agents distants natifs, nous devrons soudoyer les cludes à nouveau... Abyss !
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
 
Urain:

Développez la pensée.

Je suis en fait favorable à ce que l'on considère qu'il est sûr et que l'on fasse sa contrepartie sans utiliser de fichier, mais directement.

Mais si MQ le reconnaît comme non sûr, il doit être retiré de la fonction également.

ZZZY D'ailleurs peut-être que je radote aujourd'hui quelque chose qui ne va pas, je n'ai pas répondu à deux questions, vous m'éclairez vraiment, pointez le doigt là où c'est bête.

Le fichier lui-même est impersonnel. On ne sait pas au préalable dans quel sens ce fichier a été écrit. En d'autres termes, la fonctionnalité décrite ci-dessus ne peut être interdite. Bien sûr, vous pouvez détecter organoleptiquement un fichier texte pur, et il y a quelques problèmes avec l'Unicode et les encodages Ansi.

Vous pouvez donc lire n'importe quel fichier à volonté. Et cela n'entraînera aucune situation dangereuse, car la taille des lectures (et des écritures aussi) est contrôlée. Vous ne serez pas en mesure de briser la pile. Vous ne pourrez en aucun cas obtenir une adresse dans la mémoire du processus.

 
muallch:
Je peux le comprendre, mais une différence de vitesse de 13,7 fois... Eh bien, 2x c'est bon. Et la joie puérile de tester la vitesse aux prix d'ouverture sur les majors a été remplacée par une déprime larmoyante sur les crosses. Et au lieu d'utiliser 30 agents distants natifs, nous devrons à nouveau soudoyer les cludes... Abyss !
Nous examinons cette question. Le test du prix d'ouverture sur les croisements sera accéléré.
 
stringo:

Le fichier lui-même est un fichier impersonnel. On ne sait pas à l'avance comment le dossier a été enregistré. En d'autres termes, la fonctionnalité décrite ci-dessus ne peut être interdite. Il est bien sûr possible de détecter de manière organoleptique un fichier texte pur, et il existe des nuances avec les encodages Unicode et Ansi.

Vous pouvez donc lire n'importe quel fichier à volonté. Et cela n'entraînera aucune situation dangereuse, car la taille des lectures (et des écritures aussi) est contrôlée. Vous ne serez pas en mesure de briser la pile. Vous ne pouvez pas obtenir une adresse dans la mémoire du processus de quelque manière que ce soit.

Dans ce cas, je ne vois aucune raison de ne pas introduire une fonction de lecture directe sans conversion de type, comme dans le cas de

double a=123.2564; ulong b;

b=Byte(a,TYPE_ULONG);
Print(b);
//--- результат 4638373815016729713

Mettez-le dans une fonction et tout sera en sécurité.

 
Urain:

Je ne vois donc aucune raison de ne pas introduire une fonction de lecture directe des données sans conversion de type, à l'instar de la méthode suivante

Mettez-le dans une fonction et tout sera en sécurité.

struct __double { double v ; }

struct __long { long v ; }

__double a ; __long b ;

a.v=123.456 ;

b=a ;

b.v=4638373815016729713;

pas difficile.

+ lire en dehors des liens supérieurs https://www.mql5.com/ru/articles/364


Et la conversion d'un type à l'autre peut se faire à l'aide de macros ou de fonctions.

mais il n'y a rien de vraiment compliqué.

Избавляемся от балласта самодельных DLL
Избавляемся от балласта самодельных DLL
  • 2012.01.31
  • o_O
  • www.mql5.com
Если MQL5-программисту недостаточно функционала языка, он вынужден обращаться к дополнительным инструментам. Для этого приходится использовать другой язык программирования и создавать промежуточную DLL. В MQL5 имеется механизм представления разных типов данных с помощью структур и передачи их в API, но к сожалению, MQL5 не отвечает нам на вопрос о том, как вытянуть данные из принятого указателя. В данной статье мы поставим точку в этом вопросе и покажем простые механизмы обмена сложными типами данных и работе с ними.