Errores, fallos, preguntas - página 2741

 
Ilyas:

El depurador en MT4 no cambiará.

Estamos rediseñando completamente el sistema de depuración y perfilado del código MQL. El nuevo sistema no es compatible con MT4

El terminal MT4 BILD 1262 se bloquea


2020.05.13 18:05:09.335 Violación de acceso al escribir en 0x0335346E

2020.05.13 18:05:09.276 VR EURUSD,H4: 1 cadenas filtradas a la izquierda

2020.05.13 18:11:11.126 Violación de acceso al escribir en 0x033403B7

2020.05.13 18:37:13.585 Violación de acceso al escribir en 0x03093648


¿Puedes decir algo al respecto? He hecho un mini código fuente reproduciendo el problema

 
Vladimir Pastushak:

MT 4 BILD 1262 Choque de terminales


2020.05.13 18:05:09.335 Violación de acceso al escribir en 0x0335346E

2020.05.13 18:05:09.276 VR EURUSD,H4: 1 cadenas filtradas a la izquierda

2020.05.13 18:11:11.126 Violación de acceso al escribir en 0x033403B7

2020.05.13 18:37:13.585 Violación de acceso al escribir en 0x03093648


¿Puedes decir algo al respecto? Hice un mini código fuente para reproducir el problema.

Envíame el código fuente por mensaje privado y lo revisaré.

 
Ilyas:

El depurador en MT4 no cambiará.

Estamos rediseñando completamente el sistema de depuración y perfilado del código MQL, el nuevo sistema no es compatible con MT4

Genial. Puedes olvidarte de desarrollar indicadores serios para MT4.

Gracias, lo sabremos.

 
Andrey Khatimlianskii:

Los indicadores en el flujo de la interfaz, hasta que se cuentan, el terminal no dibuja nada. Por eso se cuelga.

Lo más probable es que no se corrijan cuatro.

En cinco indicadores similares funcionan, pero todo es normal, sin congelaciones.

 
MT5 (build 2419) estaba trabajando con el depurador, fue al navegador por un par de minutos, luego volvió a MT y estaba completamente vacío por alguna razón:
- sin ventanas, sin paneles, sin herramientas, sin nada...

 
MT5, ¿cómo puedo desactivar programáticamente la escala de precios mediante Ctrl + Rueda del ratón?
Hago un panel, programo la captura de Ctrl + Rueda del ratón y escalo los elementos del panel.
Sin embargo, el mismo evento desencadena el escalado de precios y carga la leyenda "Esperando actualización", que anula completamente el panel de forma indefinida.

Código de ejemplo, lo que se comenta también se utiliza en el proyecto, pero no afecta al problema descrito anteriormente:
void HideChart(long achart, color BackClr){     
   //ChartSetInteger(achart, CHART_SHOW, false);
        //ChartSetInteger(achart, CHART_SHOW_OHLC, false);
        //ChartSetInteger(achart, CHART_SHOW_BID_LINE, false);
        //ChartSetInteger(achart, CHART_SHOW_ASK_LINE, false);
        //ChartSetInteger(achart, CHART_SHOW_LAST_LINE, false);
        //ChartSetInteger(achart, CHART_SHOW_PERIOD_SEP, false);
        //ChartSetInteger(achart, CHART_SHOW_GRID, false);
        //ChartSetInteger(achart, CHART_SHOW_VOLUMES, CHART_VOLUME_HIDE);
        //ChartSetInteger(achart, CHART_SHOW_OBJECT_DESCR, false);
        //ChartSetInteger(achart, CHART_SHOW_TRADE_LEVELS, false);
        //ChartSetInteger(achart, CHART_SHOW_DATE_SCALE, false);
        //ChartSetInteger(achart, CHART_SHOW_PRICE_SCALE, false);
        //ChartSetInteger(achart, CHART_FOREGROUND, false);
        //ChartSetInteger(achart, CHART_SHIFT, false);
        //ChartSetInteger(achart, CHART_MODE, CHART_LINE);

        //ChartSetInteger(achart, CHART_SCALE, 0);
        ChartSetInteger(achart, CHART_SCALEFIX, 0);
        ChartSetInteger(achart, CHART_SCALEFIX_11 , 0);
        ChartSetInteger(achart, CHART_SCALE_PT_PER_BAR, 0);
        ChartSetInteger(achart, CHART_EVENT_OBJECT_DELETE, 0);
        ChartSetInteger(achart, CHART_EVENT_OBJECT_CREATE, 0);

   	ChartSetInteger(achart, CHART_EVENT_MOUSE_WHEEL,1); 
        ChartSetInteger(achart, CHART_EVENT_MOUSE_MOVE, 0);
        ChartSetInteger(achart, CHART_MOUSE_SCROLL, 0);
        ChartSetInteger(achart, CHART_KEYBOARD_CONTROL, 0);
        ChartSetInteger(achart, CHART_QUICK_NAVIGATION, 0);
        
        //ChartSetInteger(achart, CHART_COLOR_BACKGROUND, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_FOREGROUND, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_CHART_LINE, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_ASK, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_BID, BackClr);
        //ChartSetDouble(achart, CHART_FIXED_MAX, 1);
        //ChartSetDouble(achart, CHART_FIXED_MIN, 1);
        //ChartSetString(achart, CHART_COMMENT, "");
        //ChartSetInteger(achart, CHART_CROSSHAIR_TOOL, 0);
        //ChartSetInteger(achart, CHART_SHOW_ONE_CLICK, 0);
        //ChartSetInteger(achart, CHART_CONTEXT_MENU, 0);
        ChartRedraw(achart);
}

void OnInit() {
   HideChart(0, clrWhite);
} 
 

parece ser un error... la documentación dice que es legible, pero

Print(i," - ",ObjectGetInteger(0,name,OBJPROP_XDISTANCE)," - ",ObjectGetInteger(0,name,OBJPROP_XSIZE));

da

hay texto en el gráfico:

código completo adjunto

Archivos adjuntos:
 
Igor Zakharov:

parece ser un error... el ancho de la etiqueta en la documentación dice que es legible, pero

La anchura sólo está disponible después de que el objeto haya sido completamente renderizado.
Yo también me he enfrentado a este problema recientemente.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

fallos, errores, preguntas

Sergey Dzyublik, 2020.05.12 19:32

Al utilizar OBJ_EDIT surgió un problema: la necesidad de establecer el tamaño de OBJPROP_XSIZE y OBJPROP_YSIZE para que todo el texto cupiera en las dimensiones correspondientes del objeto.

Pregunta: ¿cómo determinar los tamaños OBJPROP_XSIZE y OBJPROP_YSIZE para que quepa todo el texto?
He considerado dos opciones:
1. Crear el objeto OBJ_LABLE, leer las cotas, borrar el objeto OBJ_LABLE.
No es adecuado porque la acotación sólo es posible después de que el objeto haya sido creado y no es posible cuando el objeto está en la cola de ChartRedraw.

2. utilizando TextSetFont seguido de TextGetSize.
No es adecuado, porque el resultado es radicalmente diferente de los resultados del método nº 1, la diferencia de 2,5 - 2,9 veces, dependiendo del tamaño de la fuente.
Probablemente la razón sea el monitor 4K y el 175% de DPI.

#define  PRINT(x) ; Print(#x, ":", string(x))
          
void SetLabel(long achart, string name, int wnd, string text, color clr, int x, int y, int corn=0, int fontsize=8, string font="Tahoma")
{
   ObjectCreate(achart, name, OBJ_LABEL, wnd, 0, 0); 
   ObjectSetInteger(achart, name, OBJPROP_CORNER, corn); 
   ObjectSetString(achart, name, OBJPROP_TEXT, text); ObjectSetInteger(achart, name, OBJPROP_COLOR, clr); 
   ObjectSetInteger(achart, name, OBJPROP_FONTSIZE, fontsize); ObjectSetString(achart, name, OBJPROP_FONT, font);
   ObjectSetInteger(achart, name, OBJPROP_SELECTABLE, false); 
   ObjectSetInteger(achart, name, OBJPROP_BORDER_TYPE, 0);
   ObjectSetInteger(achart, name, OBJPROP_XDISTANCE, x); ObjectSetInteger(achart, name, OBJPROP_YDISTANCE, y);
}

void OnStart(){     
   string obj_name = "test_obj";   
   string text = "AAAA::BBBB";
   int font_size = 7;
   string font_name = "Tahoma";
   
   SetLabel(0, obj_name, 0, text, clrWhite, 100, 100, 0, font_size, font_name);
   ChartRedraw(0);
   Sleep(1000);
   
   uint dx_fixed_0 = int(ObjectGetInteger(0, obj_name, OBJPROP_XSIZE));
   uint dy_fixed_0 = int(ObjectGetInteger(0, obj_name, OBJPROP_YSIZE));
   ObjectDelete(0, obj_name);
   
   PRINT(dx_fixed_0);
   PRINT(dy_fixed_0);
   
   
   uint dx_fixed_1;
   uint dy_fixed_1;
   TextSetFont(font_name, -10 *  font_size);
   TextGetSize(text, dx_fixed_1, dy_fixed_1);
   
   PRINT(1.0 * dx_fixed_0 / dx_fixed_1);  	// Result: 1.0
   PRINT(1.0 * dy_fixed_0 / dy_fixed_1);  	// Result: 1.0
}  


Gracias aGeess por la solución.
Debería multiplicar por -10 el tamaño de shuffle al pasarlo a TextSetFont.

 
Sergey Dzyublik:

La anchura sólo está disponible después de que el objeto esté completamente renderizado.
También he tenido este problema recientemente.

Gracias. Se adjunta la solución.


Archivos adjuntos:
 
¿Qué banderas y trampas podría haber si un programa MQL tiene que añadir algo al archivo (RAM-drive) todo el tiempo, y el otro (y otro Terminal) tiene que leer todos estos datos añadidos de ella?