Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 982

 

Existe el siguiente código, que dibuja un cuadro de entrada en el gráfico con el texto "Take Profit" alineado al centro:

//+------------------------------------------------------------------+
//| 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");
  }
//+------------------------------------------------------------------+

Cuando se ejecuta en tiempo real, funciona correctamente:

En el probador de estrategias, la alineación está en el lado izquierdo por alguna razón.


En MT4, el código funciona correctamente tanto en tiempo real como en el Probador de Estrategias. Veo tales trucos sólo en MT5...

¿Cuál puede ser el problema?

 
Oleg Remizov:

Existe el siguiente código, que dibuja un cuadro de entrada en el gráfico con el texto "Take Profit" alineado al centro:

Cuando se ejecuta en tiempo real, funciona correctamente:

En el probador de estrategias, la alineación está en el lado izquierdo por alguna razón.


En MT4, el código funciona correctamente tanto en tiempo real como en el Probador de Estrategias. Veo tales trucos sólo en MT5...

¿Cuál puede ser el problema?

En el probador de MT5, ya se mencionó muchas veces en el foro.

 

Buenas tardes a todos. Señores, por favor, aconsejen cómo manejar la pulsación simultánea del botón del teclado y del botón del ratón.Por ejemplo, al pulsar el botón se dibuja un objeto, y al pulsar lo mismo + el botón izquierdo del ratón se dibujaría otro objeto.Pero resulta que al pulsar el botón del teclado y el del ratón se dibujan 2 objetos.

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);
 }  
 

Estoy trabajando a partir del siguiente artículo:

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

y hay un par de cosas en el código que no entiendo, por favor explique el significado

1. ¿Por qué se utiliza el operador ::(resolución de ámbito)?

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. ¿qué hace esta línea de código "_errCode |= code"? (Sé que este operador es bitwise "o" lo mismo que "_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 есть множество полезных функций, которые могут пригодиться пользователю, независимо от его стиля торговли, включая и возможность доступа к ленте оперативных новостей. Это дает трейдеру торговый контекст, значимость которого сложно переоценить, ведь он может оказать влияние на рынки. Единственное ограничение — объем...
 
Hola hay un asesor en la base para mt4 que se puede utilizar como un simulador de comercio manual en el probador. No es un mal simulador. Quiero hacer una pregunta, ¿es posible hacer un entrenador EA multitiempo de este tipo? ¿Puedo utilizarlo en MT4 o en MT5?
 
bahtiyar:
Hola, hay un asesor en la base para mt4 que se puede utilizar como un simulador de comercio manual en el probador. No es un mal simulador. Quiero hacer una pregunta, ¿es posible hacer un entrenador EA multitiempo de este tipo? ¿En MT4 o en MT5?

Puedes hacerlo. Para MT5 también es multidivisa, pero con algunas limitaciones. Lamentablemente, el probador no funciona con gráficos. Más exactamente, no permite editar manualmente los objetos gráficos.

 
Alexey Viktorov:

Puedes hacerlo. Y para mt5 también es multidivisa, pero con algunas limitaciones. Lamentablemente, el probador no funciona con gráficos. Más concretamente, no permite editar manualmente los objetos gráficos.

Gracias por tu respuesta Alexey! Has respondido a lo que se puede hacer. Quiero aclarar mi pregunta. ¿Es posible hacer la visualización de manera que pueda analizar varios marcos temporales, ya que el probador se utilizará como un simulador de comercio manual? Si es así, ¿cómo puedo hacer esto en general7
 
bahtiyar:
Gracias por tu respuesta Alexey! Has respondido a lo que se puede hacer. Me gustaría aclarar mi pregunta. ¿Es posible hacer la visualización de manera que pueda analizar varios marcos temporales, ya que el probador se utilizará como un simulador de comercio manual. si es posible cómo se puede hacer esto en términos generales7

De ninguna manera

 
bahtiyar:
Gracias por tu respuesta Alexey! Has respondido a lo que se puede hacer. Quiero arreglar mi pregunta. ¿Puedo analizar varios marcos temporales en la visualización, ya que el probador se utilizará como un simulador de comercio manual?
Vitaly Muzichenko:

De ninguna manera

No se puede hacer en MT4. Puedes ajustar los gráficos para que puedas mirar el historial hasta la profundidad necesaria.

En MT5 el probador carga todos los símbolos y todos los TFs a los que se accede desde el programa junto con los indicadores si se utilizan en el código.

Pero en cualquier caso, necesitará un indicador especial para "saltar" sobre los gráficos para no querer operar. O la velocidad tendrá que ser tal que no difiera mucho de la real.

 

¿En qué medida ayuda la bandera de optimización en la configuración del meta-editor a acelerar la ejecución del programa? Tengo una especie de prueba lenta... ¿Qué efecto tiene este Optimize?

Desgraciadamente, no puedo utilizarlo porque se bloquea al añadir instancias al objeto CDictionary.

Razón de la queja: