Erros, bugs, perguntas - página 2741

 
Ilyas:

O depurador no MT4 não irá mudar.

Estamos a redesenhar completamente o sistema de depuração e perfilagem de código MQL. O novo sistema não é compatível com o MT4

MT4 BILD 1262 Quebra de terminal


2020.05.13 18:05:09.335 Violação de acesso escreva para 0x0335346E

2020.05.13 18:05:09.276 VR EURUSD,H4: 1 fio que sobrou

2020.05.13 18:11:11.126 Violação de acesso escrever para 0x033403B7

2020.05.13 18:37:13.585 Violação de acesso escreva para 0x03093648


Pode dizer algo sobre isso? Fiz um mini-código fonte reproduzindo o problema

 
Vladimir Pastushak:

MT 4 BILD 1262 Quebra de terminal


2020.05.13 18:05:09.335 Violação de acesso escreva para 0x0335346E

2020.05.13 18:05:09.276 VR EURUSD,H4: 1 fio que sobrou

2020.05.13 18:11:11.126 Violação de acesso escrever para 0x033403B7

2020.05.13 18:37:13.585 Violação de acesso escreva para 0x03093648


Pode dizer algo sobre isso? Fiz um mini código fonte para reproduzir o problema.

Enviem-me o código fonte através de mensagem privada e eu irei verificar.

 
Ilyas:

O depurador no MT4 não irá mudar.

Estamos a redesenhar completamente o sistema de depuração e perfilagem do código MQL, o novo sistema não é compatível com o MT4

Fixe. Pode esquecer-se de desenvolver indicadores sérios para o MT4.

Obrigado, saberemos.

 
Andrey Khatimlianskii:

Indicadores no fluxo de interface, até que sejam contados, o terminal não desenha nada. É por isso que se desliga.

Quatro não serão corrigidos, muito provavelmente.

Em cinco indicadores semelhantes funcionam, mas tudo é normal, sem congelamentos.

 
MT5 (build 2419) estava a trabalhar com o depurador, foi ao navegador durante alguns minutos, depois voltou a MT e estava completamente vazio por alguma razão:
- sem janelas, sem painéis, sem ferramentas, sem nada...

 
MT5, como desactivar programticamente a escala de preços via Ctrl + Mouse Wheel?
Faço um painel, programadamente apanho Ctrl + Roda do Rato e elementos de painel de escala.
No entanto, o mesmo evento desencadeia a escalada de preços e carrega a legenda "Waiting For Update", que se sobrepõe completamente ao painel indefinidamente.

Exemplo de código, o que é comentado é também utilizado no projecto, mas não afecta o problema acima referido:
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 um bug? a documentação diz que é legível, mas

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

há texto na tabela:

código completo em anexo

Arquivos anexados:
 
Igor Zakharov:

parece ser um bug? largura de etiqueta na documentação diz legível, mas

A largura só está disponível depois de o objecto ter sido totalmente entregue.
Também tenho lidado com este problema recentemente.

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

bugs, erros, perguntas

Sergey Dzyublik, 2020.05.12 19:32

Ao utilizar OBJ_EDIT surgiu um problema - a necessidade de definir o tamanho de OBJPROP_XSIZE e OBJPROP_YSIZE para que todo o texto coubesse nas dimensões dos objectos correspondentes.

Pergunta: como determinar os tamanhos OBJPROP_XSIZE e OBJPROP_YSIZE para caber no texto inteiro?
Considerei duas opções:
1. criar objecto OBJ_LABLE, ler as dimensões, apagar objecto OBJ_LABLE.
Não adequado porque o dimensionamento só é possível após o objecto ter sido realmente criado e não é possível quando o objecto está na fila ChartRedraw.

2. utilizando TextSetFont seguido de TextGetSize.
Não adequado, porque o resultado é radicalmente diferente dos resultados do método #1, a diferença de 2,5 - 2,9 vezes, dependendo do tamanho da fonte.
Provavelmente a razão é o monitor de 4K e 175% 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
}  


Graças aGeess pela solução.
Devo multiplicar por -10 o tamanho do shuffle quando o passar para TextSetFont.

 
Sergey Dzyublik:

A largura só está disponível após o objecto ter sido totalmente entregue.
Também tem lidado com este problema recentemente.

Obrigado! A solução está anexada.


Arquivos anexados:
 
Que bandeiras e armadilhas poderão existir se um programa MQL tiver de anexar algo ao ficheiro (RAM-drive) o tempo todo, e o outro (e outro Terminal) tiver de ler todos estes dados anexados a partir dele?