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

 
Vladimir Karputov:

Il n'y a pas de fonction MQL5 qui puisse donner les coordonnées de la souris. Mais vous pouvez utiliser la solution suivante : sur la base du fichier joint - ajouter la sauvegarde des dernières coordonnées de la souris à OnChartEvent et ensuite, lorsque le bouton est cliqué, sortir ces coordonnées.

Je l'ai eu, merci.

 

Il y a aussi un problème de confusion avec les ebjects.

Il existe une classe qui crée une étiquette et un rectangle en fonction des paramètres d'entrée.

Il existe un état - activé/désactivé par la couleur du rectangle.

//+------------------------------------------------------------------+
//|                                                CreateLabels.mqh |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
class CreateKeyStateLabel{
private:
   string label_text;
   int x;
   int y;
   bool _state;
public:
   CreateKeyStateLabel(string label_text, int x, int y){
      this.label_text = label_text;
      this.x = x;
      this.y = y;
      _state = false;
      ObjectCreate(0,label_text+"_icon", OBJ_RECTANGLE_LABEL, 0, 1, 1);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_XDISTANCE, x);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_YDISTANCE, y);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_XSIZE, 15);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_YSIZE, 15);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_BGCOLOR, clrDarkGray);
      
      ObjectCreate(0,label_text+"_label",OBJ_LABEL,0,1,1);
      ObjectSetInteger(0,label_text+"_label", OBJPROP_XDISTANCE, x+17);
      ObjectSetInteger(0,label_text+"_label", OBJPROP_YDISTANCE, y);
      ObjectSetInteger(0,label_text+"_label", OBJPROP_COLOR, clrBlack);
      ObjectSetString(0,label_text+"_label", OBJPROP_TEXT, label_text);
   }
   
   ~CreateKeyStateLabel(){
      ObjectDelete(0,label_text+"_icon");
      ObjectDelete(0,label_text+"_label");
   }
   
   void invert(){
      if(_state){
         _state = false;
         ObjectSetInteger(0,label_text+"_icon", OBJPROP_BGCOLOR, clrDarkGray);
      }else{
         _state = true;
         ObjectSetInteger(0,label_text+"_icon", OBJPROP_BGCOLOR, clrDarkGreen);
      }
   }
   
   bool state(){
      return _state;
   }
   
};

Ensuite, je crée ces objets, je crée un événement lorsqu'on appuie sur une touche, ce qui fait basculer l'état.
Les deux premières fois, cela fonctionne - et ensuite, il ignore les frappes, qu'est-ce que je fais de mal ?


//+------------------------------------------------------------------+
//|                                                       Events.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <CreateLabels.mqh>
#define  X_DIST 10
#define  Y_DIST 20

CreateKeyStateLabel *tilda = new CreateKeyStateLabel("Tilda",X_DIST,Y_DIST);


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   delete tilda;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long   &lparam, const double &dparam, const string &sparam){
   switch(id){
      case CHARTEVENT_KEYDOWN:{
         if(lparam == "38") tilda.invert();
         break;
      }
   }
}

Ici, j'ai vu que cela fonctionne de temps en temps, comment faire pour que cela fonctionne clairement à chaque clic de la bascule ?

 
Vladimir Karputov:

Il n'y a pas de fonction MQL5 qui puisse donner les coordonnées de la souris. Mais vous pouvez utiliser la solution suivante : sur la base du fichier joint, ajoutez à OnChartEvent l'enregistrement des dernières coordonnées de la souris et ensuite, lorsque vous cliquez sur le bouton, sortez ces coordonnées.

Et donc

//---------------------------------------  

   if(id==CHARTEVENT_MOUSE_MOVE)
     {
      ChartXYToTimePrice(0,int(lparam),int(dparam),window,time,price);
      Comment("price = ",DoubleToString(price,5),"   time = ",TimeToString(time,TIME_DATE|TIME_MINUTES));
     }

//---------------------------------------
 
Dano dispose déjà de l'historique des tics pour le testeur dans MT-5, mais les bougies hautes comptent toujours au prix de l'offre. Ce serait un bon avantage pour MT-4 d'avoir le compte haut au prix demandé et de dessiner les chandeliers de cette façon. Même sur 5 min. l'écart est d'environ 1 APR, voire 1,5 ! Et quel malheur d'ajouter un spread à toutes les hausses dans le code du conseiller expert ! C'est une suggestion pour l'améliorer, mais voici une question : il y a une variable haute dans la structure MqlRates. A quel prix il est rempli. Il me semble qu'il n'est pas au prix maximum comme il est écrit dans le manuel. Peut-être que quelqu'un le sait, je suis trop paresseux pour écrire un EA pour la recherche.
 

Chers Messieurs, qu'est-ce que c'est et où chercher l'erreur ?

2019.05.12 11:01:09.743 Core 6  genetic pass (52, 487) tested with error "some error after pass finished" in 0:00:00.005
Cela peut-il être lié àTesterStop()? Bien que non, l'erreur est après la passe...
 

Bonjour.
Pouvez-vous nous dire s'il est possible d'écrire un indicateur MQL5 avec des notifications à Telegram (bot) sans utiliser de services tiers, mais seulement MQL5+Telegram API ?

Ou dois-je écrire un conseiller expert pour cela ? Je pose cette question, j'ai essayé d'écrire un tel EA pour MT4, et cela s'est avéré d'une certaine manière seulement avec un Expert Advisor.


Et la deuxième question.
Est-il difficile d'écrire un indicateur/conseiller qui signalera un certain modèle dont j'ai besoin ?
Par exemple, deux chandeliers baissiers suivis de trois chandeliers haussiers ?

Je le comprends comme ceci (en gros) :
Prix de clôture < prix d'ouverture = bougie baissière
Prix de clôture>prix d'ouverture = chandelier haussier

Si je ne peux pas le faire moi-même, je le commanderai probablement pour de l'argent :))

Merci de votre attention !

 

Est-il possible de compiler du code dansex à partir d'un programme tiers ?

Je suis en train de créer une sorte de constructeur de robot en Java, et j'aimerais que l'utilisateur obtienne le code compilé au lieu d'accéder au code source.

 
Roman Sharanov:

Est-il possible de compiler du code dansex à partir d'un programme tiers ?

Je suis en train de créer une sorte de constructeur de robot en Java, et j'aimerais que l'utilisateur obtienne le code compilé au lieu d'accéder au code source.

Oui, voir l'aide de MetaEditor : Welcome to algotrading / Integration with other IDEs / Compilation de programmes MQL dans d'autres IDEs
 

Quelqu'un le sait-il ? Je travaille sur le transfert de données de feuilles de calcul Excel vers des scripts MQL5. Tout semble correct, mais EXcel a des données décimales avec une virgule au lieu d'un point.

Question : Existe-t-il un mécanisme en MQL permettant à un script de prendre des données d'Excel et de les changer en virgule, ou mieux de les changer en virgule dans Excel lui-même ?

Comment obtenir des données d'Excel à partir des cellules dont j'ai besoin, car je dois les aligner dans une colonne, écrire des macros, etc. Parmi les données, on trouve aussi bien des dates que des nombres entiers et décimaux. Cet Excel est si peu pratique, ou je n'y suis pas encore habitué...

Je serais heureux de recevoir des conseils...

 
Vladimir M.:

Quelqu'un le sait-il ? Je travaille sur le transfert de données de feuilles de calcul Excel vers des scripts MQL5. Tout semble correct, mais EXcel a des données décimales avec une virgule au lieu d'un point.

Question : Existe-t-il un mécanisme en MQL permettant à un script de prendre des données d'Excel et de les changer en virgule, ou mieux de les changer en virgule dans Excel lui-même ?

Comment obtenir des données d'Excel à partir des cellules dont j'ai besoin, car je dois les aligner dans une colonne, écrire des macros, etc. Parmi les données, on trouve aussi bien des dates que des nombres entiers et décimaux. Cet Excel est si peu pratique, ou je n'y suis pas encore habitué...

Je serais heureux de recevoir des conseils...

MQL dispose d'une fonction de remplacement de caractères dans une chaîne de caractères. Lire comme une chaîne de caractères

int  StringReplace(
   string&         str,              // строка, в которой будет осуществляться замена
   const string    find,             // искомая подстрока НАЙТИ ЗАПЯТУЮ ","
   const string    replacement       // подстрока, которая будет вставлена в найденные места ЗАМЕНИТЬ НА ТОЧКУ "."
   );

et le convertir en type double

Документация по MQL5: Строковые функции / StringReplace
Документация по MQL5: Строковые функции / StringReplace
  • www.mql5.com
Строковые функции / StringReplace - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5