Como posso fazer a saída em um gráfico em fonte monoespaçada? - página 3

 
Victor Ziborov:

Na fase de teste e otimização dos parâmetros, a saída para Comentar e a saída para Rótulo podem ser desativadas, mas quando for hora de usar o EA na vida real, a saída para Comentar e a saída para Rótulo devem ser ativadas novamente.


obrigado, cap )))))) não sabíamos

 
Victor Ziborov:

Na fase de teste e otimização dos parâmetros, a saída no Comentário e a saída no Rótulo podem ser desligadas, mas quando for hora de usar o EA na vida real, a saída no Comentário e a saída no Rótulo devem ser ligadas novamente.

Em geral, isto é feito automaticamente:

bool bIsComment = (!IsTesting() || IsVisualMode());

Em seguida, verificamos bIsComment no código se o Comentário deve ser emitido ou se algum gráfico deve ser realizado. Como resultado, não há necessidade de trocar nada manualmente.

 
Ihor Herasko:

Isto é feito automaticamente:

Em seguida, verificamos bIsComment sobre o código quando é necessário emitir Comentário ou fazer qualquer construção gráfica. Como resultado, não há necessidade de trocar nada manualmente.


Onde foi dito que você tem que fazer isso manualmente? Perdi alguma coisa?

 
Yury Kirillov:

Onde foi dito que você tem que fazer isso manualmente? Perdi alguma coisa?


Respondendo a este posto. É basicamente ambíguo lá. Mas de alguma forma parece mais como "desativar" e "habilitar" é um parâmetro de configuração que é alterado pelo usuário, dependendo de como o programa é executado. Apenas esclareceu que tal parâmetro não é necessário.

 
Artem Virskiy:

Você pode medir a largura de cada caractere emiskels (haverá vários grupos com a mesma largura). Escreva uma função que irá anexar qualquer fio com espaços até atingir uma determinada largura. Em seguida, montar comentários a partir destes substratos.

Se você fizer tal função, afixe-a em kodobase, muitos lhe agradecerão. E eu também. Eu sou preguiçoso demais para me preocupar.

Neste caso, o símbolo \x200A seria útil - largura mínima do espaço, para um ajuste exato. E substituir os espaços regulares pelo símbolo /1 - espaço amplo (afinal, o comprimento do comentário é limitado). Talvez haja outros espaços úteis, mas eu não os conheço.


Obrigado pela idéia!

 
Yury Kirillov:
O comentário é significativamente mais rápido do que as fontes gráficas.

Isso é lógico, mas não é.
E é fácil de verificar.
Aqui está um roteiro sobre MQL5 (não experimentei no MT4):

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

input uint   FontSize=12;                                   // размер шрифта
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="Соотношение времени выполнения Canvas/Comment = 0.00000";
   int H=Text.TextHeight(str);
   int W=Text.TextWidth(str);
   if(!Text.CreateBitmapLabel(0,0,"FONT",2,130,W,H,format)) Print("Error creating canvas: ",GetLastError());

   ulong t1=1,t2=1,t0;
   int i=0;
   color clr=(color)ARGB(255,255^GETRGBR(ColorScreen),255^GETRGBG(ColorScreen),255^GETRGBB(ColorScreen));
   while(!IsStopped())
     {
      t0=GetMicrosecondCount();
      Text.Erase((color)ColorScreen);
      Text.TextOut(0,0,str,clr);
      Text.Update();
      t1+=GetMicrosecondCount()-t0;
      t0=GetMicrosecondCount();
      Comment(str);
      t2+=GetMicrosecondCount()-t0;
      str="Соотношение времени выполнения Canvas/Comment = "+DoubleToString((double)t1/(double)t2,5);
      if(i==1000) {Print("Canvas - ",t1,"   Comment - ",t2); i=0; t1=1; t2=1; } else i++;
     }
   Text.Destroy();
   Comment("");

}

O teste mostra que a saída gráfica é cerca de 10% mais rápida. Mas o interessante é que mesmo que você defina o tamanho da fonte para 30 (ao invés de 12), a velocidade ainda é mais rápida. É um mistério para mim pessoalmente.

Arquivos anexados:
 
Alexey Volchanskiy:

Eu não faço desenhos animados de 60k/seg, eu apenas os coloco para fora e ok.

A lona também pode fazer desenhos animados.


Arquivos anexados:
 
Nikolai Semko:


Aqui está um roteiro sobre MQL5 (não experimentei no MT4):


Eu experimentei no MT4. O código também funciona lá.
No MT4, descobriu-se que o Comment é cerca de 5 vezes mais rápido do que seu equivalente gráfico. E acontece que Comentário() é 5-6 vezes mais lento na MT5 do que na MT4. Agora, esta é uma surpresa desagradável e estranha. Portanto, minha pergunta é para os desenvolvedores. Como assim? É claramente um bug para 5!!!

 
Nikolai Semko:

É lógico, mas não é.
E isto é fácil de verificar.
Aqui está um roteiro para a MQL5 (ainda não experimentei no MT4):

O teste mostra que a saída gráfica é cerca de 10% mais rápida. Mas o interessante é que mesmo que você defina o tamanho da fonte para 30 (ao invés de 12), a velocidade ainda é mais rápida. É um mistério para mim pessoalmente.


Estas medidas não têm nada a ver com nada. Devemos fazer loops separados de dezenas de milhares de passes para Comentário e Tela separadamente, então seremos capazes de julgar algo. E o texto a ser impresso deve mudar, por exemplo, deixar o valor do contador ser impresso.

Você não poderia refazê-lo desta maneira?

 
Alexey Volchanskiy:

Estas medidas não são nada. Devemos fazer ciclos separados de várias dezenas de milhares de passes separadamente para Comentário e Tela, então podemos julgar algo. E o texto a ser impresso deve mudar, por exemplo, deixar o valor do contador ser impresso.

Você poderia refazê-lo nesta forma?


Eu também tentei fazer loops separados e achei o resultado bastante estranho. Os mesmos resultados. Não faz nenhuma diferença se é um loop geral ou separado. Em minha amostra, o texto muda a cada vez, eu me pergunto por que não foi notado. Eu também sei sobre a otimização do compilador. ))