Discussão do artigo "Criando interfaces gráficas para EAs e indicadores baseados no .Net Framework e C#"

 

Novo artigo Criando interfaces gráficas para EAs e indicadores baseados no .Net Framework e C# foi publicado:

Uma maneira simples e rápida de criar janelas gráficas usando o editor do Visual Studio, e integração no código MQL do EA. O artigo é destinado para um vasto público de leitores e não requer conhecimentos de C# e .Net.

O testador de estratégias no MetaTrader 5 possui vários recursos que devem ser considerados pelo desenvolvedor de interfaces gráficas na linguagem de programação MQL. A principal característica está no fato de que a função de processamento de eventos gráficos OnChartEvent não é chamada. Isso é lógico, porque o formulário gráfico pressupõe trabalhar com o usuário em tempo real. No entanto, há um tipo de painel que seria extremamente interessante de implementar no testador. Trata-se do chamado players de negociação, com o qual as pessoas podem testar suas estratégias de negociação no modo manual. Por exemplo, num modo acelerado o testador de estratégias gera os preços atuais de mercado, enquanto o usuário clica nos botões para comprar ou vender, simulando suas ações de negociação no histórico. O TradePanel criado por nós pertence a este tipo de painel. Apesar de sua simplicidade, pode ser um muito bom player de negociação simples com a funcionalidade mais necessária. 

Mas pensemos em como o nosso painel funciona no testador de estratégias do MetaTrader 5. A janela gráfica do painel TradePanel existe na forma de um Net. de assembly independente. Portanto, não depende nem do ambiente atual do MetaTrader 5 e nem do próprio terminal. Estritamente falando, ele pode ser executado a partir de qualquer programa, enquanto a montagem localizada no contêiner exe pode ser iniciada, inclusive, pelo próprio usuário.

Assim, nosso programa não precisa chamar OnChartEvent. Além disso, podem-se atualizar dados na janela e receber novas ordens de usuários em qualquer função-manipulador de eventos que seja executada regularmente no testador de estratégias. OnTick e OnTimer pertencem a esse tipo de funções. É através deles que o nosso painel opera. Assim, ele também funciona bem no testador de estratégias, pois foi desenvolvido para trabalho em tempo real. Não é necessário fazer alterações. Verifiquemos essa afirmação executando nosso painel no testador e fazendo várias operações:

Autor: Vasiliy Sokolov

 

Esta imagem

você pode ver claramente o que precisa fazer para ver o gráfico de saldo/patrimônio ao negociar visualmente.


ZY O que são esses dois botões adicionais no canto superior direito de cada janela?

 
fxsaber:

Nesta imagem.

você pode ver claramente o que precisa fazer para ver o gráfico de saldo/patrimônio ao negociar visualmente.

Para quem tem dois monitores, isso é realmente muito conveniente. Eu tenho dois, mas tive que fazer esse layout para a foto.

fxsaber:

O que são esses dois botões adicionais no canto superior direito de cada janela?

É um utilitário adicional para trabalhar de forma conveniente com dois monitores. Nesse caso, ele não deveria estar no gif, mas você não consegue ver tudo.

 
Найдите скомпилированный файл MtGuiController.dll в папке MtGuiController\bin\debug и скопируйте его в каталог библиотек MetaTrader 5
Essa não é a versão de depuração?
 
A primeira linha informa ao compilador que serão usadas chamadas para открытым статическим методам класса, располагающимся в MtGuiController.dll. Observe que não é necessário especificar quais métodos chamaremos nesse assembly. O compilador fará esse trabalho para nós no modo automático.
É possível obter a lista desses métodos no modo editor?
 

bom artigo, mas, por algum motivo, acho que o nível não é para iniciantes, embora a instrução "o quê" e "como" seja muito detalhada, obrigado!

ZY: um formulário com botões e sem dll de terceiros ( GuiController.dll ) o usuário pode criar um formulário com botões usando as ferramentas do VS2017 literalmente em 2 cliques: criar projeto - biblioteca de classes Net e, em seguida, projeto - adicionar formulário do Windows.

Na primeira janela "Class Library", escrevemos um código que inicia um formulário gráfico em poucas linhas, aproximadamente assim:

using System;
using System.Threading; 
public class MainForm
    {
        static Form1 mainform;
        static Thread threadmainform;
        
public static void Init()
        {
            if (mainform == null)
            {
                threadmainform = new Thread(NewForm);
                threadmainform.Start();
            }
        }

public static void DeInit(int reason)
		{
            if (reason == 3 || reason == 5) return;
            if (mainform!=null) {mainform.Close(); Thread.Sleep(1000);}
			if(threadmainform!=null) threadmainform.Join();
			mainform=null;
			threadmainform=null;
		}

private static void NewForm()   {   mainform = new Form1();   mainform.ShowDialog();   }
}

Se você compilar essas dez linhas no VS2017, no MT5 já poderá criar um formulário gráfico (todos os elementos que serão adicionados ao formulário serão "clicáveis") e poderá excluí-lo(DeInit ()) , restando apenas estabelecer a troca de dados entre o formulário - que "gira" em um thread separado - e o próprio MT5

Com o MT4, tudo é muito mais triste, mas você ainda pode fazer com que uma dll escrita em .Net seja executada.


 

Obrigado pelo exemplo do github. O mesmo princípio é possível com o MT5?

#include <Include.mqh> // Caminho do ShareProject

Quando o ME sincroniza automaticamente o arquivo mqh pelo comentário prescrito no caminho?

 

Obrigado pelo artigo! Tudo está bem explicado. Eu não li apenas sobre as entranhas do C#. Mas você realmente não precisa conhecê-lo para criar um formulário.


Considerações sobre o aplicativo

  • A partir do aplicativo, é possível interromper a execução de uma única passagem, mesmo que não esteja no modo de visualização. Por exemplo, um aprendizado MO em loop está sendo executado no OnTester. Com o formulário, é conveniente interrompê-lo quando você achar necessário.
  • Como se vê, é muito fácil escrever uma API de negociação completa para C#. Em seguida, escreva todos os Expert Advisors em C# e execute-os no Terminal/Tester. E, com base nessa API, você pode criar terminais alternativos com skins personalizados, por exemplo. Grandes oportunidades para aplicativos destinados a usuários comuns. Você pode coletar os desejos deles e implementá-los: gráficos de ticks, testadores, etc.
  • É possível incorporar facilmente o painel em seu EA como um complemento à negociação manual no Visualizador. Isso permite que você emule situações estressantes para o consultor de algo (excluiu a ordem dele, colocou a sua própria, etc.). Mas o que é ainda mais agradável é que todas as ações manuais podem ser facilmente gravadas e reproduzidas sem o formulário e, consequentemente, sem pressionar botões. Isso permite que você depure o EA no modo de depuração para garantir a estabilidade da intervenção manual.


Como a interação funcionará se vários desses consultores de formulário forem executados?

 
fxsaber:

Obrigado pelo exemplo do github. O mesmo princípio é possível com o MT5?

#include <Include.mqh> // Caminho do ShareProject

Quando o ME sincroniza automaticamente o arquivo mqh de acordo com o comentário no caminho?

O que você descreveu poderia ser um recurso muito interessante e interessante para o ME, mas é claro que não funciona dessa forma.

No entanto, a MQL4 e a MQL5 são diretamente compatíveis com o GitHub.

Há também utilitários, principalmente o Git Bash, que permitem que você faça tudo o que o VisualStudio tem e muito mais. Eles funcionam perfeitamente com projetos MQL. O que dizer se livros inteiros são escritos com a ajuda do github?

De fato, o desenvolvimento de projetos MQL no github tem sido apoiado há muito tempo e em alto nível.

 
Vasiliy Sokolov:

O que você descreveu poderia ser um recurso muito interessante e interessante para o ME, mas é claro que não funciona dessa forma.

No entanto, a MQL4 e a MQL5 são diretamente compatíveis com o GitHub.

Há também utilitários, principalmente o Git Bash, que permitem que você faça tudo o que o VisualStudio tem e muito mais. Eles funcionam perfeitamente com projetos MQL. O que dizer se livros inteiros são escritos com a ajuda do github?

De fato, o desenvolvimento de projetos MQL no github tem sido apoiado há muito tempo e em alto nível.

Infelizmente, tudo isso é uma floresta escura para nerds como eu. Seu artigo mostra um aplicativo interessante do github. Provavelmente é apenas 1% de seus recursos, mas é muito útil.

Não entendi como ele pode ajudar na MQL5 a partir dos links fornecidos. Provavelmente, ele é obrigatório para programadores, mas há aqueles que estão longe de programar, como é o meu caso.

Se houvesse um artigo sobre esse tópico para MQL5, seria útil.

 
fxsaber:

Obrigado pelo artigo! Tudo está bem explicado. Eu não li apenas sobre as entranhas do C#. Mas você realmente não precisa conhecê-lo para criar um formulário.

Reflexões sobre o aplicativo

  • 1) A partir do aplicativo, é possível interromper a execução de uma única passagem, mesmo que não esteja no modo de visualização. Por exemplo, um aprendizado de MO em loop está sendo executado no OnTester. Com o formulário, é conveniente interrompê-lo quando você achar necessário.
  • 2) É evidente que é muito fácil escrever uma API de negociação completa para C#. Em seguida, escreva todos os Expert Advisors em C# e execute-os no Terminal/Tester. E, com base nessa API, você pode criar terminais alternativos com skins personalizados, por exemplo. Grandes oportunidades para aplicativos destinados a usuários comuns. Você pode coletar os desejos deles e implementá-los: gráficos de ticks, testadores, etc.
  • 3) É possível incorporar facilmente o painel em seu EA como um complemento à negociação manual no Visualizador. Isso permite que você emule situações estressantes para o consultor de algo (excluiu a ordem dele, colocou a sua própria, etc.). Mas o que é ainda mais agradável é que todas as ações manuais podem ser facilmente gravadas e reproduzidas sem o formulário e, consequentemente, sem pressionar botões. Isso permite que você depure o EA no modo de depuração para garantir a estabilidade da intervenção manual.

4) Como a interação funcionará se vários desses consultores de formulário forem executados?

1) Sim, com certeza. O chip de aplicativo externo permite que você faça todas essas coisas.

2) De fato, é possível escrevê-lo. Mas não é uma boa ideia colocar todo o ambiente de negociação em C#. É melhor escrever Expert Advisors em MQL puro, mas é possível equipá-los com os "enfeites" necessários em c#.

3) Sim, isso pode ser feito.

4) Ele pode ser configurado de diferentes maneiras. Ele é feito de modo que você precise especificar o nome do formulário e o conjunto no qual ele está localizado. Ou seja, agora você pode executar um, dois ou cinco formulários. Não há restrições.