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

 
igrok333:

Comment puis-je lire la ligne 8 d'un fichier ?

La question concerne les opérations sur les fichiers

https://docs.mql4.com/ru/files


Tout dans mql est fait par force brute, comme quelqu'un me l'a dit un jour ?


Vous ne pouvez pas faire autrement ?

Tous les types de données ont une certaine taille de mémoire occupée en octets. Par conséquent, lorsque vous écrivez du code, vous pouvez l'utiliser et déplacer le pointeur de fichier vers le nombre d'octets occupés par les données d'une chaîne.

Si une ligne contient 4 valeurs de type double, elle occupe 4*8 = 32 octets. Par conséquent, pour lire la 9ème ligne du fichier, nous devons déplacer le pointeur de fichier de 256 octets.

bool  FileSeek(
   int                  file_handle,     // handle файла
   long                 offset,          // в байтах 
   ENUM_FILE_POSITION   origin           // позиция для отсчета
   );
bool  FileSeek(file_handle, 265, SEEK_SET);

Si elle est décalée depuis la fin du fichier, la valeur doit être négative.

Mais, ce n'est pas si facile que ça. Il y a quelque temps, je me suis penché sur cette question et j'ai découvert que les fichiers .txt et .csv ne fonctionnent pas correctement avec ce système, mais que les fichiers .bin ne font pas d'erreur. Peut-être que ce problème a déjà été résolu et que vous aurez de la chance.

 
Alexey Viktorov:

S'il y a 4 valeurs de type double

Toutes les valeurs d'un fichier csv ne sont-elles pas des chaînes de caractères ?


J'ai un mot pour chaque ligne du fichier.
J'ai donc des valeurs de chaîne de caractères d'une taille de 12 octets.
Donc, pour arriver à la ligne 8, je dois décaler le chariot de 84 octets.

bool  FileSeek(file_handle, 84, SEEK_SET);

Merci pour l'information.

 
Comment puis-je boucler sur toutes les positions ouvertes dans mql 5 ?
 
Roman Sharanov:
Comment dans mql 5 faire une boucle sur toutes les positions ouvertes?
c'est le sujet du mql4
 
igrok333:
c'est le sujet du mql4

Non, ce sujet concerne à la fois mql4 et mql5.

 
Roni Iron:

Bonjour !

Question : comment accélérer le testeur dans le terminal?

Il n'utilise qu'un seul thread de CPU sur 4, et seulement 150 mb de RAM. (c'est-à-dire qu'il n'utilise pas toute la puissance de mon PC).

Quelles sont les options ?

Si ce sujet a déjà été abordé, envoyez les liens s'il vous plaît !

Si MT4, seule la fréquence du processeur joue un rôle ici. Utilisation d'un seul fil ? Vous pouvez lancer simultanément 4 terminaux MT4 avec différentes tâches de test ou d'optimisation. Vous obtiendrez la même charge CPU que sur un seul terminal.

 
Roman Sharanov:
Comment puis-je passer en boucle toutes les positions ouvertes dans mql5 ?

mql5 fait la distinction entre les positions et les ordres. Une position est le résultat d'une transaction. Et une transaction est le résultat du déclenchement d'un ordre.

Tout d'abord, une demande de transaction est envoyée au serveur, et un ordre en attente (si la demande visait à en établir un) ou un ordre au marché (si la demande visait à ouvrir une position) apparaît.

Si l'ordre de marché s'est déclenché (une transaction a eu lieu), une position apparaît (ou une position existante est modifiée) à la suite de cette transaction.

Sur un compte de couverture, il peut y avoir plusieurs positions distinctes (y compris multidirectionnelles), sur un compte de compensation, il ne peut y avoir qu'une seule position.

Ainsi, pour parcourir toutes les positions, vous devez organiser la boucle en fonction de leur numéro - respectivement, utiliser PositionsTotal() au lieu de l'habituel pour mql4 OrdersTotal().

Si vous voulez boucler tous les ordres dans mql5, alors (dans mql5) utilisez la méthode habituelle pour mql4 OrdersTotal().

 
igrok333:

mais toutes les valeurs du fichier csv ne sont-elles pas des chaînes de caractères ?


J'ai un mot pour chaque ligne du fichier.
J'ai donc des valeurs de chaîne de caractères d'une taille de 12 octets.
Donc, pour arriver à la ligne 8, je dois décaler le chariot de 84 octets.


Merci pour l'information.

Le fichier texte ne doit être lu que ligne par ligne. Il n'y a pas d'autre moyen de calculer le numéro de ligne. Donc - oui, seulement par lecture consécutive en boucle en utilisant FileReadString.

 

Je crée des niveaux de Fibonacci dans le graphique en utilisant ObjectCreate(name,OBJ_FIBO, ...) et ensuite ObjectSetFiboDescription(name,0, "...") et je définis la description des niveaux mais les noms devraient être éloignés du bord droit. J'ai ajouté des espaces blancs, mais non seulement ils éloignent le texte, mais ils recouvrent aussi les lignes. En outre, si vous ajoutez des espaces supplémentaires, le texte ne recule plus.
Question : Puis-je ajouter un symbole "invisible" au texte, afin qu'il ne couvre pas la ligne située en dessous ?


 
Maxim Khrolenko:

Je crée des niveaux de Fibonacci dans le graphique en utilisant ObjectCreate(name,OBJ_FIBO, ...) et ensuite ObjectSetFiboDescription(name,0, "...") et je définis la description des niveaux mais les noms devraient être éloignés du bord droit. J'ai ajouté des espaces blancs, mais non seulement ils éloignent le texte, mais ils recouvrent aussi les lignes. En outre, si vous ajoutez des espaces supplémentaires, le texte ne recule plus.
Question : Puis-je ajouter un symbole "invisible" au texte, afin qu'il ne couvre pas la ligne située en dessous ?

essayez les points et un caractère avec le code 0

Raison: