Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Twitter!
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

Uma classe para trabalhar com formatos de botão - biblioteca para MetaTrader 5

Visualizações:
1574
Avaliação:
(26)
Publicado:
2015.04.20 14:19
Atualizado:
2016.11.22 07:33
img.zip (139.78 KB)
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

Esta classe foi projetada para criar botões interativos com vários estados no gráfico de preços.

Ela foi desenvolvida para uma competição organizada pela generosa TheXpert. Somos gratos.


Uma demonstação da classe CBtn


Métodos de classe

Create(long chart_id,int sub_wnd,string name,int x,int y,int dx,int dy) - cria um botão com parâmetros:

  1. Identificador de janela
  2. Número de subjanela
  3. Nome do botão
  4. Coordenadas X
  5. Coordenadas Y
  6. Tamanho horizontal
  7. Tamanho vertical

Resources(string img_up,string img_up_active="",string img_dn="",string img_dn_active="",string img_up_disable="",string img_dn_disable="",string img_mask="") - define as imagens para diferentes estados do botão:

  1. Botão normal sem acionamento por pressão
  2. Botão acionado pelo cursor
  3. Botão acionado por pressão
  4. Botão acionado por pressão pelo cursor
  5. Botão desabilitado
  6. Botão de contorno de máscara

SetUseMask(ENUM_USEMASK mask,int x=0,int y=0) - ajusta a máscara pela cor do pixel específico; a máscara é formada a partir da imagem padrão do botão sem pressão:

  1. Tipo de máscara usada
  2. Coordenadas X
  3. Coordenadas Y

SetUseMask(ENUM_USEMASK mask,uint acolor) -define a máscara pela cor; a máscara é formada a partir da imagem padrão do botão sem pressão:

  1. Tipo de máscara usada
  2. Cor

SetCorner(ENUM_BASE_CORNER corner) - define o canto do gráfico onde o botão ficará ancorado

SetAnchor(ENUM_ANCHOR_POINT anchor) - define o tipo de âncora

SetX(int x) - define a coordenada X

SetY(int y) - define a coordenada Y

SetXY(int x,int y) - método único de configuração das coordenadas X e Y

On(bool state) - define o estado do botão ("true" para pressionado, "false" para sem pressão)

Enable(bool state) - habilitar/desabilitar o botão

Paint(void) - desenhar o botão

Event(int id,long lparam,double dparam,string sparam) - os eventos são transmtidos pelo botão, todos os eventos são duplicados pela função OnChartEvent

GetX(void) - obtem a coordenada X

GetY(void) - obtem a coordenada Y

GetEnable(void) - obtem o estado habilitado/desabilitado

GetOn(void) - obtem o estado pressionado/ sem pressão

GetCorner(void) - obtem o canto do gráfico onde o botão ficará ancorado

GetAnchor(void) - obtem o tipo de âncora

AddText(int x,int y,string font_name,int font_size,color text_color,string text) - adiciona texto para o botão

  1. Coordenadas X
  2. Coordenadas Y
  3. Nome da fonte
  4. Tamanho da fonte
  5. Cor do texto
  6. Texto

Text(string text) - atualiza o texto do botão (não funciona sem chamar AddText(...)

Criando um botão

Por padrão, o botão criado tem os seguintes parâmetros:

  • Sem pressão
  • Habilitado
  • Ancorado no canto esquerdo do gráfico
  • Ancorado no canto direito do gráfico

Configurando a máscara do botão

Por padrão, o botão é criado como normal sem pressão. Pixels transparentes servem como um máscara.

  • UseMask(MASK_STANDALONE_RESOURCE) - a máscara usa uma imagem específica em Resources(). Se a imagem não for configurada, toda área (retangular) do botão será usada como área de trabalho.
  • UseMask(MASK_PIXEL,x,y) - a máscara usa a cor específica do pixel. Se a cor do pixel não coincide com a cor especificada, torna a máscara. Se não são usadas coordenadas, então usa-se as coordenadas [0,0].
  • UseMask(MASK_COLOR,color) - é usado uma cor específica para a máscara. Se a cor do pixel não coincide com a cor especificada, torna a máscara. A cor deve ser definida no formato ARGB.

Exemplo

//+------------------------------------------------------------------+
//|                                                    3dButtons.mq5 |
//|                                           Copyright 2015, fyords |
//|                           https://login.mql5.com/ru/users/fyords |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, fyords"
#property link      "https://www.mql5.com/en/users/fyords"
#property version   "1.01"
//+------------------------------------------------------------------+
//| Insert resources                                                 |
//+------------------------------------------------------------------+
#resource "img\\200_1.bmp"
#resource "img\\200_2.bmp"
#resource "img\\200_3.bmp"
#resource "img\\200_4.bmp"
#resource "img\\200_5.bmp"
#resource "img\\200_6.bmp"
//+------------------------------------------------------------------+
#include "Class.mqh"
//+------------------------------------------------------------------+
enum Adjust
  {
   UpperLeft,
   UpperRight,
   LowerLeft,
   LowerRight
  };
//+------------------------------------------------------------------+
//| Input property                                                   |
//+------------------------------------------------------------------+
input Adjust adj_corner=UpperLeft;     //Corner
//+------------------------------------------------------------------+
//| Global variables                                                 |
//+------------------------------------------------------------------+
CBtn *btn[];

int num_buttons;
//+------------------------------------------------------------------+
//| Initialization function                                          |
//+------------------------------------------------------------------+
int OnInit()
  {
   long wnd=ChartID();
   int sub_wnd=ChartWindowOnDropped();

   ArrayFree(btn);
   int n=0;
   num_buttons=0;

   for(int y=0;y<3;y++)
     {
      for(int x=0;x<3;x++)
        {
         ArrayResize(btn,n+1);
         btn[n]=new CBtn;
         btn[n].Create(wnd,sub_wnd,"3dButtons_"+(string)MathRand(),x*152+10,y*152+10,200,200);
         btn[n].Resources("img\\200_1.bmp","img\\200_2.bmp","img\\200_3.bmp","img\\200_4.bmp","img\\200_5.bmp","img\\200_6.bmp");
         btn[n].AddText(80,80,"Arial",25,clrWhite,"Button"+(string)(n+1));
         switch(adj_corner)
           {
            case UpperLeft:
               btn[n].SetAnchor(ANCHOR_LEFT_UPPER);
               btn[n].SetCorner(CORNER_LEFT_UPPER);
               break;
            case UpperRight:
               btn[n].SetAnchor(ANCHOR_RIGHT_UPPER);
               btn[n].SetCorner(CORNER_RIGHT_UPPER);
               break;
            case LowerLeft:
               btn[n].SetAnchor(ANCHOR_LEFT_LOWER);
               btn[n].SetCorner(CORNER_LEFT_LOWER);
               break;
            case LowerRight:
               btn[n].SetAnchor(ANCHOR_RIGHT_LOWER);
               btn[n].SetCorner(CORNER_RIGHT_LOWER);
               break;
           }
         btn[n].Paint();
         n++;
        }
     }
   ChartRedraw();

   num_buttons=ArraySize(btn);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function                                        |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   for(int i=0;i<num_buttons;i++) delete btn[i];
   ArrayFree(btn);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   for(int i=0;i<num_buttons;i++) btn[i].Event(id,lparam,dparam,sparam);
  }

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

Candle Time End and Spread Candle Time End and Spread

O indicador mostra conjuntamente o spread em andamento e o tempo que falta para fechar a barra (candlestick).

AFL_Winner_Signal AFL_Winner_Signal

O indicador AFL_Winner_Signal mostra informação da tendência atual e sinais baseados no indicador AFL_Winner indicator.

Class СBmpButtonTransparent Class СBmpButtonTransparent

Uma classe para um botão transparente.

Risk Manager Risk Manager

O Expert Advisor controla e limita a perda global para a conta e a perda para cada transação, Inclue um Trailing Stop para a conta.