You are on page 1of 41
sain12019 Nari} Emer hitps:iwwn.malS.comiptartcies!62 x de Controle Avo no MALS para NegocarSo- Argos MALS ABRA UMA CONTA REAL MAs DIRETAMENTE NA PLATAFORMA METATRADER 5 — EXPERT ADVISORS CRIANDO PAINEIS DE CONTROLE ATIVO NO MQL5 PARA NEGOCIACAO 9 janeiro 2014, 13:59 0 2744 EBrEHMiA Introdugao A eficiéncia é bastante essencial em um ambiente de trabalho, especialmente no trabalho de negociadores onde a rapidez € a preciso desempenham um importante papel. Enquanto preparam o terminal para o trabalho, cada um torna seu local de trabalho o mais confortavel possivel para si de modo a realizar as andlises e entrar no mercado assim que possivel. Mas a reatidade da questao 6 que os desenvolvedores nem sempre podem agradar a todos e é impossivel ajustar certas fungdes de acordo com o desejo de cada um. Por exemplo, para um escalpelador (pessoa que faz pequenas transacdes na bolsa), cada fracdo de segundo e cada aperto na tecla "Novo Pedido” importante e a configuracao seguinte de todos os pardmetros pode ser decisiva quanto ao tempo. Entao como encontramos uma solugéo? A solucéo esta na Personalizacéo dos elementos jé que o MetaTrader 5 oferece Componentes téo fabulosos como 0 "Botao”, 0 “Editar” e 0 "Rétulo”. Vamos fazer isso. 2. Opgées do painel Em primeiro lugar, vamos decidir que tipo de funges séo essenciais para um painel. Colocaremos a énfase principal nos negécios Utilizando 0 painel, e, portanto, incluiremos as seguintes funcées: Posicéo de abertura Colocagao de um pedido pendente Modificacao da posicao/pedido Fechamento da posicao Exclusao de um pedido pendente ‘Além disso, nenhum prejuizo seré causado ao adicionar a capacidade de personalizar 0 painel do esquema de cores, tamanhos de fonte e configuracdes para salvar. Vamos dar uma descricao mais detalhada de todos os elementos do futuro painel. ‘Vamos especificar 0 nome do objeto, seu tipo e a descrigao do seu objetivo para cada uma das funcées do painel. 0 nome de cada vat sait12019 hitps:twwn-malS.convptartclesi62 Criando Painéis de Controle Avo no MQLS para Negociagao - Artigas MALS objeto comecara com “ActP” - isto ser& um tipo de legenda indicando que 0 objeto pertence ao painel. 2,1. Posigdes abertas Abaixo vamos apresentar todos os parametros necessarios para a abertura da posicao e iremos executa-los clicando em um botao. As linhas auxiliares ‘as quais sao ativadas ao marcar uma caixa, irdo os auxiliar na configuracao dos niveis Stop Loss e Take Profit. A escolha do tipo de execucao sera feita utilizando os botées de selegao. Nome Tipo Descrigao lActP_buy_buttont —[Botdo _—([B2tae para um negocio de compra jo _[Botdo para um negacio de JActP_sett_button? _Botao(POt2 [Ajustar/reajustar o sinalizador \das linhas auxiliares. IGrupo de botées de selecao lpara selecionar o tipo de Inegécio (Campo de |Campo para insercao de um lentrada__|Stop Loss (Campo de [Campo para insercao de um lentrada__ [Take Profit [Campo de [Campo para inserir a lentrada__|quantidade [Campo de [Campo para inserir um desvio lentrada__|toleravel durante a abertura Icampo de lentrada [Campo de [Arquivado para inserir lentrada__|comentarios |ActP_DealLines_check1|Sinalizador| IBotao de |ActP_Exe_radiot selecao lActP_sL_editt |ActP_TP_edit1 |ActP_Lots_edit1 |ActP_dev_edit1 lActP_mag_editt [campo para inserir um némero |ActP_comm_edit1 ‘Tabela 1 Lista dos elementos do painel, “Abertura de negociacao" 2.2 Colocando um pedido pendente Abaixo vamos apresentar todos os parametros necessarios para a colocacao de um pedido pendente e colocé-los clicando em um botao. Linhas de apoio, as quais sao ativadas marcando um sinalizador, ajudarao a ajustar 0 Stop Loss, 0 Take Profit, os niveis de ordem de limite e tempos de validade. A selegao do tipo de execucao e do tipo de tempo de validade serao feitos com 0 auxilio de uns grupos de boties de selecdo Nome Tipo Descri¢ao [Botao para configurar um Ipedido de compra IBotao para configurar um Ipedido de negécio Js linhas auxiliares lActP_DealLines_check2|Sinalizador|ajustam/reajustam 0 Isinalizador ISinalizador de ajuste/reajuste Ide ordem de parada-limite [Grupo de botées de selecao lActP_buy_button2 —_[Botao |ActP_sell_button2 —_—|Botao |ActP_lim_check2 ISinalizador| |ActP_Exe_radio2 JBotao de | ara selecionar o tipo de elecéo ‘ 7 lexecucao do pedido ota de [Grupo de botoes de selecao lActP_exp_radio2 ° de para selecionar o tipo de elecéo \validade de pedido ian sait12019 hitps:twwn-malS.convptartclesi62 Criando Painéis de Controle Avo no MQLS para Negociagao - Aligas MALS |ActP_st_edit2 [campo de |Campo para insercéo de um lentrada__|Stop Loss ‘Campo de |Campo para insercao de um lentrada__|Take Profit [Campo de [Campo para inserir a lentrada__|quantidade [Campo de [Campo para inserir 0 prego de lentrada__|um pedido de ordem de limite [Campo de [Campo para inserir o numero lentrada__|magico Icampo de lentrada [Campo de [Campo para inserir 0 tempo de lentrada__|validade [Campo de [Campo para inserir 0 prego da lentrada__|execucao do pedido lActP_TP_edit2 |ActP_Lots_edit2. |ActP_timpr_edit2 |ActP_mag_edit2 lActP_comm_edit2 |campo para comentarios lActP_exp_edit2 |ActP_Pr_edit2 “Tabela 2 Lista dos elementos do painel "Colocando ordens pendentes’ 2,3. Modificagao / fechamento de negécios ‘Abaixo apresentamos todos os parametros necessarios para a modificagao e 0 fechamento de um negécio. As linhas auxiliares as quais sao ativadas ao marcar uma caixa, iro nos auxiliar na instalagao dos niveis Stop Loss e Take Profit. A seleco de negécios sera gerada de uma lista suspensa. Nome Tipo Descricao [act ord buttons [sta __|Lista de selecoes para um ore Isuspensa_|negécio IBotao de modificagao do Inegécio [Botéo de fechamento do Inegécio \Linhas auxitiares |ActP_DealLines_check4|Sinalizador|ajustam/reajustam o Isinalizador. (Campo de [Campo para insercao de um lentrada__|Stop Loss (Campo de |Campo para insercao de um lentrada__|Take Profit [Campo de [Campo para inserir a lentrada__|quantidade (Campo de [Campo para inserir um desvio lentrada__|toleravel [Campo de |Campo para mostrar o numero lentrada__|magico (somente leitura) [Campo de [Campo para mostrar 0 preco de lentrada [entrada (somente leitura) |ActP_mod_button4 —_|Botao lActP_del_button4 —[Botao |ActP_SL_edita lActP_TP_edit4 |ActP_Lots_edit4 |ActP_dev_edit4 lActP_mag_edit4 |ActP_Pr_edita Tabela 3. Lista dos elementos do painet ‘Mocificag30 do negéclo / fechamento" 2,4. Modificacao / exclusio de pedidos Abaixo apresentamos todos os pardmetros necessarios para a modificacao e a exclusao de pedidos pendentes. Linhas de apoio, que sao ativadas marcando um sinalizador, ajudarao na instalacao de stops, takes, niveis de ordem de limite e tempos de validade. A selecao do tipo do tempo de validade sera gerada com 0 auxilio de Uns grupos de botées de selecao. A selecao de pedidos ser gerada de uma lista suspensa, Nome: Tipo. Descricao 3101 sait12019 hitps:twwn-malS.convptartclesi62 Criando Painéis de Controle Avo no MQLS para Negociagao - Aligas MALS lActP_ord_button5 lista —_|ista para selecionar o pedido Isuspensa 5 [Botéo de modificagao do JActP_mod_button3[Botao do lActP_del_button3 _|Botao _[Botao de exclusao do pedido \Linhas auxiliares |ActP_DealLines_check3|Sinalizador|ajustam/reajustam 0 Isinalizador. IGrupo de botées de selecao Ipara selecionar o tipo de lvalidade de um pedido (Campo de [Campo para insercao de um lentrada__|Stop Loss (Campo de |Campo para insercao de um lentrada_|take [Campo de |Campo que mostra o volume lentrada__|(somente leitura) [Campo de [Campo para inserir 0 prego de lentrada__|um pedido de ordem de limite. (Campo de [Campo que mostra nimeros lentrada__|magicos (somente leitura) [campo de lentrada (Campo de [Campo para inserir o tempo de lentrada__|validade [Campo de [Campo para inserir 0 prego da lentrada__lexecucao do pedido [Campo de [Campo que mostra o tiquete do lentrada__[pedido (somente leitura) IBotao de |ActP_exp_radio3 ° Iselecao |ActP_SL_edit3 |ActP_TP_edit3 |ActP_Lots_edit3 |ActP_timpr_edit3 lActP_mag_edit3 |ActP_comm_edit3 [Campo para comentarios lActP_exp_edit3 lActP_Pr_edit3 |ActP_ticket_edit3 Tabela 4. Lista dos elementos do painel "Modificagdo / excluséo de pedidos 2.5 Configuracées Abaixo iremos escolher a cor dos botées, rétulos e textos da lista suspensa além de montar varios tamanhos de fonte. Nome Tipo Descrigéo sta Lista de selecoes de cor para os JActP_colt_button6|si5 5, potaes lActP_col2_button6|-'st@ Lista de selecdo de cor para abas uspensa |ActP_col3_buttons|t'st@ Lista de selecao de cor de texto £013 t suspensa s [Campo de |Campo para especificar 0 [ActPfentedité Jentrada___ftamanho do texto Tabela 5. Lista de elementos do painel de “Configuracées’ Um botéo também é adicionado para criar a possibilidade de minimizagéo do painel se 0 mesmo nao estiver sendo usado. Vocé pode ter notado a presenca de um tal instrumento chamado “linhas de apoio". 0 que sao elas e porque precisamos deltas? Por meio da utilizacdo dessas linhas, seremos capazes de montar um Stop Loss, um Take Profit, 0 prego de acionamento de um pedido pendente, 0 preco de um pedido de ordem de limite (linhas horizontais), além do tempo de validade de um pedido adiado (linha vertical), bastando apenas usar o mouse para arrastar estas linhas para preco/tempo desejados. Afinal, uma instalacéo visual ¢ mais conveniente do que uma textual (manualmente inserindo precos / tempo dentro do campo apropriado) Além disso, estas linhas nos servirao como "destaques’ aia sait12019 Criando Painéis de Controle Avo no MQLS para Negociagao - Artigas MALS do parametro de um pedido selecionado. J& que podem haver varios pedidos, as linhas sombreadas do terminal padrao, que geralmente mostram precos, podem se tornar muito confusas. 3. A abordagem geral para a criacao da interface Entao apresentamos nosso objetivo com sucesso - criar uma forma de assistente grafico dentro dos negécios. Para esse objetivo, precisamos da interface mais amigavel. Em primeiro lugar, deve ficar claro que todos os elementos de controle (e haveréo muitos) deverao ser criados utilizando software, e portanto a posicao e tamanho dos objetos precisam ser pré-calculadas. Agora, imagine que passamos por um periodo longo, tedioso e dificil calculando as coordenadas dos objetos, certificando que eles nao iriam se sobrepér uns aos outros e que fossem claramente visiveis, € entéo surge a necessidade de acrescentar um novo objeto, e todo 0 nosso plano precisa agora ser reconstruido! ‘Aqueles familiarizados com o ambiente do Rapid Application Development (Delphi, C + + Builder, etc.) saber com que rapidez a interface do usuario mais complicada pode ser criada, Vamos tentar implementé-la usando 0 MQL5. Em primeiro lugar, utilizando um mouse, localizamos os objetos de controle da maneira mais apropriada e ajustamos seus tamanhos. Depois, escrevemos um simples script que I as propriedades de todos os objetos no grafico e os grava em um arquivo e, quando necessario, seremos facilmente capazes de recuperar aquelas propriedades reconstruir completamente os objetos em qualquer grafico. 0 cédigo do script pode se parecer com este: uv Component prope! iy Copyright 2010, Metaguote, us hte V+ ¥property copyright "Copyright 2010, MetaQuotes soft| tproperty link “hetp://www.mql5.com" Yproperty version "1.00" gproperty script_show inputs input int interfacelD=1; //input parameter - “Vs //| Script program start funct “ void Onstart () ‘ “us //open file for writing Ant handle=Fileopen ("active Panel scheme "+Intege| if (handle! -INVALID_HANDLE) ‘ Je wil 211 the objec for(int i-0;icobjecteTotal (0) i++) ‘ string name-objectName(0,i)7 //And weite their properties in t Filelritestring (handle, name, 100) ; Fileifriternteger (nandle, ObjectGetInteger (0, 5 on the chart e file FilewriteTnteger (handle, ObjectGetInteger (0, FileWziteintegez (handle, ObjectGet integer (0, FileWritetnteger (handle, Ob jectGetTnteger (0, FileWriternteger (nandle, ObjectGetInteger (0, hitps:twwn-malS.convptartclesi62 sia sait12019 hitps:iwwn.malS.comiptartcies!62 Criando Painéis de Controle Avo no MQLS para Negociagao - Aligos MALS PileWriternteger (nandle, ObjectGetInteger (0, FileWritetnteger (handle, ObjectGet Integer (0, Filewritetnteger (handle, ObjectGet Integer (0, FileWziterntegez (handle, ObjectGetInteger (0, Filewritetnteger (handle, ObjectGetInteger (0, FileWriteinteger (handle, bjectGetinteger (0, FileWritetnteger (handle, ObjectGet Integer (0, FilewriteTnteger(nandle, ObjectGetInteger (0, FileWziterntegez (nandle, OhjectGetInteger (0, Fileliritetnteger (handle, ObjectGet Integer (0, FileWritestring (handle, ObjectGetString (0, nal FileWriteString (handle, ObjectGetString (0, na FileWriteString (handle, db jectGetString (0, na Filolritestring (handle, dbjectGetstring (0, na FilelriteDouble (handle, db jectGetDouble (0, nal > /{Close file FileClose (handie) + Alert ("Done!"); Como vocé pode ver, 0 cédigo € extremamente simples, ele escreve a um arquivo binario algumas propriedades de todos os objetos do grafico. O ponto mais importante € nao esquecer a ordem da sequéncia das propriedades gravadas ao ler 0 arquivo. © script esta pronto, entdo vamos nos voltar para a criagao da interface. E a primeira coisa que faremos é organizar 0 menu principal pelo tipo de suas abas. Por que precisamos de abas? Porque existem varios objetos e fazé-los caber na tela seria problematico. E j4 que 05 objetos sao agrupados de acordo (veja tabela acima), ¢ mais facil colocar cada grupo em uma aba separada. Assim, utilizando o menu do terminal Inserir -> Objetos -> Botdo, criaremos cinco botdes no topo do grafico que servirao como nosso menu principal. woaryicose | “Setiios tive Fig. 1 Abas do painel Nao esquecamos que objetos podem ser facilmente duplicados ao selecionar um deles e entao arrasté-lo com o mouse enquanto pressionamos a tecla "Ctrl", Ao fazer isso, criaremos uma cépia do objeto ao invés de realocar o original. Deve ser dada uma atencao especial aos nomes dos objetos, sem esquecer que todos devem comecar com "ActP". Além disso, adicionamos “principal” ao nome da cadeia o que indica que o objeto pertence a barra do menu principal. eat sait12019 hitps:iwwn.malS.comiptartcies!62 Criando Painéis de Controle Avo no MQLS para Negociagao - Artigas MALS: enon Figura 2, Lista de objetos (abas do painel) De modo semethante, vamos aplicar os contetidos da aba a0 novo grafico. Os contetidos de cada aba devem ser colocados em um grafico separado! ‘Aba “Mercado” Magic Deviation Alortions @ Volume Comment Cancel Q stop [0.00000 Take [0,00000, Auwiayy tines | (ssi Figura 3. Elementos da aba “Mercado! ‘Aba "Pendente’ wc [_] pm [Marte @ ae @ ew oo | we S mars ee tint Ora pice [— Figura 4. Elementos da aba “Pendente’ ‘Aba de configuracées: ears a a Figura 5. Elementos da aba “Configuragées A Ultima aba "Modificar / fechar é diferente, serviré para nodificar / apagar pedidos pendentes, além de modificar e fechar transagdes de negécios. Sera sensato dividir o trabalho com negécios e o trabalho com pedidos em duas sub abas separadas. Em primeiro lugar, vamos criar um botéo o qual vai ativar a lista suspensa da qual escolheremos um pedido ou um negécio para trabatharmos. Selectan order —> Figura6. Elementos da aba "Nadificar/Fechar” Posteriormente criamos as sub abas. Para trabalhar com negécios: mat sait12019 hitps:twwn-malS.convptartclesi62 Criando Painéis de Controle Avo no MQLS para Negociagao - Aligos MALS Volume [ Magic Price Stop Take Daxiation Mesity Close Auwiioryines Figura 7. Elementos para trabalhar com posicées. E para trabalhar com pedido: sep [7] te =e Specie © wig | at cnet [] Figura 8, Sub aba para trabathar com pedidos Concluido, a interface esta criada Apticamos o script a cada um dos graficos para salvar cada aba em um arquivo separado. O pardmetro de entrada “interfacelD'deve ser diferente para cada aba: = 0+ Pagina inicial = 1-Mercado = 2-Pendente = 3 - Botao para ativacao da lista de selecdo de negocio / pedido = 4-Configuracdes = 6 - Sub aba para trabalhar com negécios = 7 Sub aba para trabalhar com pedidos ‘A aba de niimero 5 corresponde ao botdo "Minimizar janela” no menu principal, entao nao existem objetos nele e podemos pula-lo. Apés todas essas manipulagdes, os seguintes arquivos apareceréo nna pasta do diretério do terminal > MQLS ->: Nerne Dete modified Tyee See Li Active Panel scheme nin S/19701022 AMIN Fie ore Active Panel scheme bin 5/19201N324AM BIN File nike Active Panel here Zin 1g/2M10 27 AM NF sk Di Actve PaneLicherne-3bin — 5/19201032aM BIN File 2K Active Panel icherne Abin S/I920N033 AM BIN File a ‘Active Panel seherne Bin S/LI/UOIU FAM IN File none ‘Active Panel seherne D.bin 5/19/2005 AM File ake Figura 9. Lista de arquivos com esquemas dos painéis 4. Baixando elementos da interface ‘Agora os elementos da interface estao armazenados ¢ estéo prontos para serem colocados para funcionar. Para iniciar, vamos determinar 0 local onde nosso painel ficara localizado. Se o colocarmos diretamente no grafico principal, ele bloquearé o grafico de precos, o que é muito inoportuno. Portanto, seré mais sensato colocar 0 painel na sub janela do grafico principal. Um indicador pode criar este painel. tproperty copyright "Copyright 2010, Metaguotes Soft| Yproperty link “nttp://www.mql5.com™ iat sait12019 hitps:iwwn.malS.comiptartcies!62 Criando Painéis de Controle Avo no MQLS para Negociagao - Artigas MALS Yproperty version "1.00" gproperty indicator separate window //place the indi| int ontait() ‘ {/--- indicator buffers mapping (/Set the short name of the indicator IndicatorSetString (INDICATOR SHORTNAME, "AP"); “ return (0); d int OnCalculate(const int rates_total, const int prev_Galculated, const datetime’ time(], const doubles opent], const doubles high{], const double& low!], const doubles closell, const longé tick_volume[], const longa volume], const inté spread[]} return value of prev_calculated for next call return(rates total); 0 cédigo ¢ muito simples porque a funcao principal deste indicador 6 a criacao de sub janelas, ao invés de realizar varios célculos. A Unica coisa que faremos sera instalar um nome "curto” do indicador pelo qual podemos encontrar sua sub janela. Vamos compilar e aplicar um grafico para o indicador, e uma janela aparecera. ‘Agora, vamos focar no painel do Consultor Especialista. Vamos criar um novo Consultor Especialista. ‘A funcao Oninit () vai conter os seguintes operadores: double Bid, Ask; /{variables for current pric datetime time current; //time of last tick : //index of the window with al alse; //flag indicating whether it] //\ Sxpert initialization function us int onInitQ) ‘ “us f/Start the timer at intervals of 1 second EventSetTimer (1 //Get the latest prices get peices (); /{Detine the window with an indicator wnd=ChartWwindowbind (0, "22")¢ //1f the first initialization - create interface if(!last_loaded) create_interface ( return (0)s ) ee > ‘Aqui inicializamos um temporizador (0 porqué de se fazer isso sera explicado abaixo), obtemos os precos mais recentes do mercado, utilizando o ChartWindowFind, localizamos a janela do indicador € © salvamos como varavel. Sinalizador last_loaded - indica se é ou 9101 sait12019 hitps:iwwn.malS.comiptartcies!62 Criando Painéis de Controle Avo no MQLS para Negociagao - Artigas MALS nao a primeira vez na qual o Consultor Especialista é inicializado. Esta informacao sera necessaria de modo a evitar o recarregamento da interface durante a reinicializacao. ‘A fungao create_interface () se apresenta da seguinte forma: is //| Function of the interface creation + void ereate interface () ‘ //if reset settings is selected Lf (Reset_Expert_Settings) ‘ /fReset GlobalVariableDel ("Act?_buttons color"); GlobalVariableDel ("Act label_coloz"); GlobalVariableDel ("Act?_text_coler")# GlobalVariableDel ("Act?_font_size"); 1 //Create the main menu interface ApplyScheme (0) ; /iCreate the interface tab "Market" ApplySeheme (1) ; //Set all objects as unmarked Objects _Selectable("ActP", false); //redraw the chart ChartRedraw()7 aT > 0 primeiro passo é verificar o parémetro de entrada "configuracdes de reajuste’ e, se estiver instalado, apague as varidveis globais Fesponsaveis pelas configuracées. Como esta aco afeta o painel sera descrito abaixo. Além disso, a fungéo ApplyScheme () criara uma interface de um arquivo. Me //| The function for the interface leading //\ ID ~ TD of the saved interface i+ bool ApplyScheme(int ID) ‘ string fname="Active_Panel_scheme_custom_"+Intege| /idownload the standard scheme if there isn't sav| Af(!FileIsPxist (fname)) fname="Active Panel_scher /fopen file for reading int handle=PileOpen (fname, PILE_READ|FTLE_BIN); //£ile opened if (handle !=2NVALTD_HANDLE) ‘ //toading all objects while (1 1eIsEnding (nandle) ) ‘ string obj_name=FileReadString (handle, 100): int _wnd=wnd; //the auxiliary lines are in the main windo if (StringPind (obj_name,"1ine")>=0) _wnd=0; ENUM_OBJECT ob3_type=FileReadInteger (handle| J/creating object objectCreate (0, obj_name, obj_type, _wnd, 0) //and apply the properties ObjectSet Integer (0, obj_name, OSJPROP_XDISTAN} objectSet Integer (0, obj_name, O3JPROP_YDISTAN ObjectSet Integer (0, obj_name, OSJPROP_XSIZE, F) objectSet Integer (0, obj_name, O3JPRO?_YSIZE, Object Set Integer (0, obj name, O3JPROP_COLOR, F) 01a sait12019 hitps:iwwn.malS.comiptartcies!62 Criando Painéis de Controle Avo no MQLS para Negociagao - Artigas MALS ObjectSet Integer (0, obj_name, OBJPROP_ //8et color for the objects if (Globalvari, //Set global variable font size if (obj_name ) //Close file FileClose (handie) + return (true); } return (false) ; > objectSet Integer (0, obj_name, OSJPRO?_STYLE, Object Set Integer (0, cbj_name, OBJPROP_WIDTH, F| ObjectSet Integer (0, obj_name, O8JPROP_BACK, Fi] objectSet Integer (0, obj_name, O3JPROP_ SELECTS) SELECT: objectSet Integer (0, obj_name, OSJPRO2_READON) ObjectSet Integer (9, cbj_name, OBJPROP_FONTST2| ObjectSet Integer (0, obj_name, OBJPROP_STATE, F) objectSet Integer (0, obj_name, O3JPRO?_BGCOLO! objectSetString (0, obj_name, OBJPROP_TEXT, Fill ObjectsetString(0,ob}_name, OBJPROP_FONT, Fill ObjectSetString (0, obj_name, OBJPROP_BMPFTLE, | objectSetstring (0, ob}_name, OBJPROP_BMPFILE, ObjectSetDouble (0, obj_name, OBJPROP_PRICE, Fi) if(GlobalVariablecheck("ActP_buttens_color"| ObjectSet Integer (0, obj_name, OBJPROP_BGCO| eCheck ("AEtP_label_color") Objectset Integer (0, ob}_name, OBJPROP_COLO| if (Global VariableCheck ("ActP_text_color") objectSet Integer (0, ob}_namte, OBJPROP_COLO) if (Globalvariablecheck ("ActP_font_size™) 4 ObjectSet Integer (0, obj_name, OBJPROP_FONT) "ActP_font_edit6" && GlobalVar| objectSetstring (0, obj_name, OBJPROP_TEXT, 4 ‘Mais uma vez, nao ha nada complicado sobre isso. A funco abrira 0 arquivo desejado com um esquema de interface pré-salva e 0 criara na janela a qual identificamos previamente (janela do indicador).. Além disso, selecionamos as cores dos objetos e os tamanhos das fontes das variaveis globais do terminal. ‘A fungao Objects Selectable () torna todos os objetos, exceto as linhas’ auxiliares, desmarcados de modo a ligar a animacao dos botées e evitar a exclusdo acidental de um objeto necessario. i+ //\ Function of setting objects as unselectable + void Objects Selectable (string IDstr,bool flag) ‘ / {Check all the objects for(int isObjectsTotal (0) 73 ( string nsobjectName (0, i); //1£ the object belongs to the panel i£(String?ind (x, IDstz) >=0) ‘ //Lines remain untouched if (flag) if (StringFind(a,"Line")>-1) continue; //Set everything unselectable except the 1i| ObjectSet Integer (0,n, OBJPROP_SELECTABLE, fal > wat sait12019 hitps:twwn-malS.convptartclesi62 Criando Painéis de Controle Avo no MQLS para Negociagao - Aligos MALS ‘Agora vamos dar uma olhada na funcéo OnTick(). Ela nos servird para obtermos os precos mais recentes no mercado. ue //\ Bxpert tick function us void OnTick() ‘ /{Get the latest prices get_prices(); ) A fungao get_prices() tem a form: ue //| Punction obtain information on tick us void get_prices() ‘ MqlTick tick: (/if the tick was Af (Symbol TnfoTick (Symbol () , tick)) ‘ /fobtain information Bid=tick.bid; Aske-tick.ask; time_currentstick. time; : aT > E nao se esqueca do OnDeinit (): Ws //\ Sxpert deinitialization function us void OnDeinit (const int reason) ‘ “us //4£ the deinitiatisation reason isn't the tiets| ‘ME (reason !=REASON_CHARTCHANGE) ‘ //reset initiatization flag last_loaded=faise; //belete all panel object: ObjectsDeleteA-l_my("ActP"); //delete Files with the saved state of the tab) FileDelete ("Active Panel scheme custom 1.bin™ Filepelete ("Active Panel scheme custom 2.pin" FileDelete ("Active Panel scheme custom 3.bin") Filebelete ("Active _Panel_scheme_custom_4.pin") FileDelete ("Act ive_Panel_scheme_custom_5.bin") , /lotherwise set a flag else last_loade Jistop the tiner EventKill Timer () ) TT > Em primeiro lugar verifique a causa da deinicializagéo: se for devido a uma mudanca de um prazo e / ou simbolos, nao raat sait12019 hitps:twwn-malS.convptartclesi62 Criando Painéis de Controle Avo no MQLS para Negociagao - Artigas MALS excluiremos 0 item do painel. Em todos os outros casos, exclua todos os itens utilizando a funcao ObjectsDeleteall_my (). is //\ The function all panel objects 1/\ IDstr ~ obje fier void ObjectsDeleteAl]_my(string TDstr) ‘ //cheek all the objects for(int iFObjectsTotal (0) ;i>=0;i--) ‘ string nsobjectName (0,4); 1/42 the name contains tI if(String#ind(n, 1bstz) } e identifier - remove| ) Objeetbelete (0,n) z ‘Apés compilar e executar 0 Consultor Especialista, obtemos 0 seguinte resultado. WAGE Peg | Mstytose | Stas wi mje [_] owen = [] arte @ Voune [—] comme [__] Sanat se [|r Atay y vl | Figura 10, Exemplo do trabatho do Consultor Especialista No entanto hé uma pequena utilizagéo de tudo isso até sermos capazes de fazer esses objetos responderem a nossas manipulacées. 5. Gerenciamento de evento A interface esta criada agora temos que colocé-la para funcionar. Todas as _nossas acées com objetos geram eventos especificos. A funcdo OnChartEvent OnChartEvent(const int id, const longé& param, const double& dparam, const string& sparam) é 0 Mecanismo que lida com eventos ChartEvent . De todos os eventos estamos interessados nos seguintes: + CHARTEVENT_CLICK - clique no grafico = CHARTEVENT_OBJECT_ENDEDIT - edicao finalizada do campo de entrada = CHARTEVENT_OBJECT_CLICK - clique no objeto do grafico Em nosso caso, o parémetro da funcao id indica que a ID do evento, sparam - indica 0 nome do objeto 0 qual gera esse evento e todos os demais parametros nao sao de interesse para nds. 0 primeiro evento que exploraremos é 0 - clique no botao do menu principal. 5,1. Gerenciamento dos eventos do menu principal Lembre-se que o menu principal consiste em cinco botées. Quando um deles estiver apertado, ele deve ficar em um estado pressionado, direcionar-nos a interface direita e carregar as abas apropriadas. Depois todos os outros botdes do menu devem ir para 9 modo nao pressionado. 13901

You might also like