Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 317

 
artmedia70:
//+------------------------------------------------------------------+
//|                                                    trendyxV1.mq5 |
//+------------------------------------------------------------------+
#include <Canvas\Canvas.mqh>
CCanvas LomLine;
int KoorX[4]={100,200,350,480};
int KoorY[4]={100,150,380,150};
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   LomLine.Destroy();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   LomLine.CreateBitmapLabel("trendyx",0,0,800,800,COLOR_FORMAT_ARGB_RAW);
   LomLine.PolylineAA(KoorX,KoorY,ColorToARGB(clrRed, 155),STYLE_SOLID);
   LomLine.Update();

  }
//+------------------------------------------------------------------+

,.

 
pako:

,.

 
A EA parou de abrir posições porque "número inteiro inválido como parâmetro 9 para a função 'OrderSend'". Alguém pode explicar o que é isto? Presumivelmente, foi devido a uma actualização do terminal MT4.
 
Katerina:
A EA parou de abrir posições porque "número inteiro inválido como parâmetro 9 para a função 'OrderSend'". Alguém pode explicar o que é isto? Presumivelmente é devido à actualização do terminal MT4.
Por favor anexar o código onde a função"OrderSend" é chamada. Supostamente, o número mágico não está definido correctamente.
 
Ah, bem, eu já o consertei. Obrigado pelo seu feedback.
 
Pergunto-me se pode adicionar uma animação ao gráfico no MQl5, como um tipo que está a bater nas velas, no sinal do indicador ou apenas porque
 
aleks557:
Será que se pode adicionar uma animação ao gráfico no MQl5, como um tipo que está a bater no candelabro, no sinal indicador ou assim mesmo?
A animação terá de ser criada manualmente a partir das muitas imagens .bmp alternadas. São normalmente desenhados num kanvas a partir de uma série de pontos.
 
barabashkakvn:
A animação terá de ser criada manualmente a partir de muitas imagens .bmp sucessivas. Ou desenhar a partir de uma série de pontos em tela.

Saudações, Pequena Anã, onde está "KANVAS"? Eu sei que a animação é feita no Photoshop, mas "KANVAS"não tem sido, como é que compro ali um bilhete?

Porque o google levou-me a uma espécie de lacticínio.

 
aleks557:

Saudações, Pequena Anã, onde está "KANVAS"? Eu sei que a animação é feita no Photoshop, mas "KANVAS"não tem sido, como é que compro ali um bilhete?

Não sei, mas pesquisei no Google e encontrei uma fábrica de lacticínios.

CCanvas éuma classe para a criação de gráficos personalizados.

Exemplos de utilização, o caminho do MetaEditor: ...MQL5 Textos Exemplos de utilização

 
aleks557:
Será que pode adicionar uma animação em MQl5 a um gráfico?

Aqui está mais:

Fórum sobre comércio, sistemas comerciais automatizados e teste de estratégias comerciais

Perguntas de novatos

Renat, 2012.10.20 14:30

Sabia da dica perfeita de retrocesso nos nossos kanvases e de ligação a um objecto no ecrã?

Podemos desenhar quadros na perfeição, rapidamente e sem artefactos. Veja o exemplo do vídeo baseado na geração de sequência de fotogramas no Teste OpenCL.

Usar uma boa táctica:

  1. Criar um objecto gráfico Bitmap Label no gráfico

       string objname ="OpenCL_"+IntegerToString(ChartID());
       string resname ="::Mandelbrot_"+IntegerToString(ChartID());
    //--- creating the object for graphics display
       ObjectCreate(0,objname,OBJ_BITMAP_LABEL,0,0,0);
       ObjectSetInteger(0,objname,OBJPROP_XDISTANCE,4);
       ObjectSetInteger(0,objname,OBJPROP_YDISTANCE,26);
    

  2. Criar um recurso gráfico vazio na memória e ligá-lo a um objecto previamente criado:

    //--- create initial empty picture
       uint buf[];
    
       ArrayResize(buf,SIZE_X*SIZE_Y);
       ResourceCreate(resname,buf,SIZE_X,SIZE_Y,0,0,SIZE_X,COLOR_FORMAT_XRGB_NOALPHA);
       ObjectSetString(0,objname,OBJPROP_BMPFILE,resname);
    
    É aqui que a magia acontece. O objecto gráfico recebe uma ligação directa ao recurso gráfico. E esta encadernação é inteligente com o cache, uma vez que foi especificamente criada para paginação rápida e manipulação de backbuffer.

  3. Agora pode facilmente desenhar no seu buffer sem se preocupar com a ligação a um objecto no ecrã

    //--- рисуем что хотим в buf
    ....
    
  4. E agora é altura de mostrar este bitmap actualizado no ecrã

          //--- saving the frame in memory and drawing it
          ResourceCreate(resname,buf,SIZE_X,SIZE_Y,0,0,SIZE_X,COLOR_FORMAT_XRGB_NOALPHA);
          ChartRedraw();
    
    Para tal, "reconstruímos" o recurso (nenhuma reconstrução acontece de facto, porque todos os tamanhos são iguais), copiamos o novo bitmap para ele, e os contadores de mudança deste recurso são incrementados.

    Note-se que o objecto gráfico em si não é tocado de forma alguma, uma vez que já está associado ao recurso.

    Depois chamamos Screen Redraw via ChartRedraw que requer o desenho do objecto gráfico. Está ligado ao nosso recurso que controla utilizando o contador de alterações do bitmap. Se o contador de alterações guardado para o objecto gráfico não coincidir com o contador de alterações do recurso, o bitmap será automaticamente copiado para o objecto gráfico e visualizado de uma forma protegida. Se, no entanto, os contadores corresponderem, então a imagem é mostrada sem quaisquer alterações.

Este é um método simples de trabalho seguro (a partir do acesso simultâneo da MQL5 e do próprio sistema de renderização do terminal) e rápido com as estruturas de renderização.

É preciso experimentá-lo.
Razão: