Discussão do artigo "Como exportar cotações do MetaTrader5 para aplicações .NET usando serviços WCF" - página 2

 
Muito obrigado! Introdução muito útil ao wcf e ao mql5
 

Também tive uma falha no testador de estratégia. No modo normal, está tudo bem.

Alguém já encontrou uma solução?

 
Obrigado por seu excelente trabalho!
 

Excelente trabalho, Alexander. Eu nunca havia programado em C# antes e estava tentando fazer com que as cotações do MT5 fluíssem no Excel sem usar o DDE-Server.

Finalmente consegui fazê-lo funcionar ajustando seu código com o MT5 de 32 bits. Próxima etapa x64.

SM

 
Recentemente, vi outra maneira gratuita de programar em C# para o MetaTrader
TradePlatform.NET
 
No momento, estou tentando implementar meu próprio wrapper c++ para minha dll c# para interopção mql5. Tenho um problema com a adição da referência da dll c# à minha biblioteca c++. Você poderia esclarecer a seguinte frase "...add the CLR support, System.dll, QExport.dll, Qexport.Service.dll to the build reference". Consegui registrar minha dll com o utilitário regasm, adicioná-la ao gac e obter um arquivo de definição de tipo .tlb. Meu problema é que não consigo encontrar nenhuma declaração #import ou #include no código-fonte que você forneceu. Seu projeto parece fazer referência às suas bibliotecas dll de alguma forma misteriosa. Alguém poderia explicar a maneira correta de adicionar uma referência à dll .NET a uma biblioteca c++? Embora essa não seja uma pergunta puramente sobre o mql5, ela está diretamente relacionada ao artigo. Estou pesquisando o assunto há um bom tempo e ainda não consigo entender como uma biblioteca c++ pode ter dlls .NET em suas "Dependências externas" sem nenhuma instrução #import. Esse é meu primeiro encontro com o c++ e, até agora, não tem sido agradável. Até pensei em converter a .dll em .lib e adicionar uma referência a ela, mas, antes de fazer qualquer coisa, decidi procurar a orientação de um especialista em COM. Estou executando o Windows 8 Ultimate x64 e compilei minhas dlls c# com o VS2012 Ultimate. Por favor, ajude o novato.
How to Exchange Data: A DLL for MQL5 in 10 Minutes
  • 2010.01.27
  • MetaQuotes Software Corp.
  • www.mql5.com
Now not so many developers remember how to write a simple DLL, and what are special features of different system binding. Using several examples, I will try to show the entire process of the simple DLL's creation in 10 minutes, as well as to discuss some technical details of our binding implementation. I will show the step-by-step process of DLL creation in Visual Studio with examples of exchanging different types of variables (numbers, arrays, strings, etc.). Besides I will explain how to protect your client terminal from crashes in custom DLLs.
 
Burton:

No momento, estou tentando implementar meu próprio wrapper c++ para minha dll c# para interopção mql5. Tenho um problema com a adição da referência da dll c# à minha biblioteca c++. Você poderia esclarecer a seguinte frase "...add the CLR support, System.dll, QExport.dll, Qexport.Service.dll to the build reference". Consegui registrar minha dll com o utilitário regasm, adicioná-la ao gac e obter um arquivo de definição de tipo .tlb. Meu problema é que não consigo encontrar nenhuma declaração #import ou #include no código-fonte que você forneceu. Seu projeto parece fazer referência às suas bibliotecas dll de alguma forma misteriosa. Alguém poderia explicar uma maneira adequada de adicionar uma referência à dll .NET a uma biblioteca c++? Embora essa não seja uma pergunta puramente sobre o mql5, ela está diretamente relacionada ao artigo. Estou pesquisando o assunto há um bom tempo e ainda não consigo entender como uma biblioteca c++ pode ter dlls .NET em suas "Dependências externas" sem nenhuma instrução #import. Esse é meu primeiro encontro com o c++ e, até agora, não tem sido agradável. Até pensei em converter a .dll em .lib e adicionar uma referência a ela, mas, antes de fazer qualquer coisa, decidi procurar a orientação de um especialista em COM. Estou executando o Windows 8 Ultimate x64 e compilei minhas dlls c# com o VS2012 Ultimate. Por favor, ajude o novato.
De forma bastante estúpida, descobri que posso fazer referência a dlls c# do projeto c++ clicando com o botão direito do mouse e escolhendo Referências... na caixa de diálogo. Há muita porcaria por aí na Web.
 
Isso é muito interessante, obrigado. Mas talvez haja opções mais simples hoje em dia.
 
shelandr1:
Muito interessante... Obrigado... Mas talvez hoje existam maneiras mais fáceis*???

O artigo é bom para falar sobre o WCF para aqueles que não estão familiarizados com a tecnologia. A propósito, verifiquei o desempenho do WCF via Internet na distância Peter - Odessa e obtive uma velocidade decente de cerca de 14.000 transações bilaterais/seg. com pacotes de 1kB. Pessoalmente, gosto da tecnologia por ser orientada a objetos, ou seja, não é transmitido um fluxo de bytes (embora seja possível fazer isso), mas instâncias de classes, que, na extremidade receptora, não precisam decodificar esse fluxo.

E com relação ao tópico de citações, é mais fácil usar o mapeamento de memória. Iniciamos uma tarefa separada com um mutex em um aplicativo .NET, a MQL4 carrega os dados na memória e redefine o mutex, após o que o aplicativo lê os dados. É mais fácil e mais rápido, e você não precisa de uma DLL. Só é necessário adicionar DLLs de sistema na MQL4 para dar suporte ao mapeamento e aos mutexes; houve um artigo recente sobre esse tópico.

 
joeykruger:

Consegui fazer com que isso funcionasse com o MT5 de 32 bits e, depois de recompilar para x64, consegui fazer com que funcionasse com o MT5 de 64 bits....no entanto, quando tento executar o EA no testador de estratégias, ambos travam espetacularmente.

Gostaria de usá-lo para exportar alguns dados de preços e indicadores para uma tabela de banco de dados, a fim de fazer algumas análises com software externo...... Alguma ideia do que poderia estar causando esse travamento? Este é o mais próximo que cheguei de uma solução funcional até agora.


Joe

Olá, Joe,

Houve algum truque especial para fazê-lo funcionar no x64? Acabei de compilá-lo para x64, mas a dll trava com erros estranhos na inicialização.