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

 

Excelente trabalho!

Às vezes, o MT5 trava quando fecho um formulário, é claro, há uma exceção não tratada, mas não sei onde está o código e não consigo capturá-lo. Você tem alguma ideia?

Você tem alguma ideia?

 
Artur Zas:

O código no exemplo é específico do WinForms, mas você pode alterá-lo facilmente para uso com o WPF. Você só precisa se vincular a eventos diferentes no lado do shell do WPF. O código será um pouco diferente, mas os princípios permanecerão os mesmos.

Você também pode usar o código como está se usar apenas a janela do WinForms como um host para controles XAML. Você pode fazer isso com as novas ilhas XAML. Dessa forma, você pode usar todos os controles UWP modernos dentro de um WinForm.

Como podemos fazer o primeiro, porque estou tentando incluir a classe de janela em vez do formulário no programa Visual Studio, mas isso não funciona. Ou você conhece outro .dll capaz de trabalhar com MQL5 e WPF?
 

Boa tarde! Por algum motivo, ele não compila, o que estou fazendo de errado? Coloquei o arquivo MtGuiController.dll na pasta Libraries.


 
Copyright © 2020 ®kwancheetuck Todos os direitos reservados via. Propriedade de depósito MQL5
.
 
Vasiliy Sokolov:

Eu gostaria de lançar naves espaciais no espaço. Tenho muitas ideias, mas também não consigo colocá-las em prática.

E, em geral, é agradável: é difícil fazer o download do Studio, mas escrever o interpretador XAML por conta própria - não é nada, mas simplesmente não consigo colocar as mãos nele.

))

 
Rafil Nurmukhametov:

Boa tarde! Por algum motivo, ele não compila, o que estou fazendo de errado? Coloquei o arquivo MtGuiController.dll na pasta Libraries.


Rafil, você descobriu qual era o problema?

 
#import  "MtGuiController.dll"
string assembly = "C:\\MT5\\Form1.exe";

//+------------------------------------------------------------------+
//| Função de inicialização de especialista|
//+------------------------------------------------------------------+
int OnInit()
  {
//--- criar cronômetro
   GuiController::ShowForm(assembly, "Form1");
   EventSetMillisecondTimer(200);   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Função de desinicialização de especialista|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destruir o cronômetro
   printf("enter deinit");
   GuiController::HideForm(assembly, "Form1");
   printf("exit deinit");
   EventKillTimer();
   
  }
//+------------------------------------------------------------------+
//| Função de tique de especialista|
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| Função de cronômetro|
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   for(static int i = 0; i < GuiController::EventsTotal(); i++)
   {
      int id;
      string el_name;
      long lparam;
      double dparam;
      string sparam;
      GuiController::GetEvent(i, el_name, id, lparam, dparam, sparam);
// se (id == ClickOnElement)
      if(id == 9)
         printf("Click on element " + el_name);
   }
  }
//+------------------------------------------------------------------+

@Vasiliy Sokolov, você pode me ajudar a entender isso?

Pegue o GuiMtController.mq5, coloque a biblioteca em Libraries, o .exe em c:\\MT\\\\, defina o assembly de acordo.

Compile e receberemos uma mensagem sobre uma variável ClickOnElement indefinida. Digamos que a substituamos por qualquer número inteiro -> compilamos normalmente, mas o formulário em si não é iniciado. Obviamente, as dlls são permitidas, Metaeditor build 2361

 

Talvez outra pessoa se depare com isso

Aqui está o local no artigo

"Como você pode ver, o compilador entende as enums externas definidas nas bibliotecas de rede e sabe como trabalhar com elas."

Ainda não sei por qual motivo, mas o compilador teimosamente se recusa a entender as enums do C#, então arrastamos a enum do C# para o Mql5 e tudo funciona.

Só que, Vasily, você colocou os botões Comprar e Vender no painel de negociação de forma oposta )).

Mas, em geral, a coisa mais legal que aconteceu. Obrigado por seu trabalho árduo!)

Документация по MQL5: Основы языка / Типы данных / Целые типы / Перечисления
Документация по MQL5: Основы языка / Типы данных / Целые типы / Перечисления
  • www.mql5.com
После объявления перечисления появляется новый целочисленный 4-байтовый тип данных. Объявление нового типа данных позволяет компилятору строго контролировать типы передаваемых параметров, так как  перечисление вводит новые именованные константы. В приведенном примере именованная константа January имеет значение 0, February имеет значение 1...
 
Nikolai Karetnikov:

talvez outra pessoa tropece

este é o local no artigo

"Como você pode ver, o compilador entende as enumerações externas definidas nas bibliotecas de rede e sabe como trabalhar com elas."

Não sei por qual motivo, mas o compilador se recusa obstinadamente a entender as enumerações do C#, então arrastamos a enumeração do C# para o Mql5 e tudo funciona.

Só que, Vasily, você colocou os botões Comprar e Vender no painel de negociação ao contrário))

Mas, em geral, o resultado foi muito legal. Obrigado por seu trabalho árduo!)

Espere para ficar animado. Verifique se as tabelas funcionam. Esse problema ainda não estava claro. Houve grandes atrasos na saída de dados em alta frequência.
 
Реter Konow:
Espere para ficar animado. Verifique se as tabelas estão funcionando. Esse problema não ficou claro. Houve grandes atrasos na saída de dados em alta frequência.

Boa tarde! )

Peter, o que você quer dizer com "eram" e o que quer dizer com "alta"? Houve uma discussão sobre esse tópico em algum lugar ou algo assim