Questions des débutants MQL5 MT5 MetaTrader 5 - page 576

 

Bonjour.

Pouvez-vous me dire s'il est possible de copier le texte de l'EA dans le presse-papiers, par exemple, par condition, le texte de l'alerte.

Si oui, comment faire ?

 
mila.com:

Bonjour.

Pouvez-vous me dire s'il est possible de copier le texte de l'EA dans le presse-papiers, par exemple, par condition, le texte de l'alerte.

Si oui, comment faire ?

Non. L'utilisation du presse-papiers est une fonction du système (API Windows). Dans MQL5, il n'y a pas d'accès direct à WinAPI. Et pourquoi travailler avec le presse-papiers ? Après tout, vous générez le message vous-même - cela signifie que vous disposez du texte source du message.
 
Karputov Vladimir:
Non. L'utilisation du presse-papiers est une fonction du système (API Windows). Dans MQL5, il n'y a pas d'accès direct à WinAPI. Et pourquoi devriez-vous travailler avec le presse-papiers ? Après tout, vous générez vous-même le message - vous disposez donc du texte source du message.

Oui, le code source est là, mais j'en ai besoin, à une certaine condition, sur le presse-papiers.

Désolé, je n'ai pas précisé, j'ai besoin de l'implémentation en MQL4.

Est-il possible d'ouvrir le presse-papiers en utilisant #import "user32.dll" ?

 
mila.com:

Oui, le code source est là, mais j'en ai besoin, à une certaine condition, sur le presse-papiers.

Désolé, je n'ai pas précisé, j'ai besoin de l'implémentation en MQL4.

Peut-être pouvez-vous ouvrir le presse-papiers en utilisant #import "user32.dll" ?

Il est temps d'écrire en MQL5. L'utilisation de dll est le summum de l'imprudence.

Si je comprends bien, vous voulez lire les informations d'un programme tiers. Utilisez ensuite l'écriture dans un fichier, dans un répertoire commun à tous les terminaux clients: \Terminal\Common\Files. Déjà à partir de ce répertoire, vous pouvez lire le fichier avec un programme tiers.

 
Karputov Vladimir:

Il est grand temps d'écrire en MQL5. Utiliser un dll est le comble de la folie.

Si je comprends bien, vous voulez lire des informations provenant d'un programme tiers. Utilisez ensuite l'écriture dans un fichier, dans un répertoire commun à tous les terminaux clients: \Terminal\Common\Files. À partir de ce répertoire, vous pouvez lire le fichier avec un programme tiers.

Merci pour les recommandations, mais je dois maintenant copier le texte dans le presse-papiers à partir du programme MQL4.

 
Karputov Vladimir:

Prenons les choses dans l'ordre. Voici le modèle :

Joignez-y le graphique et une capture d'écran du graphique dans le studio, ainsi que les entrées des onglets "Journal" et "Conseillers" (si elles y apparaissent).

Bonjour ! !!

J'ai redémarré la plateforme MT5 pour commencer. Compilé votre modèle. Le résultat de la compilation est présenté ci-dessous. J'ai dû jeter les captures d'écran à cause du grand volume

Un EA est apparu dans le navigateur :

J'ai lancé l'EA sur le graphique et autorisé le trading à 3 endroits :

J'ai obtenu l'icône EA sur le graphique au lieu d'un visage souriant.

Voici un extrait du journal 2016.05.11 12:44:47.139 Expert Expert Test (GBPUSD,H1) chargé avec succès

Vous trouverez ci-dessous le contenu du message concernant le chargement de l'EA :

CO 0 10:35:45.020 Terminal Alpari Limited MT5 x64 build 1325 démarré
HD 0 10:35:45.020 Terminal Windows 8.1 (PC basé sur x64), IE 11.00, UAC, Intel Core i5-2320 @ 3.00GHz, RAM : 2209 / 4078 Mb, HDD : 45023 / 149999 Mb, GMT+03:00
ND 0 10:35:45.020 Terminal C:\Users\Boris\AppData\Roaming\MetaQuotes\Terminal\73D45AFCBD5653CAF29C407A081F030C
LI 0 10:35:47.200 Réseau '50016841' : autorisé sur Alpari-Ltd-MT5 via mt5.nl.3 (ping : 57.34 ms)
NG 0 10:35:47.200 Réseau '50016841' : autorisation précédente réussie effectuée à partir de 79.172.69.175 le 2016.05.10 23:47:58
FK 0 10:35:47.617 Network '50016841' : terminal synchronisé avec Alpari Limited
RM 0 10:35:47.617 Réseau '50016841' : la négociation a été activée - mode de compensation.
OH 0 10:35:48.253 Réseau '50016841' : recherche de points d'accès sur le réseau
CL 0 10:35:51.446 Réseau '50016841' : analyse du réseau terminée.
ND 1 12:00:49.011 Réseau '50016841' : connexion à Alpari-Ltd-MT5 perdue
MR 0 12:01:08.842 Réseau '50016841' : autorisé sur Alpari-Ltd-MT5 via mt5.nl.3 (ping : 56.41 ms)
HR 0 12:01:08.842 Network '50016841' : autorisation précédente réussie effectuée depuis 79.172.69.175 le 2016.05.11 10:35:52
PQ 0 12:01:08.907 Réseau '50016841' : terminal synchronisé avec Alpari Limited
PH 0 12:01:08.907 Réseau '50016841' : la négociation a été activée - mode de compensation.
KL 0 12:41:45.169 Test d'Expert Advisor (GBPUSD,H1) chargé avec succès

Jetez-y un coup d'œil. Vous trouverez peut-être la cause. Je suis perplexe, c'est peut-être un problème avec la construction ?

Merci ! !!



Merci pour l'aide ! !!

 
Boris.45:

Bonjour ! !!

J'ai redémarré la plateforme MT5 pour commencer. Compilé votre modèle. Le résultat de la compilation est présenté ci-dessous. J'ai dû jeter les captures d'écran à cause du grand volume

Un EA est apparu dans le navigateur :

J'ai lancé l'EA sur le graphique et autorisé le trading à 3 endroits :

J'ai obtenu l'icône EA sur le graphique au lieu d'un visage souriant.

Voici un extrait du journal 2016.05.11 12:44:47.139 Expert Expert Test (GBPUSD,H1) chargé avec succès

Vous trouverez ci-dessous le contenu du message concernant le chargement de l'EA :

CO 0 10:35:45.020 Terminal Alpari Limited MT5 x64 build 1325 démarré
HD 0 10:35:45.020 Terminal Windows 8.1 (PC basé sur x64), IE 11.00, UAC, Intel Core i5-2320 @ 3.00GHz, RAM : 2209 / 4078 Mb, HDD : 45023 / 149999 Mb, GMT+03:00
ND 0 10:35:45.020 Terminal C:\Users\Boris\AppData\Roaming\MetaQuotes\Terminal\73D45AFCBD5653CAF29C407A081F030C
LI 0 10:35:47.200 Réseau '50016841' : autorisé sur Alpari-Ltd-MT5 via mt5.nl.3 (ping : 57.34 ms)
NG 0 10:35:47.200 Réseau '50016841' : autorisation précédente réussie effectuée à partir de 79.172.69.175 le 2016.05.10 23:47:58
FK 0 10:35:47.617 Network '50016841' : terminal synchronisé avec Alpari Limited
RM 0 10:35:47.617 Réseau '50016841' : la négociation a été activée - mode de compensation.
OH 0 10:35:48.253 Réseau '50016841' : recherche de points d'accès sur le réseau
CL 0 10:35:51.446 Réseau '50016841' : analyse du réseau terminée.
ND 1 12:00:49.011 Réseau '50016841' : connexion à Alpari-Ltd-MT5 perdue
MR 0 12:01:08.842 Réseau '50016841' : autorisé sur Alpari-Ltd-MT5 via mt5.nl.3 (ping : 56.41 ms)
HR 0 12:01:08.842 Network '50016841' : autorisation précédente réussie effectuée depuis 79.172.69.175 le 2016.05.11 10:35:52
PQ 0 12:01:08.907 Réseau '50016841' : terminal synchronisé avec Alpari Limited
PH 0 12:01:08.907 Réseau '50016841' : la négociation a été activée - mode de compensation.
KL 0 12:41:45.169 Test d'Expert Advisor (GBPUSD,H1) chargé avec succès

Jetez-y un coup d'œil. Vous trouverez peut-être la cause. Je suis perplexe, peut-être que c'est un problème avec la construction ?

Merci ! !!



Merci pour l'aide ! !!

Installez la borne au-dessus de celle qui est défectueuse. Il peut être guéri.
 
Karputov Vladimir:

Il est grand temps d'écrire en MQL5. Utiliser un dll est le comble de la folie.

Si je comprends bien, vous voulez lire des informations provenant d'un programme tiers. Utilisez ensuite l'écriture dans un fichier, dans un répertoire commun à tous les terminaux clients: \Terminal\Common\Files. Déjà à partir de ce répertoire, vous pouvez lire le fichier avec un programme tiers.

Si c'était "le comble de la folie", ce serait interdit.

WinAPI étend considérablement les capacités de MQL. Et vous pouvez faire quelque chose de stupide même sans dll.

Et voici un exemple de passage d'une chaîne de caractères dans le presse-papiers :

#define  CF_UNICODETEXT 13
#define  GHND 0x0042

#import "User32.dll"
   int OpenClipboard( uint );
   int EmptyClipboard();
   int CloseClipboard();
   uint SetClipboardData( uint uFormat, uint hMem );
#import "Kernel32.dll"
   uint GlobalAlloc( uint uFlags, uint dwBytes );
   uint GlobalLock( uint hMem );
   int GlobalUnlock( uint hMem );
#import "msvcrt.dll"
   uint memcpy( uint dest, string src, uint count );
#import

string str = "АБВГД";

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   uint hwnd = (uint)ChartGetInteger( 0, CHART_WINDOW_HANDLE );
   
   int strSize = StringLen( str ) * 2 + 2;  // Получаем размер строки в байтах
   
   if( OpenClipboard( hwnd ) )    // Открываем буфер
   {
      EmptyClipboard();           // Очищаем буфер
      
      uint hMem = GlobalAlloc( GHND, strSize ); // Выделяем память
      uint pMem = GlobalLock( hMem );    // Получаем адрес выделенной памяти
      memcpy( pMem, str, strSize );     // Копируем строку в память
      GlobalUnlock( hMem );
   
      SetClipboardData( CF_UNICODETEXT, hMem );  // Передаём память со строкой в буфер
      
      CloseClipboard();  // Закрываем буфер
   }
}
 
Artyom Trishkin:


Artem, dis-moi, si j'insère tout cela de la fonction On Start dans la fonction On Tick, le script sera exécuté de la même façon, mais à chaque tick, n'est-ce pas ?

Ou bien il faut changer quelque chose ?

Puisque les chandeliers précédents, à l'exception du chandelier actuel, ne changent pas à chaque tick, je suppose que nous devrions ajouter une condition pour le vérifier une fois, par exemple 1 à 2 secondes avant la fermeture du chandelier actuel ? Ou bien cela n'a aucun sens et nous pouvons laisser le contrôle sur chaque tique ?

 
Andrey Koldorkin:

Artem, dis-moi, si j'insère tout cela de la fonction On Start dans la fonction On Tick, le script sera exécuté de la même façon, mais à chaque tick, n'est-ce pas ?

Ou bien il faut changer quelque chose ?

Puisque les chandeliers précédents, à l'exception du chandelier actuel, ne changent pas à chaque tick, je suppose que nous devrions ajouter une condition pour le vérifier une fois, par exemple 1 à 2 secondes avant la fermeture du prochain chandelier actuel ? Ou bien cela n'a aucun sens et nous pouvons laisser le contrôle sur chaque tique ?

Eh bien, je formerais tout cela dans une fonction et je l'appellerais quand j'en ai besoin - à chaque tick (si c'est raisonnable et nécessaire), ou à l'ouverture d'une nouvelle bougie - une fois par heure, par exemple, si nous travaillons avec H1.