Erros, bugs, perguntas - página 2081

 
Anatoli Kazharski:

Este problema aparece em todos os indicadores. Incluindo os da entrega normal. Por exemplo, a Média Móvel:

//---

E depois de vários bares serem formados:

//---

Tente reproduzi-la no seu ambiente. Preciso de ver se sou o único com este problema.


Sim, confirmo:

Terminal        MetaTrader 5 x64 build 1687 started (MetaQuotes Software Corp.)
Terminal        Windows 10 (Build 16299), x64 based PC, IE 11.00, UAC, Intel Core i3-3120 M  @ 2.50 GHz, RAM: 4473 / 8077 Mb, HDD: 330591 / 475588 Mb, GMT+02:00
Terminal        C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

animação:

Os indicadores não se deslocam

 
Comentários não relevantes para este tópico foram movidos para "BUY_LIMIT, ORDER_TIME_DAY".
 
Vladimir Karputov:

Sim, confirmo:

animação:

Obrigado. Acrescentou uma ligação à sua mensagem para a aplicação servicedesk como adenda. Necessidade de uma correcção de emergência para este bug, todo o trabalho parou.
 

fxsaber:

Ambos os terminais têm dois separadores - Comércio e Correio. Quero que o "Trading" esteja sempre activo. Mas quando chega um e-mail interno (por exemplo, preenchimento parcial) do corretor, o separador muda para "Mail".

Como posso desligar esta coisa realmente desagradável? Bem, não deve haver uma notificação tão intrusiva e, além disso, aos corretores electrónicos absolutamente normais, onde ele informa automaticamente sobre a execução da ordem dezenas de vezes num dia. Não percebo porque é que por vezes muda para "Mail" e por vezes não.

Como posso desligá-lo? Eu nunca li o separador "E-Mail", pois é Spam. Dito de forma suave, é irritante ver a GUI terminal reagir desta forma ao Spam.


Penso que posso usar o WinApi para implementar uma função para mudar para o separador desejado: comércio, equilíbrio, o que quer que seja.
Tente implementá-lo você mesmo, ou encomende-o a freelancers, espero que ainda haja pessoas competentes.

 
Sergey Dzyublik:

Penso que, utilizando o WinApi, é possível implementar uma função para mudar para o separador desejado: comércio, equilíbrio, o que quer que seja.
Tente implementá-lo você mesmo, ou encomende-o à Freelancer, espero que ainda haja lá pessoas competentes.

Eu próprio pratiquei esta perversão. Quero uma GUI de fácil utilização.

 
Aleksey Vyazmikin:

Ele está novamente fora de memória...

Apesar de ainda haver 7 gigabytes de RAM disponíveis. Que diabos é isto?

Abrir um bilhete com o Service Desk. Incluir o perito e as definições de optimização.

+ descrever o sistema operativo, taxa de bits, configuração do sistema.

 
Alexey Da:

Abrir um bilhete com o Service Desk. Anexar as definições de perito e optimização.

+ descrever o sistema operacional, taxa de bits, configuração do sistema.


Não sei como reproduzir tudo isto - na semana passada esta mensagem apareceu todos os dias, e a EA não funcionou de todo. E no outro dia com a optimização... então tudo funcionou depois de fechar todos os programas.

Pode ser um conflito entre programas? Notei que o insecto estava sempre lá quando o navegador da Ópera estava aberto.

 

Neste tópico descobri uma coisa interessante sobre o desempenho do comando Comentário() em MT4 e MT5. Em MT5 este comando corre ~2000 vezes (!!!) mais devagar do que em MT4.

Aqui está o código de teste que corre nas duas plataformas:

#property script_show_inputs
#include <Canvas\Canvas.mqh>

input uint   FontSize=12;                                   // размер шрифта
input uint   Count=1000;                                    // размерность цикла
input ENUM_COLOR_FORMAT format=COLOR_FORMAT_ARGB_NORMALIZE; //Способ обработки цвета

void OnStart()
  {
   CCanvas Text;
   ulong ColorScreen=ChartGetInteger(0,CHART_COLOR_BACKGROUND,0);

   Text.FontSet("Arial",FontSize);
   string str="Необходимо подождать.Выполняется проход цикла №: = ";
   int H=Text.TextHeight(str);
   int W=Text.TextWidth(str+"00000");
   if(!Text.CreateBitmapLabel(0,0,"FONT",2,130,W,H,format)) Print("Error creating canvas: ",GetLastError());

   ulong t1=1,t2=1,t0;
   uint j=0;
   color clr=(color)ARGB(255,255^GETRGBR(ColorScreen),255^GETRGBG(ColorScreen),255^GETRGBB(ColorScreen));
   t0=GetMicrosecondCount();
   for(j=0;j<Count;j++)
     {
      Comment(str+IntegerToString(j));
      if (IsStopped()) break;
     }
   t1=GetMicrosecondCount()-t0;

   t0=GetMicrosecondCount();
   for( j=0;j<Count;j++)
     {
      Text.Erase((color)ColorScreen);
      Text.TextOut(0,0,str+IntegerToString(j),clr);
      Text.Update();
      if (IsStopped()) break;
     }
   t2=GetMicrosecondCount()-t0;
      Text.Erase((color)ColorScreen);
      Text.TextOut(0,0,"Время Comment = "+IntegerToString(t1)+" Время Canvas = "+IntegerToString(t2),clr);
      Text.Update();
      Sleep(30000);
     
   Text.Destroy();
   Comment("");
  }
//+------------------------------------------------------------------+

Isto está bem?

Arquivos anexados:
 
Nikolai Semko:

Neste tópico descobri uma coisa interessante sobre o desempenho do comando Comentário() em MT4 e MT5. Em MT5 este comando corre ~2000 vezes (!!!) mais devagar do que em MT4.

Aqui está o código de teste que corre nas duas plataformas:

Está bem assim?

Sim, isso é correcto e correcto.

Em MT4, a função Comentar muda simplesmente a caixa de texto de comentários internos sem tentar exibi-la no gráfico. Ou seja, o comentário aparecerá em algum momento na próxima apresentação regular do gráfico, mas alterar o comentário em si não faz com que o gráfico seja redesenhado. Se alterar o comentário rapidamente, a sua alteração não será visível no gráfico.

Em MT5 a função Comentar causará explicitamente o redesenho do gráfico, porque a prioridade é dada à exibição do comentário no gráfico. Caso contrário, a função é inútil.

Essa é exactamente a diferença.


Se em MT4 colocar à força ChartRedraw() depois de chamar Comentário, o comportamento não será o mesmo que em MT5. ChartRedraw() em Metatrader 4 ignora o valor do comentário e decide por si se o gráfico deve ou não ser actualizado a partir do último quadro. Claro que, na ausência de centenas de citações por segundo que causariam uma desactivação dos dados dos gráficos, o ChartRedraw decide "porquê desenhar um gráfico inalterado" e salta o desenho do quadro.

O Metatrader 5 também tem o mesmo sistema, mas há muitos mais casos em que a renderização incondicional tem prioridade.

Os terminais são aplicações gráficas e podem fornecer centenas de quadros por segundo e funcionar em modo de exibição económica por razões de desempenho.


Daí conclusões adicionais na execução de benchmarks:

  • não se pode considerar uma chamada ChartRedraw como sendo um verdadeiro ChartRedraw

  • deve sempre saber e provar declarações "porque é que um gráfico será redesenhado" e "invalidarei o quadro interno do mercado, para que o terminal decida redesenhar o gráfico".

  • não deve fazer múltiplas conclusões em MT5 durante os pontos de referência, deve pensar sempre em como está a afectar a renderização

  • MT5 tem um sistema mais correcto de mudança de objectos no gráfico e é necessário compreender claramente as consequências da mistura de comandos de leitura/escrita
    é recomendado não misturar comandos de leitura/escrita, e fazer leitura e escrita em massa separadamente.

  • O frequente redesenho de gráficos em pontos de referência leva a uma elevada dependência dos resultados na placa gráfica.
    de facto, alguns testes podem acabar por testar a placa gráfica em vez dos algoritmos ou funções. o teste num computador portátil e num computador de secretária pode mostrar resultados várias vezes diferentes simplesmente por causa de uma placa gráfica 3-5 vezes mais lenta

Estes erros são cometidos a toda a hora por todos.

 
Renat Fatkhullin:

Sim, isso é correcto e correcto.

Muito obrigado pela resposta detalhada. Foi mais ou menos o que eu pensei. Tudo isto faz sentido.