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

 
Aleksandr Slavskii #:

S'il est prescrit dans le conseiller expert de supprimer les ordres et de clôturer les positions lorsque le conseiller expert est supprimé,

alors tout sera supprimé et clôturé

Un petit ajout : si cela prend 2,5 secondes.

Выполнение функции OnDeinit() ограничивается 2.5 секундами. Если за это время функция не закончила свою работу, то ее выполнение завершается принудительно.
 

Je n'arrive pas à comprendre comment faire.

Lorsque l'événement de défilement de la roulette de la souris se produit, le code est exécuté.

La roue de la souris peut défiler pendant plusieurs clics à la fois, et nous n'obtiendrons pas un événement avec dparam = nombre de clics, mais plusieurs événements avec dparam = +/-120.

Le code est exécuté pendant un certain temps, qui est beaucoup plus long que le temps entre les clics lors du défilement de la molette de la souris.

Par conséquent, il s'avère que plus personne ne fait défiler la roue de la souris et le programme continue à recalculer pendant un certain temps.

//+------------------------------------------------------------------+
void OnInit()
  {
   ChartSetInteger(0, CHART_EVENT_MOUSE_WHEEL, 0, true);
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   static double delta = 0;

   if(id == CHARTEVENT_MOUSE_WHEEL)
     {
      //--- какой то код
      delta += dparam / 120;
      Sleep(1000);
      //---
      Print(delta);
     }
  }
//+------------------------------------------------------------------+
15:12:22.820    test (EURUSD,H1)        0.0
15:12:23.821    test (EURUSD,H1)        1.0
15:12:24.811    test (EURUSD,H1)        2.0
15:12:25.823    test (EURUSD,H1)        3.0
15:12:26.817    test (EURUSD,H1)        4.0
15:12:27.814    test (EURUSD,H1)        5.0
La roue de la souris a défilé à 15:12:22.820 et le programme a ensuite été exécuté 5 fois de plus, pendant 5 secondes entières.


Question : comment exécuter le code du programme une seule fois au lieu de plusieurs fois ?

C'est-à-dire que la roulette a défilé pendant 5 clics, delta = dparam / 120 * 5.

 
Aleksandr Slavskii #:

Je n'arrive pas à comprendre comment faire.

Lorsque l'événement de défilement de la roulette de la souris se produit, le code est exécuté.

La roue de la souris peut défiler pendant plusieurs clics à la fois, et nous n'obtiendrons pas un événement avec dparam = nombre de clics, mais plusieurs événements avec dparam = +/-120.

Le code est exécuté pendant un certain temps, qui est beaucoup plus long que le temps entre les clics lors du défilement de la molette de la souris.

Par conséquent, il s'avère que plus personne ne fait défiler la roulette de la souris, et le programme continue à recalculer pendant un certain temps.

La roue de la souris a défilé à 15:12:22.820 et le programme a ensuite été exécuté 5 fois de plus, pendant 5 secondes entières.


Question : comment exécuter le code du programme une seule fois au lieu de plusieurs fois ?

C'est-à-dire que la roulette a défilé pendant 5 clics, delta = dparam / 120 * 5.

Essayez ceci

//+------------------------------------------------------------------+
void OnInit()
  {
   ChartSetInteger(0, CHART_EVENT_MOUSE_WHEEL, 0, true);
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   static double delta = 0;
   bool flag = true;
   if(id == CHARTEVENT_MOUSE_WHEEL)
     {
      //--- какой то код
      delta += dparam / 120;
      Sleep(1000);
      //---
      if(flag)
       {
        Print(delta);
        flag = false;
       }
     }
  }
//+------------------------------------------------------------------+

Je n'ai pas vérifié, si c'est le cas, ce n'est pas de ma faute...)))))) Il va falloir que je fasse quelque chose avec le drapeau... et peut-être que je vais devoir mettre le code dans une fonction personnalisée et jouer avec le drapeau à cet endroit.

 
Merci beaucoup !
 

Le 3 juin, j'ai publié mon script pour MT5(https://www.mql5.com/ru/code/44732).... Il est toujours dans le statut "en cours de vérification par le modérateur". Qui sait combien de temps il faudra attendre pour la vérification ?

Скачать бесплатно скрипт 'Quick Change MA (method, period)' от 'NotBuffett' для MetaTrader 5 в MQL5 Code Base
  • www.mql5.com
Скачать бесплатно скрипт 'Quick Change MA (method, period)' от 'NotBuffett' для MetaTrader 5 в MQL5 Code Base
 
Alexey Viktorov #:

Essayez ceci

Je n'ai pas vérifié, si ce n'est pas ma faute... )))))) Il va falloir que je m'occupe du drapeau d'une manière ou d'une autre... et peut-être que je vais devoir mettre le code dans une fonction personnalisée et m'occuper du drapeau à cet endroit.

Le problème est que les fonctions personnalisées ne sont exécutées qu'à l'intérieur des fonctions d'événement, et je n'ai que deux fonctions de ce type, OnInit et OnChartEvent, dans mon EA.

En général, j'ai réussi à le faire, même si ce n'est pas tout à fait un as, mais c'est quand même mieux que ce que c'était.

//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   static double delta = 0;
   static ulong timeWheel = 0;
   static bool mouse_wheel = false;

   if(id == CHARTEVENT_MOUSE_WHEEL)
     {
      delta += dparam / 120;
      mouse_wheel = true;
      timeWheel = GetMicrosecondCount();
     }

   if(mouse_wheel && GetMicrosecondCount() - timeWheel > 0)
     {
      Print(delta);
      //--- какой то код
      Sleep(1000);
      //---
      delta = 0;
      mouse_wheel = false;
     }
  }
//+------------------------------------------------------------------+
23:48:28.853    test (EURUSD,H1)        1.0
23:48:29.857    test (EURUSD,H1)        1.0
23:48:30.856    test (EURUSD,H1)        4.0
23:48:31.881    test (EURUSD,H1)        2.0
23:48:32.880    test (EURUSD,H1)        4.0
23:48:33.887    test (EURUSD,H1)        11.0
23:48:34.914    test (EURUSD,H1)        15.0
23:48:35.926    test (EURUSD,H1)        7.0
23:48:36.936    test (EURUSD,H1)        9.0
23:48:46.477    test (EURUSD,H1)        6.0
23:48:47.479    test (EURUSD,H1)        -1.0
 
Aleksandr Slavskii #:

Le problème est que les fonctions personnalisées ne sont exécutées qu'à l'intérieur des fonctions d'événement, et je n'ai que deux fonctions de ce type, OnInit et OnChartEvent, dans mon EA.

En général, j'ai réussi à le faire, même si ce n'est pas tout à fait une bonne idée, mais c'est quand même mieux que ce que c'était.

Vous pouvez également appeler des fonctions personnalisées à partir de OnChartEvent sans aucun problème.

Le drapeau est déclaré au niveau global. L'insertion de OnTick uniquement pour réinitialiser le drapeau ne pose pas de problème et ne retarde pas l'exécution du code.

Si le drapeau est ouvert, une fonction personnalisée est appelée. En interne, l'indicateur a été fermé. Dans OnTick, le drapeau est à nouveau ouvert et attend la prochaine exécution de la fonction utilisateur.

Je pense que c'est plus simple que de rester bloqué sur le temps d'exécution.

 
Alexey Viktorov #:

Vous pouvez également appeler des fonctions personnalisées à partir de OnChartEvent, sans problème.

L'indicateur est déclaré au niveau global. L'insertion de OnTick uniquement pour réinitialiser le drapeau n'est pas un problème et ne retardera pas l'exécution du code.

Si le drapeau est ouvert, une fonction personnalisée est appelée. En interne, l'indicateur a été fermé. Dans OnTick, l'indicateur est à nouveau ouvert et attend la prochaine exécution de la fonction utilisateur.

Je pense que c'est plus simple que d'être lié au temps d'exécution.

Je ne comprends pas bien, ou plutôt je ne comprends pas du tout :)

Et s'il n'y a pas de ticks, OnTick ne fonctionne pas sans ticks, que dois-je faire ?


En fait, j' appelle des fonctions personnalisées à partir de OnChartEvent de toute façon. C'était juste un problème pour suivre le dernier clic de la souris lors du défilement de la roue.

La tâche consistait à retarder l'exécution de la fonction personnalisée jusqu'au moment de l'arrêt du défilement de la roue, tout en comptant le nombre de clics pendant le défilement.

En principe, cela fonctionne.

 
NotBuffett #:

Le 3 juin, j'ai publié mon script pour MT5(https://www.mql5.com/ru/code/44732).... Il est toujours dans le statut "en cours de vérification par le modérateur". Qui sait combien de temps il faudra attendre pour la vérification ?

Je viens de publier le code. La vérification a pris moins d'une minute.

Il est fort probable que vous ayez fait une erreur lors de la publication.

 
Aleksandr Slavskii #:

Je viens de publier le code. La vérification a pris moins d'une minute.

Il est fort probable que vous ayez fait une erreur lors de la publication.

J'ai réessayé de publier... et c'est la même chose :

sous "5. Test", il est écrit"Letest s'est déroulé sans erreur" et propose de le publier, mais lorsqu'on clique sur le bouton "Publier", on obtient une erreur

404. Cette page n'existe pas

Dans la sous-section "Mes codes" il y a maintenant deux codes et sur chacun d'eux "vérifié par le modérateur".

En général, je vais poser une question dans le fil de discussion général, peut-être que les modérateurs le remarqueront quand même.