Experts: Exemples tirés du livre "Réseaux neuronaux pour le trading algorithmique avec MQL5" - page 2

 

Bonjour, je suis en train d'essayer d'exécuter le premier script du livre,

J'essaie d'exécuter le premier script du livre, qui génère un fichier csv.

Il s'appelle initial_data.mq5.

Lors de l'exécution du script à la première étape :

Si(CopyClose(_Symbol, PERIOD_M5, Start, End, close) <= 0 ||

CopyOpen(_Symbol, PERIOD_M5, Start, End, open) <= 0 ||

CopyHigh(_Symbol, PERIOD_M5, Start, End, high) <= 0 ||

CopyLow(_Symbol, PERIOD_M5, Start, End, low) <= 0)

retour ;

CopyClose est toujours égal à -1

et le script se plante, les rediffusions n'aident pas et comme je l'ai lu dans les commentaires

il s'agit d'une situation normale qui signifie qu'il n'y a pas de données en provenance du serveur.

Cependant, je ne comprends pas très bien comment le chemin vers les fichiers de données est écrit dans ce script.

Il est indiqué dans la documentation MQL5 :


Par exemple, les données des symboles EURUSD provenant du serveur commercial MetaQuotes-Demo seront situées dans le dossierterminal_directory\bases\MetaQuotes-Demo\history\EURUSD\.


J'ai des fichiers avec une résolution .hcc et un sous-répertoire \cache avec des fichiers comme H4.hc.


Mais dans le script initial_data.mq5, il n'y a qu'un seul endroit où le chemin est écrit.

PrintFormat("Correlation coefficients saved to file %s\\\\Files\\\\%s",

TerminalInfoString(TERMINAL_DATA_PATH), FileName) ;


Je sors TERMINAL_DATA_PATH

2024.06.16 22:53:39.982 path (EURUSD,M5) dataPath =C:\Users\HPAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075


Que dois-je faire pour spécifier correctement le chemin d'accès à ces fichiers ou dois-je les récupérer automatiquement dans le répertoire du terminal conformément à la logique MQL5 ?

Comment télécharger des données dans un fichier csv ?


 
bobozel1 #:

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Toutes les questions des débutants sur MQL4 et MQL5, l'aide et la discussion sur les algorithmes et les codes.

Aleksey Vyazmikin, 2024.06.18 06:28 pm

#define FileName  "correlation.csv"
//+------------------------------------------------------------------+
//| Paramètres externes|
//+------------------------------------------------------------------+
input datetime Start = D'2015.01.01 00:00:00';  // Début de la période
input datetime End = D'2020.12.31 23:59:00';    // Fin de la période
//--- Ouvrir le fichier pour écrire des données
   int handle = FileOpen(FileName, FILE_WRITE | FILE_CSV | FILE_ANSI, "\t", CP_UTF8);
   if(handle == INVALID_HANDLE)
     {
      PrintFormat("Error of open file %s: %d", FileName, GetLastError());
      return;
     }
Ouvrir un fichier

Paramètres

open_flags

[in] combinaison de drapeaux définissant le mode de travail avec le fichier. Les drapeaux sont définis comme suit :
FILE_READ fichier ouvert en lecture
FILE_WRITEfichier ouvert en écriture
FILE_BINmode lecture-écriture binaire (pas de conversion de et en chaîne)
FILE_CSVfichier de type csv (tous les éléments écrits sont convertis en chaînes du type approprié, unicode ou ansi, et séparés par un délimiteur)
FILE_TXTfichier de texte brut (même csv, mais le séparateur n'est pas pris en compte)
FILE_ANSIchaînes de caractères de type ANSI (caractères à un octet)
FILE_UNICODEchaînes de caractères de type UNICODE (caractères à deux octets)
FILE_SHARE_READaccès partagé en lecture par plusieurs programmes
FILE_SHARE_WRITEaccès partagé en écriture par plusieurs programmes
FILE_COMMONemplacement du fichier dans le dossier commun de tous les terminaux clients \Terminal\Common\Files.

FileOpen

Remarque

Pour des raisons de sécurité, le travail avec les fichiers est strictement contrôlé dans le langage MQL5. Les fichiers, qui sont utilisés pour les opérations sur les fichiers à l'aide des outils du langage MQL5, ne peuvent pas être situés en dehors du "bac à sable" des fichiers.

Si un fichier doit être lu dans un certain encodage (le paramètre codepage avec la valeur codepage est spécifié), l'indicateur FILE_ANSI doit être activé. Sans spécifier l'indicateur FILE_ANSI, le fichier texte sera lu en Unicode sans aucune conversion.

Le fichier est ouvert dans le dossier du terminal client dans le sous-dossier MQL5\Files (ou dans le répertoire testing agent_agent\MQL5\Files en cas de test). Si FILE_COMMON est spécifié parmi les drapeaux, le fichier est ouvert dans le dossier commun de tous les terminaux clients \Terminal\Common\Files.

Vous pouvez ouvrir des "canaux nommés" selon les règles suivantes :

  • Le nom du canal est une chaîne de caractères qui doit être de la forme : "\\NNnom du serveur\Npipe\Nnom du tuyau", où nom du serveur est le nom du serveur sur le réseau et nom du tuyau est le nom du canal. Si les canaux sont utilisés sur le même ordinateur, le nom du serveur peut être omis, mais un point doit être utilisé à la place : "\\NPipe\NNnom du canal". Le client qui essaie de se connecter au canal doit connaître le nom du canal.
  • FileFlush() et FileSeek() doivent être appelés au début du fichier entre les opérations successives de lecture du canal et d'écriture sur le canal.

Dans les lignes ci-dessus, le caractère spécial backslash '\' est utilisé, donc lorsque vous écrivez le nom dans le programme MQL5, '\' doit être doublé, c'est-à-dire que l'exemple ci-dessus doit être écrit dans le code comme "\\\\servername\\pipe\\pipename".

Pour plus de détails sur le travail avec les canaux nommés, veuillez lire l'article "Communication avec MetaTrader 5 via les canaux nommés sans DLL".


 
Aleksey Vyazmikin #

Honnêtement, je n'ai rien compris à la réponse, comme si un robot écrivait. Je sais où le fichier à créer est écrit, mais il n'est pas créé.

J'ai une question spécifique, comment récupérer les données des fichiers .hcc et .hc pour les écrire en .csv ?

J ' exécute le script initial_data.mq5 du livre comme résultat :

CopyClose est toujours -1. Comment résoudre ce problème ?

J'ai l'impression qu'il ne voit pas ces fichiers parce que le chemin d'accès aux fichiers de données n'est pas correctement orthographié.

Comment épeler correctement le chemin d'accès aux fichiers de données ?

Dans mon cas, les fichiers de données se trouvent dans le dossier terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\à l'intérieur du bac à sable.

Cela fait une semaine que je me débats avec ce problème, j'ai tout lu, mais je n'ai pas trouvé de solution. Merci de m'aider.

 
bobozel1 #:

Honnêtement, je n'ai rien compris à la réponse, comme si un robot écrivait. Je sais où est écrit le fichier à créer, mais il n'est pas créé.

J'ai une question spécifique, comment prendre les données des fichiers .hcc et .hc pour les écrire en .csv ?

J ' exécute le script initial_data.mq5 du livre comme résultat :

CopyClose est toujours -1. Comment corriger cela ?

J'ai l'impression qu'il ne voit pas ces fichiers, parce que le chemin d'accès aux fichiers de données n'est pas correctement orthographié.

Comment spécifier correctement le chemin d'accès aux fichiers de données ?

Dans mon cas, les fichiers de données sont situés dans le dossier terminal_terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\à l'intérieur du bac à sable.

Cela fait une semaine que je me débats avec ce problème, j'ai tout lu, mais je n'ai pas trouvé de solution. Merci de m'aider.

Toutes les données proviennent de la plateforme, l'utilisateur ne se préoccupe pas de savoir d'où le terminal les obtient - de quel fichier.

Le script travaille avec les données qui sont reflétées sur le graphique.

Vérifiez s'il y a des dates sur le graphique pour lesquelles vous demandez des cotations.

 
Aleksey Vyazmikin #:

Toutes les données proviennent de la plate-forme, l'utilisateur ne se préoccupe pas de savoir d'où le terminal les tire - de quel fichier.

Le script travaille avec les données reflétées sur le graphique.

Vérifiez s'il y a des dates sur le graphique pour lesquelles vous demandez des cotations.

Veuillez expliquer ce que cela signifie.

Dans le script, il y a une fourchette

input datetime Start = D'2015.01.01.01 00:00:00' ; // Début de la période

input datetime End = D'2020.12.31 23:59:00' ; // Fin de la période

sur M5

Dois-je prendre le graphique EURUSD sur M5, le faire défiler jusqu'à 2015.01.01 et ensuite exécuter le script ?

Ou puis-je exécuter le script sur MN ? Et avec les nouveaux ticks, il revient au début ?
 
bobozel1 #:

Pouvez-vous expliquer ce que cela signifie ?

Dans le script, il y a une plage

input datetime Start = D'2015.01.01.01 00:00:00' ; // Début de la période

input datetime End = D'2020.12.31 23:59:00' ; // Fin de la période

sur M5

Dois-je prendre le graphique EURUSD sur M5, faire défiler jusqu'à 2015.01.01 et ensuite exécuter le script sur celui-ci ?

Ou puis-je exécuter le script sur MN ? Et avec les nouveaux ticks, il se déplace à nouveau au début ?

Lisez l'aide sur le terminal. Et voici une autre chose.

Vous découvrirez qu'il existe un réglage de la profondeur de l'historique par le biais du nombre maximum de barres dans la fenêtre. Il faut recharger le terminal pour que les changements prennent effet.

Il est donc nécessaire de régler la profondeur maximale de l'historique pour toutes les TF à la fois par la plus petite TF qui est nécessaire pour le travail.

Il est clair que 100 barres pour les jours et 100 barres pour les minutes donneront la même profondeur en barres, mais pas en dates.

Lorsque vous définissez la valeur requise ou "Unlimited" et que vous rechargez le terminal, si l'historique est disponible pour la période requise, vous pouvez exécuter le script sur la TF mensuelle.


 
Aleksey Vyazmikin #:

Lisez l'aide du terminal. En voici une autre.

Vous apprendrez qu'il est possible de régler la profondeur de l'historique par le biais du nombre maximum de barres dans la fenêtre. Pour que les changements prennent effet, vous devez recharger le terminal.

Il est donc nécessaire de régler la profondeur maximale de l'historique pour tous les TF à la fois par le plus petit TF, ce qui est nécessaire pour travailler.

Il est clair que 100 barres pour les jours et 100 barres pour les minutes donneront la même profondeur en barres, mais pas en dates.

Lorsque vous définissez la valeur requise ou "Unlimited" et que vous rechargez le terminal, si l'historique est disponible pour la période requise, vous pouvez exécuter le script sur la TF mensuelle.


Je vous remercie ! Tout a fonctionné.
 
bobozel1 #:
Je vous remercie ! Cela a fonctionné.

Je vous en prie.

 
Ce n'est pas cela qui est le plus gênant. Le plus gênant, c'est qu'après avoir optimisé les paramètres, vous ne pouvez gagner que pendant un an. Changez-les pour une autre année, et cela ne fonctionnera plus. Cela signifie que le projet de l'auteur n'est pas réalisable. Les paramètres peuvent varier considérablement d'une année à l'autre. Peut-être qu'il n'existe aucun ensemble de paramètres qui puisse être rentable chaque année !
 

Merci Dmitry pour tous les efforts que vous avez consacrés à ce livre. Il est vraiment utile.

Dans neuronbase.mqh vous implémentez la méthode de régularisation ElasticNet comme ci-dessous sans explication dans votre livre.

m_cWeights.m_mMatrix -= m_cWeights.m_mMatrix * Lambda[1] + Lambda[0]

Mais c'est différent de la formule de base (+) ou du code source de Keras (+) par exemple.

Veuillez expliquer votre méthode d'implémentation. Pourquoi utilisez-vous simplement des lambdas au lieu de la formule complète et pourquoi multipliez-vous les poids avec l'un d'entre eux et additionnez-vous avec un autre.

Dmitriy Gizlyk
Dmitriy Gizlyk
  • 2024.07.15
  • www.mql5.com
Trader's profile