Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
Uma classe para trabalhar com formatos de botão - biblioteca para MetaTrader 5
- Visualizações:
- 1574
- Avaliação:
- Publicado:
- 2015.04.20 14:19
- Atualizado:
- 2016.11.22 07:33
- 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:
- Identificador de janela
- Número de subjanela
- Nome do botão
- Coordenadas X
- Coordenadas Y
- Tamanho horizontal
- 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:
- Botão normal sem acionamento por pressão
- Botão acionado pelo cursor
- Botão acionado por pressão
- Botão acionado por pressão pelo cursor
- Botão desabilitado
- 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:
- Tipo de máscara usada
- Coordenadas X
- 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:
- Tipo de máscara usada
- 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
- Coordenadas X
- Coordenadas Y
- Nome da fonte
- Tamanho da fonte
- Cor do texto
- 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
O indicador mostra conjuntamente o spread em andamento e o tempo que falta para fechar a barra (candlestick).
AFL_Winner_SignalO indicador AFL_Winner_Signal mostra informação da tendência atual e sinais baseados no indicador AFL_Winner indicator.
Uma classe para um botão transparente.
Risk ManagerO 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.