Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Telegram!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Bibliotecas

Easy Canvas - biblioteca para MetaTrader 5

Visualizações:
1664
Avaliação:
(61)
Publicado:
2018.12.10 10:53
\MQL5\Indicators\ \MQL5\Include\Canvas\
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
A biblioteca e a classe iCanvas simplificam a escrita de programas usando o elemento Canvas.

Aqui está um exemplo de um indicador simples usando esta biblioteca.

Neste exemplo, o corpo do indicador não exerce nenhuma função para processar eventos do OnChartEvent, mas também pode estar presente.

#property indicator_chart_window
#include <Canvas\iCanvas.mqh>

int OnInit()
  {
   EventSetMillisecondTimer(33);
   ChartSetInteger(0,CHART_SHOW,true);
   ChartSetInteger(0,CHART_CROSSHAIR_TOOL,false);  // desliga o elemento tipo mira
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason) {if(reason<2) {ChartSetInteger(0,CHART_CROSSHAIR_TOOL,true); ChartRedraw();}}

void  OnTimer()
  {
   static int X=0;
   static int Y=0;
   if(X!=W.MouseX || Y!=W.MouseY)
     {
      Canvas.Erase(0);
      // Desenha um ponto embaçado
      for(int ix=-20;ix<=20;ix++) for(int iy=-20;iy<=20;iy++)
        {
         double p=sqrt(ix*ix+iy*iy)/20.0;
         if(p>1) p=1;
         uchar P=(uchar)Round((1.0-p)*255.0);
         Canvas.PixelSet(W.MouseX+ix,W.MouseY+iy,ARGB(P,100,0,200));
        }
      // Exibe o bloco de informações
      int Y1=(int)Canvas.Y(Canvas.Close(W.MouseX));
      Canvas.FillRectangle(W.MouseX,Y1,W.MouseX+140,Y1+67,0xA0808080);
      Canvas.TextOut(W.MouseX+5,Y1+2,"Close = "+DoubleToString(Canvas.Close(W.MouseX),_Digits),0xFFFFFFFF);
      Canvas.TextOut(W.MouseX+5,Y1+18,"Bar = "+DoubleToString(W.MouseBar,2),0xFFFFFFFF);
      Canvas.TextOut(W.MouseX+5,Y1+34,TimeToString(W.MouseTime,TIME_DATE|TIME_SECONDS),0xFFFFFFFF);
      Canvas.TextOut(W.MouseX+5,Y1+50,"SubWindow = "+string(W.MouseSubWin),0xFFFFFFFF);
      // miras
      Canvas.LineHorizontal(0,W.Width-1,W.MouseY,~W.Color);
      Canvas.LineVertical(W.MouseX,0,W.Height-1,~W.Color);
      int Ym=(W.MouseY>16)?(W.MouseY-16):(W.MouseY+2);
      int Xm=(W.MouseX<(W.Width-140))?(W.MouseX+4):(W.MouseX-125);
      Canvas.TextOut(W.Width-76,Ym,DoubleToString(W.MousePrice,_Digits),~W.Color);
      Canvas.TextOut(Xm,W.Height-16,TimeToString(W.MouseTime,TIME_DATE|TIME_SECONDS),~W.Color);

      Canvas.Update();
      X=W.MouseX; Y=W.MouseY;
     }
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   return(rates_total);
  }

Recursos da biblioteca:

  • Ao conectar a biblioteca, uma instância com o nome Canvas da classe iCanvas derivada da classe CCanvas é criada imediatamente.
  • O tamanho dessa instância corresponde à janela inteira, Depois, a janela e a elemento canvas são redimensionadas automaticamente (exceto para scripts).
  • Utiliza opcionalmente a função de manipulador de eventos OnChartEvent.
  • Dentro da biblioteca, há também uma instância da estrutura "Window" chamada W. Os parâmetros da janela (exceto scripts) são localizados e atualizados automaticamente dentro desta estrutura.

Estrutura da janela:

struct Window
  {
   uint              Color;       // cor de fundo da janela
   int               Width;       // largura da janela
   int               Height;      // altura da janela
   int               Left_bar;    // número da barra mais à esquerda da janela
   double            Right_bar;   // número da barra mais à direita da janela
   double            Total_bars;  // número máximo de barras na janela
   int               BarsInWind;  // número de barras visíveis na janela
   double            Y_min;       // o valor mínimo do preço na janela
   double            Y_max;       // o valor máximo do preço na janela
   double            dy_pix;      // alteração de preço para um pixel
   int               dx_pix;      // mudando o número de barras por pixel
   int               MouseX;      // coordenada X da posição atual do ponteiro do mouse
   int               MouseY;      // coordenada Y da posição atual do ponteiro do mouse
   double            MouseBar;    // a posição atual da barra do ponteiro do mouse 
   double            MousePrice;  // o preço atual do ponteiro do mouse
   datetime          MouseTime;   // a hora atual do ponteiro do mouse
   int               MouseSubWin; // número da subjanela na qual o ponteiro do mouse está localizado
   int               WindowsTotal;// subjanelas totais, incluindo a janela principal
   int               SubWin;      // subjanela atual
   datetime          time[];      // array de tempo para abertura de todas as barras visíveis na janela
  };

classe iCanvas:


class iCanvas : public CCanvas
  {
private:
   datetime          T[1];
   double            Pr[1];
   bool              FullWinCanvW; // usando a tela cheia da janela pela largura
   bool              FullWinCanvH; // usando a tela cheia da janela pela altura
public:
                     iCanvas(int Xpos=0,int Ypos=0,string Name="iCanvas",int width=0,int height=0,ENUM_COLOR_FORMAT formatCF=COLOR_FORMAT_ARGB_NORMALIZE,int subwin=-1);
                    ~iCanvas() { Destroy();};
   double            X(double bar);
   double            X(datetime Time) {return X((double)Ceil(W.Right_bar)+iBarShift(NULL,0,Time));};
   double            Y(double Price)  {return((W.Y_max-Price)/W.dy_pix); };
   double            Bar(int x)       {return((double)W.Left_bar+1-(double)x/(double)W.dx_pix);};
   datetime          TimePos(int x)   {double B=Bar(x); CopyTime(_Symbol,_Period,Floor(B),1,T); return T[0]+int((double)PeriodSeconds()*(1-B+(int)B));};
   double            Close(int x)     {CopyClose(_Symbol,_Period,int(Bar(x)),1,Pr); return Pr[0];};
   double            Open(int x)      {CopyOpen(_Symbol,_Period,int(Bar(x)),1,Pr); return Pr[0];};
   double            High(int x)      {CopyHigh(_Symbol,_Period,int(Bar(x)),1,Pr); return Pr[0];};
   double            Low(int x)       {CopyLow(_Symbol,_Period,int(Bar(x)),1,Pr); return Pr[0];};
   bool              FullWinCanvWidth()  {return FullWinCanvW;}; // usando a tela cheia da janela pela largura  
   bool              FullWinCanvHeight() {return FullWinCanvH;}; // usando a tela cheia da janela pela altura     
   ENUM_PROGRAM_TYPE ProgType;
  };

Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/22164

TradeTransactions TradeTransactions

Acesse aos dados do OnTradeTransaction em qualquer lugar com um aplicativo

Skyscraper Skyscraper

Um indicador de tendência do tipo NRTR com uma linha média adicional

Rompimento do Candle Anterior 3 Rompimento do Candle Anterior 3

EA "Previous Candle Breakdown".

Sistema de Reversão Sistema de Reversão

Define a largura do canal para o dia anterior.