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

 

Le code suivant dessine une zone de saisie sur le graphique avec le texte "Take Profit" aligné au centre :

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Edit();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EditDel();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| Создает объект "Поле ввода"                                      | 
//+------------------------------------------------------------------+ 
void EditCreate(ENUM_BASE_CORNER corner,string name,int x,int y,int width,int height,string text,
                int font_size,ENUM_ALIGN_MODE align,bool read_only,color back_clr)
  {
   long cid=ChartID();
   int subWind=0;
   string font="Consolas";
   color text_color=clrBlack;
   color border_clr=clrDimGray;
   bool back=false;
   bool selectable=false;
   bool selected=false;
   bool hidden=true;
   long zorder=0;
   if(ObjectFind(cid,name)==-1)
     {
      ObjectCreate(cid,name,OBJ_EDIT,subWind,0,0);
      ObjectSetInteger(cid,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(cid,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(cid,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(cid,name,OBJPROP_YSIZE,height);
      ObjectSetString(cid,name,OBJPROP_TEXT,text);
      ObjectSetString(cid,name,OBJPROP_FONT,font);
      ObjectSetInteger(cid,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(cid,name,OBJPROP_ALIGN,align);
      ObjectSetInteger(cid,name,OBJPROP_READONLY,read_only);
      ObjectSetInteger(cid,name,OBJPROP_CORNER,corner);
      ObjectSetInteger(cid,name,OBJPROP_COLOR,text_color);
      ObjectSetInteger(cid,name,OBJPROP_BGCOLOR,back_clr);
      ObjectSetInteger(cid,name,OBJPROP_BORDER_COLOR,border_clr);
      ObjectSetInteger(cid,name,OBJPROP_BACK,back);
      ObjectSetInteger(cid,name,OBJPROP_SELECTABLE,selectable);
      ObjectSetInteger(cid,name,OBJPROP_SELECTED,selected);
      ObjectSetInteger(cid,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(cid,name,OBJPROP_ZORDER,zorder);
      ChartRedraw(cid);
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Edit()
  {
   long cid=ChartID();
   if(ObjectFind(cid,"edit tp")<0)
     {
      EditCreate(CORNER_LEFT_UPPER,"edit tp",50,50,150,20,"Take Profit",12,ALIGN_CENTER,true,clrBeige);
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void EditDel()
  {
   long cid=ChartID();
   ObjectDelete(cid,"edit tp");
  }
//+------------------------------------------------------------------+

Lorsqu'il est exécuté en temps réel, il fonctionne correctement :

Dans le testeur de stratégie, l'alignement est du côté gauche pour une raison quelconque.


Dans MT4, le code fonctionne correctement à la fois en temps réel et dans le testeur de stratégie. Je ne vois de telles astuces que dans MT5...

Quel peut être le problème ?

 
Oleg Remizov:

Le code suivant dessine une zone de saisie sur le graphique avec le texte "Take Profit" aligné au centre :

Lorsqu'il est exécuté en temps réel, il fonctionne correctement :

Dans le testeur de stratégie, l'alignement est du côté gauche pour une raison quelconque.


Dans MT4, le code fonctionne correctement à la fois en temps réel et dans le testeur de stratégie. Je ne vois de telles astuces que dans MT5...

Quel peut être le problème ?

Dans le testeur de MT5, cela a déjà été mentionné de nombreuses fois sur le forum.

 

Bon après-midi à tous. Messieurs, veuillez m'indiquer comment gérer l'appui simultané du bouton du clavier et du bouton de la souris.Par exemple, l'appui sur le bouton du clavier dessine un objet, et l'appui sur le même + bouton gauche de la souris dessinerait un autre objet.Mais il s'avère que lorsque l'on appuie sur le bouton du clavier et le bouton de la souris, 2 objets sont dessinés.

if(lparam==49)
 {
 ObjectCreate(0,"line",OBJ_TREND,0,time1,price1,time1+86400,price1);
 ChartRedraw(0);
 }
if(lparam==49 &&В MouseK==1)
 {
 ObjectCreate(0,"Marg",OBJ_LABEL,0,0,0);
 ObjectSetInteger(0,"Marg",OBJPROP_XDISTANCE,280); 
 ObjectSetInteger(0,"Marg",OBJPROP_YDISTANCE,20); 
 ChartRedraw(0);
 }  
 

Je travaille à partir de l'article suivant :

https://www.mql5.com/ru/articles/4149

et il y a quelques choses dans le code que je ne comprends pas, s'il vous plaît expliquez la signification

1. Pourquoi utilise-t-on l'opérateur : :(résolution de la portée)?

void OnStart()
  {
//---
   Test();
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Test                                                             |
//+------------------------------------------------------------------+
bool Test()
  {

   string pStream;
   string sources_filename="Websorce.txt";

   int hFile,iStringSize;

// read file contents 
   hFile=::FileOpen(sources_filename,FILE_TXT|FILE_READ|FILE_UNICODE);
   if(hFile==INVALID_HANDLE)
     {
      ::Print("error opening file "+sources_filename);
      return(false);
     }

   while(!::FileIsEnding(hFile))
     {


2. Que fait cette ligne de code "_errCode |= code" ? (Je sais que cet opérateur est un "ou" bit à bit, comme "_errCode =_errCode |code").


class JSONParser {
    private:
        int _pos;
        ushort _in[];
        int _len;
        string _instr;
        int _errCode;
        string _errMsg;
      

        void setError(int code=1,string msg="unknown error") {
          string _str = NULL;
            _errCode |= code;
Создание пользовательской новостной ленты в MetaTrader 5
Создание пользовательской новостной ленты в MetaTrader 5
  • www.mql5.com
В терминале MetaTrader 5 есть множество полезных функций, которые могут пригодиться пользователю, независимо от его стиля торговли, включая и возможность доступа к ленте оперативных новостей. Это дает трейдеру торговый контекст, значимость которого сложно переоценить, ведь он может оказать влияние на рынки. Единственное ограничение — объем...
 
Bonjour, il y a un conseiller dans la base pour mt4 qui peut être utilisé comme un simulateur de trading manuel dans le testeur. Ce n'est pas un mauvais simulateur. Je voudrais poser une question : est-il possible de faire un tel entraîneur EA multitime ? Puis-je l'utiliser sur MT4 ou sur MT5 ?
 
bahtiyar:
Bonjour, il y a un conseiller dans la base pour mt4 qui peut être utilisé comme un simulateur de trading manuel dans le testeur. Ce n'est pas un mauvais simulateur. Je voudrais poser une question : est-il possible de faire un tel entraîneur EA multitime ? Sur MT4 ou sur MT5 ?

Vous pouvez. Pour MT5, il est également multidevises, mais avec certaines limitations. Malheureusement, le testeur ne fonctionne pas avec les graphiques. Plus exactement, il ne permet pas de modifier manuellement les objets graphiques.

 
Alexey Viktorov:

Vous pouvez. Et pour mt5, il est également multidevises, mais avec certaines limitations. Malheureusement, le testeur ne fonctionne pas avec les graphiques. Plus précisément, il ne vous permet pas de modifier manuellement les objets graphiques.

Merci pour votre réponse Alexey ! Vous avez répondu à ce que vous pouvez faire. Je voudrais préciser ma question. Est-il possible de faire la visualisation de manière à pouvoir analyser plusieurs délais, car le testeur sera utilisé comme un simulateur de trading manuel? Si oui, comment puis-je le faire en général7.
 
bahtiyar:
Merci pour votre réponse Alexey ! Vous avez répondu à ce qui peut être fait. Je voudrais clarifier ma question : est-il possible de faire en sorte que la visualisation permette d'analyser plusieurs horizons temporels, car le testeur sera utilisé comme un simulateur de trading manuel ? si c'est possible, comment faire en termes généraux7.

Pas du tout.

 
bahtiyar:
Merci pour votre réponse Alexey ! Vous avez répondu à ce qui peut être fait. Je voudrais corriger ma question. Puis-je analyser plusieurs horizons temporels dans la visualisation, car le testeur sera utilisé comme un simulateur de trading manuel ?
Vitaly Muzichenko:

Pas du tout.

Vous ne pouvez pas le faire sur MT4. Vous pouvez ajuster les graphiques de manière à pouvoir consulter l'historique jusqu'à la profondeur nécessaire.

Sur MT5, le testeur charge tous les symboles et tous les TF auxquels on accède depuis le programme, ainsi que les indicateurs s'ils sont utilisés dans le code.

Mais dans tous les cas, vous aurez besoin d'un indicateur spécial pour "sauter" par-dessus les graphiques afin de ne pas avoir à les négocier. Ou bien la vitesse devra être telle qu'elle ne différera pas beaucoup de la vitesse réelle.

 

Dans quelle mesure l'indicateur Optimize de la configuration du méta-éditeur contribue-t-il à accélérer l'exécution du programme? J'ai une sorte de test lent... Quel est l'effet de cette Optimisation ?

Malheureusement, je ne peux pas l'utiliser à cause du crash lors de l'ajout d'instances à l'objet CDictionary.