Você está na página 1de 27
‘0105/2020 MALS Site / Coma desenvolver um Expert Advisor usando ferramentas de UML -Artigos MALS Como desenvolver um Expert Advisor usando ferramentas de UML Denis Kirichenko | 11 abril, 2014 0s cientistas investigam o que ja é; Engenheiros criam o que nunca foi Albert Einstein Introdugao Em meu artigo Simulink: um guia para os desenvolvedores de Expert Advisors eu sugiro uma modelagem de um Expert ‘Advisor usando sistemas dinémicos. No entanto, esta abordagem representa apenas um aspecto do criador dos sistemas de negociagao - 0 comportamento dinmico do sistema. Os profissionais tém a ferramenta especifica que expande a metodologia de um desenvolvedor de sistema de negociacao. Neste artigo iremos discutir como desenvolver um Expert ‘Advisor usando a ferramenta universal - linguagem grafica UML. Em geral, sendo uma linguagem gréfica, a UML ¢ usada para modelagem visual de sistemas de software orientados por abjetos. Mas, como eu vejo, podemos usar suas ferramentas para desenvolver um sistema de negociacao. Além disso, NQLS pertence a familia das linguagens orientadas por objeto, e isso torna a nossa tarefa mais facil. Para os propésitos de modelagem, escolhi um programa gratuito para o modelador de ideias de software de software nao comercial. 1. Fundamentos de UML Como a UML pode ajudar a criar um Expert Advisor? Primeiro, os gréficos - 0 problema de modelagem multi-aspecto pode ser resolvido usando as imagens graficas que esto disponiveis na linguagem. Segundo, a legibilidade. Mesmo que um Expert Advisor seja grande e complexo, a universalidade da UML permite apresentar seu modelo usando diagramas. Como os desenvolvedores da UML dizer, a caracteristica especifica da percepcao humana reside no fato de que um texto com imagens é mais facilmente percebido do que um texto bruto. Vamos discutir brevemente os conceitos basicos da UML. Se vocé esta interessado no assunto, vocé pode tomar conhecimento das ferramentas da UML a partir das iniimeras publicacdes que estao disponiveis gratuitamente na web. Acstrutura da UML pode ser exibida em um diagrama (Fig. 1). UML Common Building Blocks Maen Architecture Fg. 1. Aestrtura da UML Blocos de construcao incluem 0 seguinte: entidades (os elementos do modelo), relacionamentos (que ligam as cofsas) € diagramas (representando modelos de UML). Diagramas de UML permitem visualizar a representacao do sistema projetado a partir de diferentes pontos de vista. Mecanismos_comuns incluem: especificacdes (descricéo da_seméntica), adornos (marcacéo das caracteristicas importantes do modelo), divisoes comuns (abstracao e suas instancias, interfaces e implementacao), os mecanismos de extensibilidade (restricdes, esteredtipos e valores marcados).. A arquitetura é responsével pela apresentacao de alto nivel do sistema em seu ambiente. A arquitetura de UML pode ser methor descrita pela “visio da arquitetura 4+1" (Fig. 2): = Visio légica = Visao do processo = Visao do desenvolvimento = Visdo fisica hitpslwwnzmel5.comvptlarcles/3047print= wer ‘0105/2020 MALS Site / Coma desenvolver um Expert Advisor usando ferramentas de UML -Artigos MALS = Cenarios Development Logi cal f view view Scenarios v : \ v System & environment Process D Physical view view Fig. 2, Visio da arquitetra 4-4 ‘Também deve ser notado que a UML tem a sua propria hierarquia de diagramas candnicos (Fig. 3). A versio da linguagem 2.2 utiliza 14 tipos de diagramas de UML. Diagram Siucture Behavior Diagram Diagram Gass ‘Component Object Acwiy Use Case Diogram Diograrn gram Diagram Diagram Frofie TOMPEE) TDepioyment | [Package Ineracion | [State machine Diagram aan Diagram Diagram Diagram Dogan : Trt ‘Sequence | [Communcaton] | RT") ining aon Ut nn Diagram | | Dog Gvervew |) ciearam Fig. 3. Diagramas de UML candnicos Além disso, proponho considerar alguns casos especiais da utilizacao dos diagramas de UML. Assim, podemos pasar de uma abstracao para uma variante especifica de uso de qualquer um dos diagramas para fins de desenvolvimento da EA. Novamente, 0 principio do desenho multi-aspectos dos sistemas de negociacao, o qual é fornecido pela hierarquia de diagramas UML, contribui para a solucao sistematica e compreensiva da tarefa de criacao de TS. 2. Diagramas de UML. 2.1 Uso dos diagramas de caso hitpslwwnzmel5.comvptlarcles/3047print= 2nr ‘0105/2020 MALS Site / Coma desenvolver um Expert Advisor usando ferramentas de UML -Artigos MALS Como diz 0 ditado, um bom comego é metade da batalha. Normalmente, embora nao necessariamente, 0 trabalho analitico comeca com 0 uso dos diagramas de casos. Ele descreve o sistema do ponto de vista dos utilizadores. Ao crid-to, podemos: Especificar as variantes do uso TS Especificar os limites da TS Determinar atores TS Definir a relacao entre os atores e as verses TS. 0 caso de uso é uma lista de pasos, normalmente definindo as interagdes entre um papel (conhecido em UML tor") e de um sistema, para alcancar um objetivo. Um ator “especifica um papel desempenhado por um utilizador ou qualquer outro sistema que interage com a pessoa. Atores podem representar papéis desempenhados por usuarios humanos, hardware externo, ou outros assuntos. Relacionamento é uma conexao semadntica entre os elementos individuais de um modelo, Vocé pode notar que este tipo de diagrama é bastante geral, e reflete a natureza conceitual da TS, ao invés de sua implementagao. Mas esse & o ponto - movimento do geral para o especifico, do abstrato ao concreto. Quem disse que ‘nao somos artistas? Nés desenhamos uma visdo, comecando com idéias gerais e esbocos. Primeiro desenhamos tracos em uma tela, E depois adicionamos cores. Detalhes de desenhos.. Entao, vamos tentar criar um diagrama de caso de uso para um sistema de negociacao. Como atores de entrada, eu escolhi as seguintes fungées: Desenvolvedor, analista de sistemas, gerente de risco e administrador. Deve notar-se que estas funcdes podem ser desempenhadas por uma ou mais pessoas. Quais as aces que ‘nosso sistema de negociacao toma e quais acdes sao tomadas em relacao a ele? ‘Assim, 0 desenvolvedor pode criar e implementar um TS. Além disso, ele ou ela podem participar na otimizacao do TS. O analista de sistemas otimiza 0 TS. O gerente de risco & responsavel pela gestio de risco. 0 administrador monitora todo 0 trabalho da TS. Do lado da produgao, vemos que o usuirio faz um proveito como um resultado do funcionamento do TS. Este papel ¢ uma soma dos papéis tal como o Trader e 0 Investor. E 0 gerente, bem como o administrador, supervisiona o trabatho do TS. 0 diagrama contém 0 bloco “Sistema de Negociacao", Ele expressa o limite TS e 0 separa do mundo exterior. Agora, algumas palavras sobre a relacio entre os atores e 05 casos de uso, bem como entre os atores e outros atores & 05 casos de uso e outros casos de uso. A maioria dos relacionamentos sao representados por associacdes, marcados por uma linha sétida. Isto significa que um certo ator inicia um caso de uso. Assim, o gerente de risco inicia 0 processo de gesto de riscos, etc. Os atores que iniciam os casos de uso sao os principais, e aqueles que usam os resultados das agbes cometidas - so secundarios. Por exemplo, um ator secundario é o gestor do lado da saida, ‘Associacdo pode indicar que o ator inicia o caso de uso adequado. Generalizacao simula a generalidade apropriada de funcées. Extensio é um tipo de relacio de dependéncia entre o caso de uso base e seu caso especial. Incluir define a relagao do caso de uso base para outro caso de uso, 0 comportamento funcional de que nem sempre é utilizado pelo caso base, mas apenas sob condicées adicionais. No entanto, note que um papel secundério, no que diz respeito a0 caso de uso, n&o significa que esse papel é de importancia secundaria, Além disso, no diagrama, vemos que o papel do usuario TS & composto de fungées do Trader e do Investor através das relagées de generalizacao mostradas como uma linha com a ponta da flecha triangular “nao pintada’. hitpslwwnzmel5.comvptlarcles/3047print= 3n7 ‘0105/2020 MALS Site / Coma desenvolver um Expert Advisor usando ferramentas de UML - Argos MALS 3 Tala Siem —! lien Greate ara > i [ye sytem sist analyst —} {Manage ike nil raver trea» {not prone > 0); ai ancae Conta he Ts T vhaber Fig. 4. Dagrama do uso de caso do TS Os casos de uso de “posicio aberta’ e ‘posicio fechada’, por sua vez, estéo relacionados por uma generalizacao com 0 Trading’. O timo caso € a Unica base para os outros dois. Assim, ele inclui o caso de uso "gerenciar risco'. E seu comportamento é complementar ao caso dependente de "lucro Visto que 0 lucro TS é formado na condi¢ao de que o prego de venda de um ativo é maior do que seu preco de compra, eu usel o relacionamento de extensdo para estes casos. O diagrama também mostra o ponto de extensio, ou seja, uma condicao especifica, em que o caso “lucrar” é usado. Relacdes de dependéncia sao exibidas pela linha tracejada com luma seta com os estereétipos correspondentes “incluir’ e “estender" Para cada caso de uso, vocé precisa criar um cenario, que é para descrever uma sequéncia de passos que leva ao alvo pretendido. 0 caso de uso pode ser descrito em diversas formas. As formas comumente aceitas incluem as seguinte: descrigdes de texto, pseudocédigo, diagrama de atividade, diagrama de interacao. Deve notar-se que um negociador esta interessado num TS no seu sentido estrito em vez daquele que é mostrado na fig. 4. Portanto, além disso, eu sugiro focar na “negociacao” do caso de uso com a extensao “lucrar”. 2.2 Diagrama de classe Usando o diagrama de classe, vamos descrever a estrutura TS. Ou seja, iremos apresentar um modelo de uma estrutura estatica do sistema de negociacao em termos de classes de programacao orientada a objetos. Assim, vamos refletir a \égica da programagao TS. Em UML um diagrama de classe 6 um tipo de diagramas de estrutura estatica. Ele descreve a estrutura do sistema mostrando suas classes, seus atributos e operadores, bem como 0 relacionamento das classes. Quais séo as vantagens deste tipo de diagrama? Aqueles que sAo um pouco familiarizados com as linguagens de programacao orientadas a objeto, irdo notar imediatamente a nocao familiar da "classe". A classe atua no diagrama de classes UML como o bloco de construgao basico. Por exemplo, quando a geracao de um cédigo C++, 0 bloco de classe UML criado automaticamente sob a forma de um modelo de classe. Vocé sé vai precisar terminar a execucao de cada, método e propriedade. Agora, vamos tentar projetar algo como um exemplo. Mas primeiro eu gostaria de chamar a atenc&o para o artigo Prototype of a Trading Robot", no qual o autor descreve as vantagens de usar uma légica em linha reta. Na minha ‘opiniao, muito eficaz e produtivo é o principio de aninhamento - "médulos de macros funcdes de comércio". Por exemplo, precisamos de um Expert Advisor que usa a possibilidade de aulas de negociacao da biblioteca padrao. Usando 0 bloco de classe, crie um modelo de classe no diagrama de classes. Eu o chamei de CTradeExpert. Nos adicionamos alguns atributos (em MQLS eles so membros de dados da classe) para a nova classe. Eles sdo: Magic_No, etrade, e account, e deal, e symbol, e_pnt. Também inserimos um método construtor da classe CTradeExpert. Graficamente, o funcionamento sera como mostrado na fig. 5. hitpslwwnzmel5.comvptlarcles/3047print= apr ‘0105/2020 MALS Site / Coma desenvolver um Expert Advisor usando ferramentas de UML -Artigos MALS CTradeExpert | Magic_No : int |# ¢_trade : CTrade }# @_account : CAccountinfo |# © deal : CDealinfo |# e_symbol : CSymbollnfo J+ @_pnt : double J+ CTradeExpert (void Fig. 5, Modelo UML da classe Cradexpert © caractere ~-" na frente de um atributo indica que o atributo tem 0 direito de acesso no modo «privado», «i =protegido», «+» - =pablico». Assim, para o atributo Magic _No o especificador de acesso é definido como privado, para e_pnt - como piblico, e para os outros - como protegidos. Os dois pontos que segue o nome do atributo, indica um tipo de dado para atributos e tipo de dados retornados por métodos. Por exemplo, o atributo Magic_No é do tipo int, e-trade - CTrade, etc. Nés nao estamos adicionando os métodos € atributos agora, estamos simplesmente mostrando como nossa classe CTradeExpert esta conectada com as classes da biblioteca padrao. Para fazer isso, adicione 6 blocos de classes a0 diagrama e os chame da seguinte forma: CTrade, CAccountinfo, CDealinfo, CSymbolinfo, CObject. Agora associamos 0 modelo da classe CTradeExpert com 4 blocos de classes de comércio por meio de relagdes de dependéncia com 0 estereétipo “use” (a linha tracada pontilhada com uma seta). Dependéncia ¢ uma relago seméntica entre duas entidades, em que uma alteracao na independente das mesmas pode afetar a semantica da outra dependente. Estereotipo em UML é uma descricao do comportamento do objeto. Entao, nés ligamos esses blocos com 0 CObject do bloco pela relacdo de generalizagao utitizando uma linha com a ponta’da flecha triangular "nao pintada”. Adicione comentarios as classes da biblioteca padrao. Agora, 0 nosso diagrama UML aparece como mostrado na figura 6. hitpslwwnzmel5.comvptlarcles/3047print= 57 ‘0105/2020 MALS Site / Coma desenvolver um Expert Advisor usando ferramentas de UML -Artigos MALS CObject TN CTrede ‘Chesountinto obs Ceymbaiiate cease Fae | Macic_ No int fio tade :CTrade fre account: CAccourtnto fio doal: CDealinfo, lz e_symbot :csymbotInfo [+ e-pnt = double [> CTradcExpert (void Fig. 6. Diagrama de classe de UML. ‘Agora s6 precisamos gerar o cédigo utilizando a funcao “gerar” da guia “gerar” na barra lateral (Fig. 7). hitpslwwnzmel5.comvptlarcles/3047print= en ‘0105/2020 MALS Site / Coma desenvolver um Expert Advisor usando ferramentas de UML - Argos MALS ers | TO- ‘Syles | Popertes | Docuneriaion Generate Pioket Fast Edtor Cos + Generate Generate From @ Woe Dagrm © Selected Elements “ close CleadeBupert ‘ sine Mage Nor protected: ‘AcccuntInfo ¢ account; protected: provected: (CSymbolinéa @_ayebel: public: double ¢ pnt; pub “ Fig. 7. Cig gerado (© mais apropriado & a linguagem C++. N6s vamos usar C++ para gerar 0 cédigo da classe Expert Advisor, facilmente traduziremos em MQLS. Para este diagrama o cédigo gerado é como se segue: class CTradetxpert 1 private: int Magic Nes protected: CIzade © teader protected: cAccountinfo e_accounts protected: cbealinfo ¢_deal; protected: CSymbol Info e_symbols publi double ¢ pnt? public: hitpslwwnzmel5.comvptlarcles/3047print= e entao qr ‘0170572020 MALS Site / Coma desenvolver um Expert Advisor usando ferramentas de UML -Artigos MALS void CTradeExpert () class Cobject Class CTrade : public Cobject class CDealtnfo : public cobject class CSymbolInfo + public Cobject class CAccountInfo : public Cobject Uma sintaxe muito familiar, nao & Nés 56 precisamos ajustar o corpo da classe. Para este efeito, em MetaEditor criamos um arquivo para a nova classe TradeExpert.mah. Copie o cédigo gerado anteriormente para ele. Para facilitar a lejtura nés excluimos 0 especificador de acesso repetido protegido para os membros da classe CTradeExpert. Exclua as linhas conectadas com a declaracdo das classes da biblioteca padréo. Depois disso, adicione 0 arquivo incluindo a instrucao include para cada classe utilizada da biblioteca padrao, porque essas classes ja estao definidas pelo desenvolvedor. E adicione nossos comentarios. Como resultado, obtemos 0 cédigo como este: //inciudes #include #include Hinclude #include ctzadeExpert private: int Magic No; // Expert Advisor magic e_trade; // An object for executing trade orders elaccount; // An object for receiving account properties Cbeal Info endeal: // An object for receiving deal properties csyrbelinto e_symbol; // An object for receiving symbol properties e_pnt; // Value in points Chradenxpert () agora vamos adicionar mais alguns médulos de fungdes comerciais a nossa classe Expert Advisor. Iitpsslwin.mel5.comiplartcles/9047print= snr 1rosr2020 'MOLS Site Como deservolverum Expert Advisor usardo feramenlas de UML -Artigos MLS Estes podem ser: CheckSignal, OpenPosition, CheckPosition, ClosePosition etc. Espero que vocé ja saiba o principio de “servico de condicao. Neste caso, nossa classe de teste’ CTradeExpert nao pareceria dificil para vocé. Eu foquel especificamente em algum exemplo j4 conhecido de um Expert Advisor para tornar mais facil para vocé entender os mecanismos da UML. Assim, agora o modelo da classe parece como o mostrado na Fig. 8. CTradeExpert | Magic_No : int |# @_trade : CTrade }# @_account : CAccountinfo |# deal : CDealinfo »_symbol : CSymbolinfo pnt : double }> CTradeExpert (jvoId I+ CheckSignal (dir long):void I+ OpenPosition (dir tong):void J+ CheckPosition (dir ong):void I+ ClosePosition (dir :long):void Fig. 8 Modelo UML da classe Cradetxpert Para o modelo atualizado da classe, também podemos gerar um cédigo usando o método jé descrito. 2.3 Diagrama de Atividades Usando este tipo de diagrama UML, podemos estudar o comportamento do sistema usando os modelos de fluxo de dados € controle. Os diagramas de atividades so representagdes gréficas dos fluxos de trabalho de atividades e ages escalonadas. 0 diagrama de atividade difere do fluxograma, que descreve apenas os passos do algoritmo. A notagao do diagrama de atividades & maior. Por exemplo, é possivel especificar o estado dos objetos no mesmo. Os diagramas de atividades sao usadospelos desenvolvedores para descrever: + Regras de negécio; = Casos de uso tinico; = Série complexa de casos de uso miiltiplo; = Processos com solucées e fluxos alternatives; + Operacées paralelas; + Estruturas de fluxos de programas e controle de Logica, Supondo que a classe especialista criada CTradeExpert, sera utilizada no arquivo Test_TradeExpert.mg5 do Expert Advisor. Como nos lembramos, 0 modelo padrao ao criar um EA no MetaEditor 5 fornece trés fungdes manipuladoras de eventos padrao: Oninit, OnDeinit e OnTick. Vamos no juntar a eles. Vamos tentar mostrar um diagrama com a nossa contagem de operacio EA para 0 arquivo Test_TradeExpert.mq5. Aqui deve-se notar que o Expert Advisor, ou melhor, a sua estrutura, é bastante primitiva, Nés s6 estamos treinando agora. A estrutura EA simples & ok para esta finalidade. Deixe-nos desenhar um diagrama para uma utilizacao de nosso Expert Advisor, 0 algoritmo 0 qual é representado no arquivo Test_TradeExpert.mq5. Assim, tudo comeca com 0 né inicial (Fig. 9). A partir deste né, um controle simbélico move-se para o né chamando a agao “Criar uma instancia de Expert Advisor”. Esta acao inicia o fluxo do objeto (seta azul), que altera o estado do nd do objeto (myTE=created), e 0 fluxo de controle para um né que se chama “inicializar o Expert Advisor’ Um fluxo de controle € representado sob a forma de uma margem de atividade, que liga os dois nés da atividade e sobre o qual apenas tokens de controle sao transmitidos, Um fluxo de objeto é representado como uma borda da atividade, para a qual sé objetos ou dados do tipo token sao transmitidos, Um né de atividade é uma classe abstrata para os pontos individuais no fluxo de atividades ligadas por arestas. Um né de decisao é um né de controle, que escolhe entre os fluxos de saida. Um né de objeto representa objetos utilizados na atividade. hitpslwnzmel5.convptlarcles/3047print= se ‘0170572020 MALS Site / Coma desenvolver um Expert Advisor usando ferramentas de UML -Artigos MALS Uma aresta de atividade é uma classe abstrata para ligacdes dirigidas entre dois nés de atividades. 0 nd inicial mostra onde comeca a atividade. 0 né final de uma atividade completa todos os fluxos de atividade. Isto, por sua vez, altera o estado do objeto myTE (myTE-initialized) e passa o token de controle para 0 né de decisao. Se o Expert Advisor é inicializado com sucesso, 0 fluxo de controle vai para o né “processo do evento comercial NewTicke. Se a inicializacao falhar, entao o token de controle entra pela primeira vez no né de generalizacao e, em seguida, no né de aco “deinicializar o Expert Advisor’. 0s tokens sao construgées abstratas que sao introduzidas para conveniéncia em descrever 0 processo dinamico de execugéo de um grafico de atividade estatisticamente definido. 0 token nao pode conter qualquer informacao adicional (um simbolo vazio), neste caso € chamado um token de controle de fluxo, ou pode conter uma referéncia a uma estrutura de objeto ou dados, e, neste caso, € chamado um token de fluxo de dados. Vejamos 0 primeiro controle de fluxo que vem do né de decisdo. Ele é dirigido para uma rea com uma acao interrompida, como indicado por um reténgulo com cantos arredondados desenhados pela linha pontithada vermetha e © estereotipo de "interrupcao™. Quando o fluxo de controle esta nesta area, ele pode parar inesperadamente. Se voc ativar o né de aco (sinalizador laranja), que recebe o evento “descarregar Expert Advisor’, ele ira interromper todos os fluxos. O token de controle se move para a aresta interrompida (seta de zigue-zague laranja), e depois para o né de conexao. Depois que a EA é deinicializada. Em seguida, o token de controle vai para 0 né “excluir variaveis globais", entao o fluxo sera concluido no né de atividade final. nd de acao “deinicializar Expert Advisor’ também altera o estado do objeto myTE (Myte = deinicializado) por um fluxo de objeto, 0 né “excluir variaveisglobais", por sua vez, remove o myTE do objeto (Myte=excluido). Fig. 9. Diagrama de atividade para Test_Tradetipert.mg5 Suponha que o fluxo de controle é estavel: EA nao & descarregado. A partir do né "processar 0 evento de comércio NewTick» 0 fluxo move-se para outro bloco - rea de expansao, o estereotipo deste é definido como “repetitive” {retangulo verde com linhas pontithadas). Eu chamo esta area de "bloco comercial”, para refletir as caracteristicas basicas e melhorar a percepcao do diagrama. Um rasgo caracteristico do bloco é a execucao ciclica de operacées para os objetos recebidos. Precisamos de apenas 2 Ciclos - lidar com as direcdes longas e curtas. Na entrada ao bloco e na saida do bloco ha nés de expansao que incluem objetos de direcao comerciais (longos ou curtos). hitpslwwnzmel5.comvptlarcles/3047print= 10227 ‘0105/2020 MALS Site / Coma desenvolver um Expert Advisor usando ferramentas de UML -Artigos MALS Um né de expansio & uma colegao de objetos que entra ou sai da érea de expansdo, que ¢ executada uma vez para cada objeto. 0 nd de aco que envia um sinal (acdo de sinal enviada) representa o sinal enviado. (nd de aco que aceita um evento (aceitar apropriado 0 de evento), espera para o recebimento de um evento do tipo Assim, cada sentido € tratado por estes nés como: "Verificar sinal” (sinal de envio do né), “receber sinal” (sinal de recepcao do né), "posicao aberta’ (sinal de envio do né), ‘verificar posicao” (sinal de envio do né), “fechar posicao" {sinal de envio do né). Deve notar-se que 0 objeto de direcao (dir) pode ser transmitido no fluxo do objeto entre os nds de acao, tal como indicado pelas setas de cor violeta. As operacdes em um bloco continuara enquanto o Expert Adviser é descarregado. 2.400 diagrama de sequéncia Nés usamos 0 diagrama de sequéncia para descrever a sequéncia de interacao do objeto. Um aspecto muito importante deste tipo de diagrama é o tempo. Assim, o diagrama tem duas escalas em uma forma implicita. A horizontal é responsavel pela sequéncia de interagées dos objetos. A vertical é um eixo de tempo. 0 inicio do intervalo de tempo é a parte superior do diagrarma. A parte superior do diagrama contém objetos do diagrama, que interagem. Um objeto tem a sua prépria linha de vida como uma linha pontilhada vertical. Os objetos de troca de mensagens. Eles sao representados por setas. Quando um objeto esta ativo, ele recebe o foco de controle. Graficamente, este foco é expresso como um retangulo estreito na linha de vida. Um objeto é um reténgulo que contém um nome de objeto sublinhado e o nome da classe (opcional), separados por dois pontos. Uma linha de vida de umn objeto é uma linha que mostra a existéncia de um objeto durante um certo periodo de tempo, quanto maior for a linha, maior sera a existéncia do objeto. 0 foco de controle é desenhado como um retangulo estreito, o lado superior dos quais indicam 0 inicio da recepcao do foco de controle pelo objeto (inicio de atividade), e a sua desvantagem - 0 fim do foco de controle (final de atividade). Em UML, cada interagao esta descrita por um conjunto de mensagens, as quais os abjetos participam na sua troca, ‘Vamos praticar um pouco. © terminal é um ator. Ele inicia a operacéo do Expert Advisor. Outros objetos marcados com o esteredtipo “evento” sao 0s eventos do terminal do cliente: Init, Deinit e NewTick. Claro, se vocé quiser, pode ampliar 0 leque de eventos. Ao iniciar um Expert Advisor, o objeto myTE é criado no nivel global. Ele é uma instancia da classe CTradeExpert. 0 objeto de classe ¢ um pouco menor do que 0s outros objetos no diagrama, o que indica que ele é criado apés a funcao do construtor. Um comando de criacio é marcado com uma linha de traco pontithado com uma seta aberta e uma mensagem 1.1 CTradeExpert(). A linha de traco pontilhado com uma ‘seta indica o tipo de “criacéo’ do construtor padrao CTradeExpert(). Depois de criar uma instancia CTradeExpert 0 passo 1.2 & ativado - 0 foco de controle & devolvido ao terminal. Para facilitar a leitura, indico mensagens sincronas no formato de #.#, como 1.1, e assincronas - #. Em seguida, o terminal processa o evento de inicializacao usando a funcao Onlnit() no passo 2.1, 0 foco retornado no asso 2.2. Mensagens do tipo “chamada” so mostradas como linhas com uma seta triangular “pintada' no final. Se o evento de inicializacao retorna um valor diferente de zero ao terminal, significa que a inicializagao falhou: passo 3.1 € utilizado, o que leva a geracao e manuseamento do evento de deinicializacao. No passo 3.2, 0 foco de controle é devolvido para o terminal. Em seguida, 0 objeto da classe CTradeExpert € excluido (paso 4.1). A propésito, na criacao de um diagrama de classe, eu nao inclui a funcao destrutora CTradeExpert na classe. Isto pode ser feito depois. Esta & uma das vantagens da construcao do diagrama - 0 processo de construcao de varios diagramas é iterativo. O que foi feito pela primeira vez para um diagrama, pode ser feito em seguida para outro, e mais tarde vocé pode modificar 0 primeiro. Deve notar-se que 0 cédigo MQLS de um modelo EA padréo nao contém um bloco que trata a inicializacao que fathou. Eu especifiquei para salvar a lgica da sequéncia. O diagrama de sequéncia UML usa o bloco opcional com uma condicao de guarda Oninit()!=0, que é equivalente a construcdo MQL5 se (Oninit()!= 0) (). No passo 4.2, o controle é transferido para o terminal. hitpslwwnzmel5.comvptlarcles/3047print= wer ‘0105/2020 MALS Site / Coma desenvolver um Expert Advisor usando ferramentas de UML -Artigos MALS Agora, o terminal esta pronto para manipular o evento NowTick. 0 processamento deste evento se da no ciclo do bloco significando um ciclo infinito. Ou seja, a EA ira lidar com este evento até que nos o desativarmos. 0 terminal processa o evento NewTick utilizando a fun¢ao OnTick (paso 5). No asso 6, 0 foco do controle é transferido para o myTE do Expert Advisor. Usando 4 mensagens reflexivas, implementa as seguintes fungées: CheckSignal, OpenPosition, CheckPosition, ClosePosition. A reflexividade € devido ao fato de objeto Expert Advisor enviar mensagens para si ‘Além disso, estas funcdes da classe CTradeExpert esto delimitadas no bloco (2) do ciclo. Dois meios em qual o ciclo longas e curtas (a partir do consiste por dois passos. Por qué dois? Porque ele lida com duas direcdes de negociacao asso 7 a 10). No passo 11, 0 foco é pasado para o terminal, Os passos 12 e 13 sao responsaveispela deinicializacao e exclusao do objeto Expert Advisor, respectivamente. i sigteeen Newtek nyte:CrradoExoert hitpslwwnzmel5.comvptlarcles/3047print= Sone san7 ‘0105/2020 MALS Site / Coma desenvolver um Expert Advisor usando ferramentas de UML -Artigos MALS fey -—— LmytE Ch 1 6. mye celpdetenar) [Jessep v 1 Fig, 10. Diagrama SO para Test TradeExpert.maS Assim, temos as habilidades de desenhos primérios. Com a ajuda de diagramas da criacao, o trabalho do desenvolvedor € otimizado. Podemos agora comecar a escrever um cédigo para o arquivo Test_TradeExpert.mq5. Claro, vocé pode fazer sem diagramas. Mas quando vocé tem um complexo Expert Advisor, 0 uso de diagramas reduz a probabilidade de erros e permite-Ihe gerir de forma eficiente 0 desenvolvimento do seu TS. Usando 0 modelo Expert Advisor, agora criamos o Test_TradeExpert.ma8. Nés criamos uma instancia da classe myTE CTradeExpert a nivel global. ‘Agora vamos encher o corpo da fungo OnTick().. Nés escrevemos as funcdes da classe, como segue: for (long dir-0;dir<2;dir++) myTE.CheckSignal (dir) : nyTE.OpenPosition (dir); nyTB.CheckPosition (air); nyTE.ClosePosition (dir); Algo como isso sera o tratamento do evento NewTick. é claro, ainda precisamos especificar cada uma das funcoes que sero usadaspelos membros de dados da classe, entre outros. Mas vamos deixar esse trabalho para 0 futuro. Agora, nosso objetivo € transferir a légica de diagramas UML no cédigo MQL5.. 3. Desenvolvimento e apresentaco de um Expert Advisor baseado nos diagramas de UML Como exemplo, vamos criar diagramas para um complexo Expert Advisor. Vamos definir as suas caracteristicas no contexto de uma dada estratégia implementada no MQL5. Em geral, nosso Expert Advisor ira realizar operacdes de comércio, em especial ira gerar sinais de negociacao, manter posicdes abertas e gerir o dinheiro. Ele é particularmente uma estratégia de negociacdo modelo. No entanto, para fins de treinamento, vamos tentar trabalhar com este. Iitpsslwin.mel5.comiplartcles/9047print= 13027 ‘0105/2020 MALS Site / Coma desenvolver um Expert Advisor usando ferramentas de UML -Artigos MALS Primeiro, vamos criar um diagrama de caso de uso para o nosso EA. Apenas em certas medidas ele ira ser diferente do que foi discutido anteriormente. Prestei atencéo ao ambiente interno do TS, ignorando o exterior (Fig. 11), como no cédigo, vamos implementar apenas as tarefas de negociacao. Trading System coxtoras {et promt > 0): Fig. 11. Diagrama do uso de caso do TS Agora vamos definir a estrutura do Expert Advisor. Suponha que vamos usar os desenvolvimentos da biblioteca padrao, porque € consistente com os objetivos declarados da TS. Recentemente, tem sido substancialmente alargado. E acima de tudo, diz respeito as classes de estratégias de negociacao. Assim, nosso objetivo é criar um diagrama de classes. Nao sera simples, entao vocé precisa de paciéncia. Aqui eu gostaria de salfentar que consideramos a biblioteca padréo para algumas razdes. Em primeiro lugar, em sua base, tentamos criar um robd de negociacao. E, segundo, o que também é importante, nds temos um pouco de pratica trabathando com diagramas UML. Em terceiro lugar, talvez, a proprio biblioteca é’ muito valiosa. Assim, podemos aprender muitas coisas iteis a partir da biblioteca, e, ao mesmo tempo, tentar entender sua estrutura nao muito simples, ‘A conversao de um cédigo na estrutura de um diagrama UML & chamado de engenharia reversa. Na verdade, estamos fazendo isso manualmente. Existe um software profissional que permite que vocé faca isso automaticamente (IBM Rational Rose, Visual Paradigm para UML, etc.). Mas, para fins préticos, eu acho que nés precisamos trabathar "manualmente’. ‘Vamos criar um modelo da classe de base para implementar estratégias de negociacao CExpert usando o bloco "Classe" Vamos ver quais outras classes e construcdes so utilizadas no corpo da classe CExpert. Primeiro, deve-se notar que a classe CExpert deriva da classe de base CExpertBase, a qual, por sua vez, deriva da classe de base CObject. No diagrama nés criamos blocos para estas classes, ¢ definimos a relagao entre entre as classes usando uma linha com uma ponta da flecha triangular “nao pintada’ (generalizacao). Adicione um comentario ao modelo da classe CExpert (um retangulo amarelo com um vértice inclinado). A estrutura de classe intermediaria agora se parece como 0 seguinte Fig. 12. Vamos chamar o diagrama Expert. hitpslwwnzmel5.comvptlarcles/3047print= san7 ‘0105/2020 MALS Site / Coma desenvolver um Expert Advisor usando ferramentas de UML - Argos MALS CObject CExpertBase CExpert Fig, 12. 0 dlagrama Expert, a visio iniclal Vamos ver 0 cédigo no arquivo Expert.mgh. A classe CExpert, entre outras coisas, ENUM_TRADE_EVENTS e ENUM_TIMEFRAMES, umas das 8 estruturas pré definidas MolDateTime. A classe também usa outras instancias de classe, tais como: CExpertTrade, CExpertSignal, CExpertMoney, CExpertTrailing, Cindicators, (CPositiontInfo e COrderinfo, envolve enumeracdes Agora, precisamos fazer algumas alteracdes para o diagrama. Primeiro, nés especificamos que as classes CExpertSignal, ‘CExpertMoney, CExpertTialling so derivadas a partir da classe de base CExpertBase, © as classes CPositiontinfo, COrdertnfo sao derivadas a partir do CObject (Eu configurei o esteredtipo "metaclasse” para ele) Vamos marcar as relagdes de dependéncia com o “uso” de esterestipo entre o bloco da classe CExpert e outras classes, nao esqueca da estrutura e enumeracdes do MqlDateTime. Nés mudamos 0 estilo de cor dos blocos e obtivemos a seguinte estrutura - Fig. 13. ‘Grostiontinte CExpenade. ENUM _TINEFRAMES Tana ENUM_TRADE_EVENTS | a Fig. 13. 0 diagrama Expert, a visio iniciat MeiDateTime No entanto, esta estrutura nao reflete a imagem completa, porque ha um nimero de classes que sdo utilizadas indiretamente pelas classes 4 mencionadas. De qual tipo de classe elas sao? Primeiro, a classe CExpertTrade é derivada a partir do Cirade. 0 ultimo é uma subclasse de CObject. Iitpsslwin.mel5.comiplartcles/9047print= 1827 ‘0105/2020 MALS Site / Coma desenvolver um Expert Advisor usando ferramentas de UML -Artigos MALS A classe CExpertTrade usa a enumeracdo ENUM_ORDER_TYPE_TIME, classes CSymbolinfo e CAccountinfo também sao fithas do CObject. A classe CTrade também usa instancias das classes de CSymbolinfo, Vamos fazer alteracées no diagrama. Agora, nosso diagrama tem a seguinte forma - Fig. 14. maDatoTine Fig, 14.0 diagrama Expert, a visio inci Novamente, 0 diagrama nao esta completo. Por exemplo, se vocé olhar no arquivo Trade.mahda biblioteca padrao, vocé vera que Cirade usa diversas estruturas diferentes, enumeracdes e a classe CSymbolinfo. Se eles sa0 todos apresentados em um diagrama, sera muito carregado. E iss0 fara com que seja dificil de entender. Para lidar com essa dificuldade, eu usei um pacote para o diagrama. Ele encapsula classes relacionadas, enumeracées, ‘outros pacotes, etc. Eu liguei o pacote com os elementos do diagrama através da interface. Por exemplo, o diagrama para o pacote CTrade pode ser representado como segue - Fig. 15. Iitpsslwin.mel5.comiplartcles/9047print= 16027

Você também pode gostar