Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Twitter!
Participe de nossa página de fãs
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
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
Avalie seu funcionamento no terminal MetaTrader 5
- Visualizações:
- 1903
- Avaliação:
- Publicado:
- 2018.12.10 10:53
-
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

Acesse aos dados do OnTradeTransaction em qualquer lugar com um aplicativo

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

EA "Previous Candle Breakdown".

Define a largura do canal para o dia anterior.