English Русский 中文 Español Deutsch 日本語
MT4TerminalSync - Sistema para sincronização de terminais MetaTrader 4

MT4TerminalSync - Sistema para sincronização de terminais MetaTrader 4

MetaTrader 4Exemplos | 22 fevereiro 2016, 11:59
721 0
Valery V. Chesnokov
Valery V. Chesnokov

Introdução

Muitos operadores e desenvolvedores de sistemas de trading possuem várias cópias de terminais MetaTrader 4 para fins técnicos. Diferentes gráficos e diferentes contas são abertas e diferentes estratégias são testadas. Junto a isto, de tempos em tempos, novas versões do terminal são lançadas, novos indicadores e Expert Advisors aparecem, outro código MQL é escrito.

Mais cedo ou mais tarde para uma operação normal nos deparamos com a questão da sincronização das cópias de terminais utilizados. Para isto, precisamos de uma ferramenta técnica capaz de resolver esta tarefa. Neste artigo, vamos ver o processo de criá-la e, finalmente, obter uma ferramenta pronta.

Para quem este artigo é destinado?

O artigo analisa a criação de um exemplo de um sistema de programa para a sincronização de várias cópias do terminal.

Por conseguinte, o artigo pode ser interessante para duas categorias de leitores:
1. Usuários/operadores podem usar o sistema de programa pronto a partir deste artigo.
2. Os desenvolvedores profissionais de sistemas de programa além do código MQL podem analisar este sistema para fins educacionais pessoais e, talvez, fazer comentários construtivos.

Necessidade do sistema de sincronização de terminais

Suponha que você possui oito terminais. Você baixou uma versão recém-lançada. Como? Você clique oito vezes na sequência o arquivo baixado https://www.metaquotes.net/files/mt4setup.exe e indica suas pastas com as cópias? Bem, não é difícil.

Suponha que você desenvolveu três novos indicadores, dois Expert Advisors e uma biblioteca. Agora você precisa testá-los em diferentes situações em oito cópias do terminal. Isso significa que você precisa atualizar arquivos MQL fonte e arquivos binários ex4. Você desenvolveu tudo enumerado acima em uma cópia fonte do terminal. Agora, isto precisa ser repetido nas outras cópias. Você abre uma por uma das subpastas do terminal fonte: experts, em seguida, experts\indicadores e experts\bibliotecas. Então, em cada subpasta no Windows Explorer você copia os arquivos necessários e, em seguida, abre em cada cópia atualizada do terminal a mesma pasta e copia os arquivos para ela. E repetir este ciclo duas vezes para cada subpasta de origem e cada subpasta análoga para o terminal atualizado.

Esta situação é familiar para você? Se você faz isso com frequência, muitas vezes, você provavelmente já pensou sobre a simplificação deste trabalho. Para isto, precisamos de uma ferramenta técnica capaz de automatizar esta tarefa. Isto é, é melhor iniciar a atualização dos terminais clicando em um botão. E seria muito útil ter a possibilidade de ajustar parâmetros para este processo, como o caminho para o terminal fonte de controle, muitas maneiras de atualizar terminais, definir filtros para os arquivos que devem ser atualizados. Por exemplo, o sistema de sincronização deve nos mostrar se houver um erro no caminho para a pasta do terminal.

Isso significa que a nossa ferramenta deve ser flexível e eficiente. Vamos tentar criar esta ferramenta.

Provisões técnicas

Este artigo é dedicado ao tema "Ampliando as possibilidades de programas MQL4 utilizando funções de sistemas operacionais e outros meios de desenvolvimento do programa". É por isso que os meios utilizados estão além do terminal MetaTrader 4 e da linguagem MQL.

O sistema de sincronização criado e descrito aqui para cópias de terminais requer para seu funcionamento os seguintes recursos do programa:
1. Sistema operacional - Microsoft Windows 2000 SP4 ou superior: Microsoft Windows 2000, Windows XP, Windows Server 2003, Windows Server 2003 R2, Windows Vista.
2. Plataforma Microsoft .NET Framework 2.0. Isto pode ser baixado do site da Microsoft em:
2.1. http://www.microsoft.com/downloads/details.aspx?displaylang=ru&FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5 - um distributivo em russo (RUS) para processadores x86, tamanho do arquivo dotnetfx.exe 22 Mb.
2.2. http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5 - um distributivo em Inglês (EN) para processadores x86, tamanho do arquivo dotnetfx.exe 22 Mb.
2.3. http://www.microsoft.com/downloads/details.aspx?familyid=B44A0000-ACF8-4FA1-AFFB-40E78D788B00&displaylang=en - um distributivo em Inglês (EN) para processadores x64, tamanho do arquivo NetFx64.exe 45 Mb.
3. Desktop do banco de dados do usuário Microsoft SQL Server 2005 Compact Edition. Esta redação do servidor SQL consiste em oito arquivos dll. Pode ser baixada em: http://www.microsoft.com/downloads/details.aspx?FamilyId=%2085E0C3CE-3FA1-453A-8CE9-AF6CA20946C3&displaylang=en - SQLServerCE31-EN.msi tamanho do arquivo 1.7 Mb. Maiores informações estão no artigo do MSDN "Instalação em um desktop e um Tablet PC (SQL Server Compact Edition)" em http://technet.microsoft.com/en-us/library/bb190958.aspx (EN).

Abaixo está a informação adicional para os desenvolvedores.

Se você deseja criar um sistema semelhante usando as tecnologias indicadas, será necessário o Microsoft Visual Studio 2005, por exemplo, uma das redações livres do Visual Studio 2005 Express Edition para a linguagem C# ou VB.NET. Você pode baixar o pacote de serviços 1 do Microsoft® Visual Studio® 2005 Express Editions em: /go?link=http://www.microsoft.com/en-us/download/details.aspx?id=804. Você também pode encomendar versões demonstrativas do Visual Studio 2005 em: http://www.microsoft.com/emea/msdn/visualstudio/ruru/getthetrials/. Ou você pode usar uma versão mais recente do Visual Studio "Orcas", que no momento em que o artigo foi escrito existia na versão Beta 1. Seu nome preliminar Orcas pode ser transmitido para o Visual Studio 2008. Você pode encontrar as novas informações sobre o Visual Studio e suas novas versões em: http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx.

Não leva mais que dois ou três minutos para instalar o Microsoft .NET 2.0 e SQL Compact Edition se você já possuir os dois arquivos necessários (dotnetfx.exe e SQLServerCE31-EN. msi para versões Windows x86). Basta baixar o arquivo, clicar em Avançar e em Concluir.

Componentes do sistema

Exceto o software de fora enumerado, o próprio sistema de sincronização consiste em diversos arquivos, descritos a seguir.

Aqui os arquivos .exe e .dll são um código binário executável, o arquivo config.xml é um arquivo de configuração do início do shell (iremos falar sobre isso mais adiante), o arquivo MT4TerminalSync.sdf é o banco de dados do sistema e o arquivo Log.txt contém registros de todos os erros na operação do sistema.

Nota: devido à ideologia do desenvolvimento da rede do programa, especialmente aqueles que trabalham em servidores de terminal, os sistemas podem não ter direito de fazer registros em uma pasta atual da qual são executados. Portanto, todos os arquivos de configuração, arquivos de log de erro e outros que se referem a cada usuário separadamente devem ser salvos em pastas do Windows de perfis de usuário. No entanto, neste sistema, que é realmente um exemplo e um quadro de um sistema de rede de valor completo, todos os arquivos referentes a ele são armazenados em uma pasta para a simplificação de seu uso por usuários individuais.

Você não precisa instalar o sistema de sincronização adequado. Você só precisa instalar os programas de fora enumerados e copiar os arquivos do sistema para uma pasta em um disco rígido local.

A ideologia do sistema desenvolvido.

Existem diferentes maneiras de criar um sistema deste tipo. Cada desenvolvedor pode encontrar sua própria solução desta tarefa. A vantagem da presente solução ao menos existe e funciona.

Tudo necessário para a solução também está disponível em linguagens de script, como por exemplo arquivos VBS, comandos como xcopy, etc. Talvez, isto parecerá mais fácil do que o sistema dado. No entanto, na minha opinião, essa abordagem tem várias desvantagens:

1. Você terá que incluir configurações do sistema (caminhos para o terminal de origem/destino, extensões de arquivo) diretamente em textos fonte de script. Ou você terá que escrever seu próprio analisador sintático (analisador) do arquivo .ini.

2. Você não terá quase nenhum controle dos erros de cópia de arquivo. Não é tão fácil de encontrar se houve erros usando comandos como xcopy, bem como para reuni-los em um único formulário disponível para visualização.

Então, eu decidi desenvolver um sistema compilado com o armazenamento de todas as configurações em um banco de dados para a flexibilidade máxima de extensão. Para a criação do sistema preferi usar tecnologias de desenvolvimento da Microsoft que são familiares para mim. Dentro desses limites, a seguinte seleção de ferramentas foi realizada.

Descrição da base de dados do sistema

Podemos usar diferentes variantes para salvar os parâmetros do sistema (caminhos, bloqueios de arquivo, etc.): escreva tudo em um código de programa, use o arquivo ini, arquivo XML ou DBMS. Eu escolhi a última variante para usar as possibilidades do DBMS e não para inventar meus próprios métodos.

Qual DBMS escolher? Há dois critérios relevantes:
1. Provavelmente, o sistema irá ser utilizado como uma ferramenta incorporada, isto é, será um sistema multiusuário da rede. Isto significa que podemos tomar como base de dados um arquivo Microsoft Access ou SQL server. No entanto o Access não pode ser instalado para qualquer usuário, porque ele está incluído na versão do Microsoft Office Professional Edition.
2. O sistema também será utilizado por usuários individuais. Isso significa que o tamanho do sistema deve ser diminuído e o processo de desenrolamento deve ser simplificado. Deste ponto de vista o servidor SQL possui redações livres: Express Edition e Compact Edition. Para a minimizar o tamanho, escolhi a redação do SQL Server 2005 Compact Edition. Sua instalação ocupa 1.7 Mb em um arquivo.

A redação do servidor SQL 2005 Compact Edition permite combinar estes critérios - é um desktop compacto para baixar a versão DBMS, que demonstra todas as opções necessárias quando se desloca para a versão de rede corporativa do sistema de sincronização. Você simplesmente precisa recriar o banco de dados em um redação mais poderosa do SQL server 2005 - qualquer um, a partir do Express Edition.

Escolhemos uma base de dados. Agora, o que vamos armazenar?

Nota:para uma compreensão adequada da seguinte seção você precisará ter conhecimento sobre a SQL - Linguagem de Consulta Estruturada, uma linguagem de pedidos estruturados para bancos de dados. Mais informações sobre esta linguagem estão disponíveis na Wikipédia em: https://en.wikipedia.org/wiki/SQL.

Aqui está uma imagem com tabelas do banco de dados da SQL usada.

Essas tabelas armazenam informações sobre os seguintes parâmetros do sistema:
1. Tabela CopyExtentions - bloqueio de arquivos copiados, provavelmente com caminhos relativos. Exemplos: *.ini, experts\*.mq?, experts\indicators\*.ex4.
2. Tabela DestiantionTerminal - caminhos absolutos para terminais de atualizações. Estas cópias de terminais serão atualizadas a partir de um molde - cópia do terminal fonte. Para cada perfil de usuário (ver a tabela UserProfile) há um certo número de terminais.
3. Tabela SourceTerminal - caminho absoluto para uma cópia do terminal fonte. Este terminal fonte é um molde de verificação para atualizar cópias terminais da tabela DestiantionTerminal. Cada usuário possui seu próprio terminal fonte.
4. Tabela UserProfile - lista dos usuários do sistema (perfis dos usuários). Este é um elemento de concepção de um sistema multiusuário, onde cada usuário armazena sua configuração de caminhos de terminais com um link para o seu próprio perfil. Um usuário individual pode armazenar em diferentes perfis logicamente agrupados em conjuntos de terminais. Por exemplo, você pode dividi-los em dois grupos: um é frequentemente atualizado e o segundo raramente é atualizado. Alternando entre os grupos você poderá escolher qual grupo deve ser atualizado. Perfis desnecessários podem ser bloqueados. Se um sistema contém apenas um perfil desbloqueado, ele será automaticamente escolhido como um perfil ativo em uma seção do sistema do cliente.

A imagem acima não mostra um esquema detalhado da tabela do banco de dados. Então, vamos ver mais algumas fotos de tabelas SQL com tipos de campo. Infelizmente o Editor Compacto não tem a opção de mostrar o diagrama do banco de dados, então, cada tabela é apresentada separadamente.

Abaixo está o esquema da tabela CopyExtentions:

Aqui está o esquema da tabela DestinationTerminal:

Aqui está o esquema da tabela SourceTerminal:

Aqui está o esquema da tabela UserProfile:

Assim, a imagem acima mostra os esquemas detalhados de todas as tabelas do banco de dados.

Desenvolvimento da ideologia da parte do cliente do sistema

Esta seção com detalhes técnicos provavelmente será mais interessante para desenvolvedores de sistemas profissionais do que para os usuários comuns.

A parte do cliente é, na verdade, uma aplicação .NET dos tipos de formato do Windows, isto é, o chamado cliente-exe gordo. Você não precisa instalar o cliente, basta copiar todos os arquivos para uma pasta em um disco rígido local.

Aqui está uma pequena descrição da minha ideologia do desenvolvimento de tais sistemas.
Eu acredito que esses sistemas devem ser criados no princípio do módulo. Há pelo menos duas vantagens:
1. Você começa uma aplicação final com todas as funções necessárias montadas a partir dos módulos como tijolos. Um usuário não tem que começar a dúzias de programas diferentes, ele sempre inicia um programa que contém todas as funções necessárias. Uma lista de módulos podem ser ajustados para cada usuário do sistema separadamente de acordo com a posição.
2. O princípio do módulo de desenvolvimento permite dimensionar o processo de desenvolvimento do sistema, isto é, atrair mais desenvolvedores com o aumento dos volumes de desenvolvimento.

Então, o que estou propondo exatamente? Eu criei um quadro para iniciar módulos .NET - aplicação de shell do Windows Forms para download conjuntos .NET e ativação de componentes .NET (controle de usuário), ou seja tecnicamente de qualquer classe desenvolvida a partir do sistema padrão de classe .NET 1.1 ou 2.0. Sistema.Windows.Forms.UserControl.

O shell é executado pelos conteúdos do arquivo XML config.xml que está na mesma pasta. Este shell é mostrado abaixo.

Eu acho que a vantagem é uma grande variedade de linguagens de programação e ambientes de desenvolvimento (IDE). Na verdade, eles são qualquer IDE .NET compatível com as versões .NET Framework 1.1 e 2.0, como o Borland Developer Studio 2006 (BDS) inferior. NET 1.1, Microsoft Visual Studio .NET 2003 inferior .NET 1.1, Microsoft Visual Studio 2005 inferior .NET 2.0, Visual Studio Orcas inferior .NET 2.0.

A partir de linguagens padrão de programação padrão ele possui C # e VB.NET, mas você pode usar qualquer linguagem CLR-compatível que pode criar um projeto do tipo Biblioteca de Controle do Windows e Controle de Usuário .

Abaixo está um exemplo da operação do componente desenvolvido no Visual Studio .NET 2003 e carregado em um shell.

E mais um exemplo de um componente criado no Visual Studio Orcas março 2007 CTP.

Assim, analisamos o método de desenvolvimento da parte do cliente. Agora vamos passar para a sua criação.

Sistema da parte do cliente

Use o Microsoft Visual Studio 2005 para o desenvolvimento dos componentes do sistema de sincronização.
Crie um projeto do tipo Biblioteca de Controle do Windows.

Todos os componentes do sistema (controles do usuário) estarão em um projeto. O resultado físico será o arquivo MT4TSyncUCLib.dll na pasta do projeto que contém um código binário de componentes. Vamos preencher o projeto com componentes de programa adequados.

Como resultado, obteremos vários arquivos mostrados na imagem.

Estes são os recursos do projeto, bem como componentes para cada entidade do sistema que são armazenados no banco de dados SQL: terminal de origem, muitos terminais de destino, muitos bloqueios de arquivos copiados e o componente da execução de sincronização. Além disso, o projeto tem turmas para cada entidade de enumeração, para o processo de transferência de dados e sua edição em um componente padrão PropertyGrid (uma tabela com propriedades).

Nota: O artigo não visa um ensino detalhado para desenvolver sistemas do programa. É por isso que para a parte do cliente você verá a descrição dos pontos de verificação, módulos prontos incluídos no sistema.

Abaixo está a configuração do arquivo XML config.xml descrevendo todos os componentes visíveis do sistema.

Como você pode ver, o conteúdo do arquivo config.xmldivide o menu do usuário em duas partes: o inicio adequado da sincronização e a parte administrativa da configuração do sistema. É uma divisão relativa e pode ser alterada por um usuário editando o arquivo de texto XML, sem perturbar as informações principais. Insira a tag <menu>, seção <itens> e mude o posicionamento das tags <item> com o atributo tipo="pasta" e tipo="controle" (componente personalizado final).
O sistema inclui dois perfis de usuário do menu - um completo com todos os componentes chamado "Administrador (todos)", e um curto chamado "iniciar a sincronização" apenas com o componente de inicialização.

Agora é hora de mostrar o próprio sistema.
As imagens abaixo mostram todos os componentes visíveis do sistema como no menu inferior para cima.

No início do sistema, escolha o perfil de menu: completo ou simplificado.

Aqui está o componente de gerenciamento de usuários.

O bloqueio do perfil do usuário é usado para desativar perfis desnecessários sem excluí-los. Deixando um perfil ativo você economiza tempo em escolhê-los, porque o próprio sistema vai escolher o perfil restante. Claro, você não tem que bloquear todos os perfis de usuário. O sistema não permitirá executar operações necessárias ou mostrará um erro ao chamar componentes, exigindo a seleção de um perfil ativo.

Abaixo está o componente dos bloqueios de edição de arquivos copiados.

Na minha opinião, uma lista de arquivos copiados deve ser composto dos seguintes bloqueios:

Aqui, por favor, preste atenção para o campo lógico que inclui subpastas, criado por mim para simplificar o processo de configuração do sistema. Na verdade, por exemplo, os arquivos *.mq4 e *.ex4 estão localizados no terminal em diferentes subpastas - experts, experts\ ndicadores etc. A fim de não adicionar cada subpasta, você pode indicar um registro a partir da raiz da pasta terminal, ou seja, sem um caminho relativo e habilitar o recurso de pesquisa em subpastas. O sistema irá verificar todas as subpastas do terminal de origem e copiar os arquivos com o mesmo bloqueio para uma subpasta de destino adequada.

E aqui está mais um segredo. Veja os bloqueios. O terminal inclui arquivos com a extensão mq4, mqh, mqt. Para não indicar todos eles, vamos indicar um registro com o bloqueio *.mq?, que inclui três tipos de arquivos anteriores - '?' Substitui um símbolo no bloqueio, *substitui um número gratuito de símbolos. O mesmo acontece com o bloqueio *.ex? - este é um bloqueio para os arquivos *.exe (arquivos executáveis do terminal) e *.ex4 - arquivos binários MQL. É conveniente, não é?

A seguir está o componente de gestão dos terminais de destino sincronizados.

Ao selecionar Caminho para o Terminal na borda do campo direito, você verá um botão com três pontos, clicando nele você abrirá uma janela padrão do Windows para selecionar arquivos de um disco (Open Dialog). Você pode indicar o arquivo terminal.exe em uma pasta necessária.

O componente do terminal de fonte é mais análogo ao selecionar terminais de destino.

Você pode se perguntar, por qual motivo eu separei no banco de dados as tabelas de terminais de origem e de destino. Note que para os terminais de destino, diferentemente dos de origem, você pode indicar recursos adicionais. Por exemplo, para eles não há um campo na base chamada Iniciar após Atualização. Você pode vê-lo nos componentes do terminal de destino. Isto não é processado no sistema, apesar de que para criá-lo, você precisa escrever duas linhas de código - criar um processo para um caminho completo para o arquivo terminal.exe e iniciá-lo pela segunda linha.

Como resultado de tal extensão, o sistema pode adquirir características e funções adicionais.

E, finalmente, o último componente e o mais importante do início de sincronização para o qual o sistema foi criado.

Todos os componentes anteriores foram utilizados para a configuração dos parâmetros do sistema, tornando-o maximamente flexível. Nesta componente, um clique no botão Iniciar inicia o processo de sincronização, isto é, copia os arquivos necessários. Nas Operações de Log groupbox você verá pontos de verificação da sincronização realizada, caminhos nomeados para pastas e o número de arquivos copiados.

Se houver erros no processo de cópia, eles serão mostrados no grupo de Erros de Log marcado pela cor vermelha. Eles também serão gravados no arquivo Log.txt na pasta do sistema. Tal método é utilizado separar as mensagens informativas das mensagens de erros críticos. A razão para o erro pode ser, por exemplo, um caminho errado para um terminal de origem ou de destino (inserido na base mas com a pasta excluída do disco rígido), ou um erro em um bloqueio de arquivo monopolista sem acesso mesmo para leitura.

Houve uma escolha para este bloco: destacar a cópia em um fluxo separado ou deixá-la dentro dos limites do fluxo principal do processo do sistema. A primeira variante daria uma melhor reação do sistema em ações do usuário no processo de cópia, ou seja, sem sistema "desaparece". No entanto, o fluxo operaria com prioridade mais baixa, e, provavelmente, a velocidade de cópia seria menor. Então, eu decidi deixar a cópia dentro do fluxo atual principal, tornando-o manipulador em um temporizador no componente. Devido a isto, o sistema pode responder ao clique do mouse somente em períodos de processamento de um evento do temporizador. No entanto, você pode parar o processo de sincronização clicando Pausa - o sistema irá processar o clique ao se mover sobre a lista de terminais de destino.

Conclusão

Conseguimos resolver a tarefa e obter uma ferramenta técnica - sincronização do sistema com a sua configuração de parâmetros, registrando e exibindo possíveis erros, etc. Peguei os bloqueios para os arquivos copiados do INSTALL.LOG de uma pasta raiz do terminal do arquivo , seção [CopyFiles]. Provavelmente durante a operação você vai encontrar mais arquivos com outras extensões que devem ser sincronizadas. O compartilhamento da sua opinião sobre o artigo nos comentários seria muito útil e interessante para outros usuários.

O projeto binário pronto e o código de exemplo do módulo do sistema estão anexados ao artigo.


Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/1488

Arquivos anexados |
ctrlSync_cs.txt (11.84 KB)
MT4TerminalSync.zip (56.85 KB)
TestProject.zip (42.87 KB)
Interação entre o MetaTrader 4 e o Matlab através de arquivos CSV Interação entre o MetaTrader 4 e o Matlab através de arquivos CSV
Instruções detalhadas de como organizar o intercâmbio de dados das matrizes entre o MetaTrader 4 e o Matlab através de arquivos CSV.
Teste de Visualização: Gráficos do status da conta Teste de Visualização: Gráficos do status da conta
Aproveite o processo de testes com gráficos exibindo o balanço, agora toda a informação necessária está sendo visualizada!
Verificador no terminal MetaTrader 4: Deve-se saber Verificador no terminal MetaTrader 4: Deve-se saber
A interface elaborada do terminal MetaTrader4 é de primeira linha, mas além disso, o terminal inclui um verificador de estratégias bem preparado. E enquanto o valor do MetaTrader 4 como sistema de trading é óbvio, a qualidade do verificador de estratégia só pode ser avaliada na prática. Este artigo mostra as vantagens e conveniências de testes no MetaTrader 4.
Trading automatizado não padrão Trading automatizado não padrão
Trading bem sucedido e confortável utilizando a plataforma MT4 sem análise detalhada do mercado - é possível? Esse tipo de trading pode ser implementado na prática? Acredito que sim. Especialmente em termos de trading automatizado!