Bibliotecas: Easy Canvas - página 17

 
Nikolai Semko #:
Versão mais recente 1.53

Nicholas, acabei de fazer o download da biblioteca, vou testá-la, muito interessante e obrigado! E no ZIP do kodobase ainda há a versão antiga 1.09!!!! Ainda bem que li os comentários e fiz o download diretamente. Se eu fosse você, eu definitivamente postaria sobre esse bug no tópico MT5, mql5, mql5.com, sugestões de melhorias!

MT5, mql5, mql5.com предложения по улучшению. - Сделайте реалистичные предложения по улучшению платформы MT5, языка mql5 и сайта и услуг Mql5 Com.
MT5, mql5, mql5.com предложения по улучшению. - Сделайте реалистичные предложения по улучшению платформы MT5, языка mql5 и сайта и услуг Mql5 Com.
  • 2013.06.15
  • www.mql5.com
удерживая клавишу CTRL при перетаскивании точки привязки. Модифицировать OnChartEvent для обработки нажатия на кнопку. Всплывающее окно появляется автоматически после третьего символа или вы можете вызвать его с помощью CTRL SPACE
 
Alexey Volchanskiy #:

Nicholas, acabei de fazer o download da biblioteca, vou testá-la, muito interessante e obrigado! E no ZIP do kodobase ainda há uma versão antiga 1.09!!!! Ainda bem que li os comentários e fiz o download diretamente. Se eu fosse você, eu definitivamente postaria sobre esse bug excepcional no tópico MT5, mql5, mql5.com, sugestões de melhoria!

Obrigado, Alexey!
Eu já escrevi há mais de 4 anos.

 
Nicholas, é possível usar sua biblioteca para desenhar "retângulos" que mudam dinamicamente, vinculados a velas, para substituir os objetos atualmente usados do tipo OBJ_RECTANGLE. É necessário exibir a sobreposição de retângulos (ou seja, a presença de transparência) de uma forma visualmente bonita.
Talvez haja um exemplo desse uso?
 
Peter Vorobyev OBJ_RECTANGLE. É necessário exibir a sobreposição de retângulos (ou seja, a presença de transparência) de uma forma visualmente bonita.
Talvez haja um exemplo desse uso?

Claro que sim, mas isso depende do caso.
Se não houver muitos retângulos (~<1000) e eles não precisarem ser redimensionados com frequência, você pode usar o CCanvas padrão. Nesse caso, cada retângulo é uma tela separada vinculada às coordenadas de preço e tempo. Será necessário cuidar da "limpeza" para que os objetos não se multipliquem de forma incontrolável.
Se houver muitos objetos e eles mudarem suas propriedades com frequência, será mais fácil usar essa biblioteca.
Nesse caso, você cria uma matriz de estruturas - retângulos virtuais com as propriedades necessárias - e as exibe no gráfico visível na ocorrência do evento de alteração do gráfico ou no evento de alteração de quaisquer propriedades.
Essa é a variante mais produtiva, e o objeto de kanvas (bitmap) aqui será um, estendido em toda a tela. Porém, nessa variante, haverá um pequeno atraso nos objetos gráficos do gráfico durante a rolagem vertical e horizontal.


Um exemplo adequado, talvez, pode ser retirado da mesma biblioteca Test_iCanvas.mq5. Nesse exemplo, há um retângulo semitransparente com texto vinculado a barras. Se quiser que os retângulos semitransparentes misturem as cores quando sobrepostos, você precisará de uma função para esse retângulo. Se precisar, posso ajudá-lo a fazer isso rapidamente ou você mesmo pode fazê-lo, usando a função da classe LineDA do iCanvas, LineHorizontalA é melhor.

ZY não, o exemplo Test_iCanvas.mq5 não é muito adequado, porque implementei tudo de forma errada por meio de um timer. Preciso reescrever esse exemplo. Foi uma solução idiota que me confundiu.
Bem, dê uma olhada em mais exemplos aqui e aqui. Mas nesses exemplos não há vinculação ao preço por tempo. Para isso, você precisa usar as funções X e Y para converter as coordenadas de preço-tempo em coordenadas XY.
 
Obrigado pela resposta detalhada.
. Você está planejando implementar em sua biblioteca um objeto - retângulo - que permita desenhar um retângulo (criar/mover/modificar) com propriedades especificadas, como um objeto gráfico comum?
 
Peter Vorobyev desenhar um retângulo (criar/mover/modificar) com propriedades especificadas como um objeto gráfico comum?

Não está muito claro o que você quer dizer.

Há diferentes funções para desenhar retângulos. Basta criar, mover e modificar.

Sim, você pode criar qualquer objeto como uma estrutura ou uma classe em seu código de terceiros, no qual você pode escrever um método de saída para a tela usando essa classe iCanvas ou CCanvas, mas não faz sentido fazer todas as variações possíveis de implementações dentro da biblioteca de gráficos. Apenas as primitivas são importantes. Eu, é claro, tenho minha própria função estendida dessa biblioteca. Ela é muitas vezes maior do que esta, mas ninguém a entenderá além de mim. Eu a escrevi para mim mesmo.

 
Nikolai Semko #:

Não tenho certeza do que você quer dizer.

Há diferentes funções para desenhar retângulos. É suficiente criar, mover e modificar.

Sim, você pode criar qualquer objeto como uma estrutura ou uma classe em seu código de terceiros, no qual pode escrever um método de saída para a tela usando essa classe iCanvas ou CCanvas, mas não faz sentido criar todas as variações possíveis de implementações dentro da biblioteca de gráficos. Apenas as primitivas são importantes. Eu, é claro, tenho minha própria função estendida dessa biblioteca. Ela é muitas vezes maior do que esta, mas ninguém a entenderá além de mim. Eu a escrevi para mim mesmo.

Obrigado, eu entendo. Depois que eu me familiarizar com a biblioteca em mais detalhes e se houver uma pergunta específica, eu perguntarei.

 
Peter Vorobyev #:

Obrigado, eu entendo. Depois, vou me familiarizar com a biblioteca mais detalhadamente e, se houver uma pergunta específica, eu a farei.

Aqui está um exemplo de EA adequado para você:

#include <Canvas\iCanvas_CB.mqh> //https://www.mql5.com/pt/code/22164

//+------------------------------------------------------------------+
int OnInit() {
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {}
//+------------------------------------------------------------------+
void OnTick() {
   Draw();
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam) {
   if (id == CHARTEVENT_CHART_CHANGE || id == CHARTEVENT_MOUSE_MOVE) Draw();
}
//+------------------------------------------------------------------+
void Draw() {
   static uint last = 0;         //
   uint cur = GetTickCount();    // Necessário para otimização do desempenho
   if (cur-last<25) return;      // Especialmente importante para o testador
   last = cur;                   //
   if (Canvas.tester) ChartChanged();   // para a operação correta no testador.
   Canvas.Erase(0x00FFFFFF);   // essa máscara é necessária para a saída correta da fonte
   Canvas.CurentFont("Calibri Light", 16,16,0xFF000000);
   for (int shift = -1000; shift<=1000; shift+=50 ) {
      uint clr = (Canvas.Grad((shift+1000.0)/2000.0) & 0x00FFFFFF)|0x40000000;
      int bar = Round(Canvas.Bar(double(_MouseX+shift)));
      double price  = iHigh(_Symbol,PERIOD_CURRENT,bar);
      int x = int(Canvas.X(double(bar)));
      int y = (int)_Y(price);
      Canvas.FillRectangleA(x,y,x+150,y-60,clr);
      
      _CommXY(x+5,y-55,"high = "+DoubleToString(price,_Digits));
      _Comment("bar = "+(string)bar);
      _Comment("time = " + TimeToString(iTime(_Symbol,PERIOD_CURRENT,bar))); 
   }
   Canvas.Update();
}


A versão 1.54 do iCanvas é necessária para funcionar.

Arquivos anexados:
 
Nikolai Semko #:

A versão 1.54 do iCanvas é necessária para a operação

Nikolai Semko #:
Versão mais recente 1.53

Também estou interessado.

 
Edgar Akhmadeev #:

Eu estava me perguntando a mesma coisa.

Já atualizado e anexado na postagem anterior