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

 
Vladimir Karputov:

No hay ninguna función MQL5 que dé las coordenadas del ratón. Pero se puede utilizar la siguiente solución: basado en el archivo adjunto - añadir guardar las últimas coordenadas del ratón a OnChartEvent y luego, cuando se hace clic, la salida de estas coordenadas.

Lo tengo, gracias.

 

También hay algún problema de confusión con los ebjetos.

Hay una clase que crea un marcador y un rectángulo basado en los parámetros de entrada.

Hay un estado - on/off por el color del rectángulo.

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

Entonces creo estos objetos, hago un evento al pulsar una tecla, que cambiaría el estado.
Las primeras veces funciona - y luego simplemente ignora las pulsaciones, ¿qué estoy haciendo 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;
      }
   }
}

Aquí he visto que funciona de vez en cuando, ¿cómo hago para que funcione claramente para cada clic de la palanca?

 
Vladimir Karputov:

No hay ninguna función MQL5 que dé las coordenadas del ratón. Pero se puede utilizar la siguiente solución: basándose en el archivo adjunto, añadir a OnChartEvent guardar las últimas coordenadas del ratón y luego, al hacer clic en el botón, la salida de estas coordenadas.

Y así

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

   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 ya disponible el historial de ticks para el probador en MT-5, pero las velas altas siguen contando a precio de oferta. Sería una buena ventaja para la MT-4 tener el recuento alto en el precio de venta y dibujar las velas de esa manera. Incluso en 5 min. el margen es de aproximadamente 1 TAE, ¡o incluso 1,5! ¡Y qué dolor para añadir un spread a todas las subidas en el código del Asesor Experto! Esta es una sugerencia para mejorarla, pero aquí hay una pregunta: hay una variable alta en la estructura de MqlRates. A qué precio se llena. Me parece que no está al máximo precio como está escrito en el manual. Tal vez alguien sabe, soy demasiado perezoso para escribir un EA para la investigación.
 

Estimados señores, ¿qué es esto y dónde buscar el error?

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
¿Puede estar relacionado conTesterStop()? Aunque no, el error es después del pase...
 

Hola.
¿Pueden aconsejar si es posible escribir un indicador MQL5 con notificaciones a Telegram (bot) sin utilizar ningún servicio de terceros, sino sólo MQL5+Telegram API?

¿O tengo que escribir un Asesor Experto para eso? Hago esta pregunta, traté de escribir tal EA para MT4, y resultó de alguna manera sólo con un Asesor de Expertos.


Y la segunda pregunta.
¿Qué tan difícil es escribir un indicador/asesor que señale un determinado patrón que necesito?
Por ejemplo, ¿dos velas bajistas seguidas de tres alcistas?

Yo lo entiendo así (a grandes rasgos):
Precio de cierre < precio de apertura = vela bajista
Precio de cierre>precio de apertura = vela alcista

Si no puedo hacerlo yo mismo, probablemente lo encargaré por dinero))

Gracias por su atención.

 

¿Es posible compilar el código enex desde un programa de terceros?

Estoy creando una especie de constructor de robots en Java, y me gustaría que el usuario obtuviera el código compilado en lugar de acceder al código fuente.

 
Roman Sharanov:

¿Es posible compilar el código enex desde un programa de terceros?

Estoy creando una especie de constructor de robots en Java, y me gustaría que el usuario no tuviera acceso al código fuente, sino que obtuviera el compilado

Sí, véase la ayuda del MetaEditor: Bienvenido a Algorithm / Integración con otros IDEs / Compilación de programas MQL en otros IDEs
 

¿Alguien lo sabe? Estoy trabajando en la transferencia de datos de las hojas de cálculo Excel a los scripts MQL5. Todo parece estar bien, pero EXcel tiene datos decimales con una coma en lugar de un punto.

Pregunta: ¿Existe algún mecanismo en MQL para que el script tome los datos de Excel y los cambie a decimales, o mejor que los cambie a decimales en el propio Excel?

¿Cómo obtener los datos de Excel de las celdas que necesito, porque tengo que alinearlas en una columna, escribir macros, etc.? Entre los datos hay tanto fechas como enteros y decimales. Este Excel es tan incómodo, o es que todavía no me he acostumbrado...

Me gustaría recibir cualquier consejo...

 
Vladimir M.:

¿Alguien lo sabe? Estoy trabajando en la transferencia de datos de las hojas de cálculo Excel a los scripts MQL5. Todo parece estar bien, pero EXcel tiene datos decimales con una coma en lugar de un punto.

Pregunta: ¿Existe algún mecanismo en MQL para que el script tome los datos de Excel y los cambie a decimales, o mejor que los cambie a decimales en el propio Excel?

¿Cómo obtener los datos de Excel de las celdas que necesito, porque tengo que alinearlas en una columna, escribir macros, etc.? Entre los datos hay tanto fechas como enteros y decimales. Este Excel es tan incómodo, o es que todavía no me he acostumbrado...

Me gustaría recibir cualquier consejo...

MQL tiene una función de sustitución de caracteres en una cadena. Leer como cadena

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

y convertirlo a tipo doble

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