Errores, fallos, preguntas - página 2470

 
Igor Zakharov:

Así que no es en segundos...

En primer lugar, eso es lo que debería ser la descripción de la lengua.

No en los artículos que hay que buscar. Lo último que debes buscar en el foro es esto.

Si no, resulta que: miro en un libro, pero veo una figura...

 

¿Por qué?

IM      0       17:19:04.403    Terminal        MetaTrader 5 x64 build 2056 started (MetaQuotes Software Corp.)
NG      0       17:19:04.403    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9408 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

Hoy he descubierto que el volumen mínimo en la especificación de la herramienta es 100 y el paso también es 100. Sin embargo, no abre posiciones con el error"Volumen no válido". Si pongo 0,01, los botones están inactivos.

Se ha sustituido la versión por una versión "más joven".

KK      0       17:35:14.046    Terminal        MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
IE      0       17:35:14.046    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9182 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

sin cambios.

Luego lo sustituyó por la versión de lanzamiento.

FI      0       17:37:23.049    Terminal        MetaTrader 5 x64 build 2007 started (MetaQuotes Software Corp.)
RS      0       17:37:23.049    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9180 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

Y aquí está el resultado.



¿Por qué sólo le ocurre a una empresa? Si se generalizara, el problema se habría resuelto hace tiempo.

¿Qué dirección debo enviar al apoyo de la empresa?


Añadido: Es muy extraño que la build 2025 funcione bien en una cuenta cent de la misma empresa. Todos los parámetros de la herramienta están como deben estar.

Puedes operar en centavos. Me lo imaginé yo mismo... ...pero quiero más.

 
Ilyas:

Gracias por su mensaje.
Es un rudimento, lo arreglaremos.

@Ilyas, hay un problema similar con la estructura NonPOD.

struct NonPod{
   uchar data[];
};   
   
void OnStart(){
   NonPod obj;
   
   obj = (NonPod)(obj);   // '(' - invalid cast operation	
}
 
¿Alguien sabe cómo, aparte de esperar a una nueva compilación con soporte de espacio de nombres para las clases, para evitar esta limitación:
template<typename T>
class TestTypedef{
public:
   typedef void (* callback)(T &);    // 'callback' - identifier already used
   callback eq;
};


void ff(int&) {Print(__FUNCSIG__);}

void OnStart(){  

   TestTypedef<int> int_value;
   int_value.eq = ff;
   
   int x = 5;
   int_value.eq(x);                 // Ok

   TestTypedef<string> int_value;   //Compile error 'callback' - identifier already used
}

Problema en el área de declaración del espacio de nombres global dentro de la funcionalidadtypedef

 
MT5 (build 2057)

Error de compilación en el uso repetido de la misma firma de función dentro de typedef:
typedef void (* callback_0)();     // а без этой строки все ОК
typedef void (* callback)();

void test_func(){}

void OnStart(){
   callback func_ptr = test_func;  //'test_func' - type mismatch
   func_ptr();
}
 
Sergey Dzyublik:
MT5 (build 2057)

Error con la "prohibición" de reutilizar la misma firma dentro del typedef:

Y tengoun script esencialmente similar de hace más de 2 años que da un resultado de 2056x32: EX5 loading failed

 
Sergey Dzyublik:
¿Alguien sabe cómo, aparte de esperar a una nueva compilación con soporte de espacio de nombres para las clases, para evitar esta restricción:

Compilar

void f(int&) {}
void OnStart()
{
   TestTypedef<int> int_value;
   TestTypedef<string> string_value;

es posible (e incluso funcionará), pero no más que eso: entonces, digamos, no se puede escribir

   int_value.eq = f;
}

así que no escribas cómo

 
A100:

Compilar para no escribir cómo

No, casi no funciona, pero sí...
El tipo bool se perdió en el typedef del ejemplo.

#define PRINT(x) ; Print(#x, ":", string(x))

#define  CREATE_TestTypedef(type)                              \
class TestTypedef_##type{                                     \
public:                                                       \
   typedef bool (* callback_##type)(type &);                  \
   callback_##type  eq;                                        \
}
   
bool f(int&) {return true;}


void OnStart(){
   CREATE_TestTypedef(int) int_value;
   CREATE_TestTypedef(string) string_value;                     
   
   int data = 5;
   int_value.eq = f;
   PRINT(int_value.eq(data));                    // result: true
}
 
Hasta que se publiquen las correcciones de los typedefs y las actualizaciones de los espacios de nombres, si las hay,
tendremos que declarar el uso de cada tipo por separado a través de macros, y luego utilizar macros para obtener el nombre de las clases generadas para crear el objeto de clase...
 

Explica por qué cuando creoCChartObjectLabel no estoy borrando los objetos en el indicador cuando se desinicializa en este código:

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_separate_window
#include <ChartObjects\ChartObjectsTxtControls.mqh>
CChartObjectLabel *LabelUP,*LabelDN;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   CreateLabel(LabelUP,"LabelUP",0);
   CreateLabel(LabelDN,"LabelDN",30);
/*   
   LabelUP=new CChartObjectLabel;
   LabelDN=new CChartObjectLabel;
   LabelUP.Create(0,"LabelUP",ChartWindowFind(),0,0);
   LabelUP.Color(clrYellow);
   LabelUP.FontSize(14);
   LabelUP.Description("LabelUP");
   
   LabelDN.Create(0,"LabelDN",ChartWindowFind(),0,10);
   LabelDN.Color(clrYellow);
   LabelDN.FontSize(14);
   LabelDN.Description("LabelDN");
*/
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   delete LabelUP;
   delete LabelDN;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   return(rates_total);

  }
//+------------------------------------------------------------------+
void CreateLabel(CChartObjectLabel *l,string name,int y)
  {
   l=new CChartObjectLabel;
   l.Create(0,name,ChartWindowFind(),0,y);
   l.Color(clrYellow);
   l.FontSize(14);
   l.Description(name);
  }
//+------------------------------------------------------------------+

al cambiar de TF obtengo el registro en el diario: 2019.05.23 09:49:02.044 tstlabel EURUSD,M30: quedan 2 objetos de tipo CChartObjectLabel

si se descomenta en OnInit() la creación de etiquetas de texto (CChartObjectLabel), entonces todo funcionará correctamente

Paso un puntero a la funciónCreateLabel(), perono puedoborrarlo después enOnDeinit()