Discussão sobre "Como escrever uma DLL para MQL5 e trocar dados em 10 minutos".

 

Artigo publicado Como escrever uma DLL para MQL5 em 10 minutos e trocar dados?:

Acontece que poucos programadores se lembram agora como escrever uma DLL simples, e quais são as peculiaridades de ligar sistemas heterogéneos. Em 10 minutos, vou tentar demonstrar todo o processo de criação de DLLs simples e discutir alguns detalhes técnicos da nossa implementação vinculativa. Vou mostrar o processo passo-a-passo de criação de DLLs no Visual Studio com exemplos de passagem de diferentes tipos de variáveis (números, arrays, strings, etc.) e proteger o terminal do cliente de colisões em DLLs personalizadas.

Autor: Renat Fatkhullin

 

Um artigo muito interessante. Falta por uma questão de completude:

1. Onde obtemos as citações, podem ser retiradas dos ficheiros hst?

2. Como tornar esta biblioteca compatível com a biblioteca do MateLab 2009a ou 2009b? Não têm lá também C e C++?

Um pedido muito grande.

 
  1. As citações são retiradas do terminal - são agora tanto detalhadas como profundas (10 anos ou mais).

    Em nenhuma circunstância devemos olhar directamente para os ficheiros binários dos armazéns terminais - apenas causará graves conflitos de acesso aos dados. Mesmo que os testes mostrassem "funcionou, sem problemas", ainda assim chegará um momento de acesso simultâneo a estes dados do terminal e do programa externo, e alguém irá falhar como resultado. As pessoas já tropeçaram muitas vezes nele.

  2. Bibliotecas de ancoragem em MQL5 é agora muito mais fácil, devido ao apoio transparente às convenções stdcall / cdecl nas chamadas DLL.

    Se alguém escrever um artigo bom e detalhado sobre a ligação entre MetaTrader 4/5 e Matlab via DLL, ele ganhará $200 ou mais.

    A MQL4.community já tem artigos sobre o Matcad - MetaTrader 4 pacote:

Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - Статьи по MQL4
  • www.mql5.com
Взаимодействие между MеtaTrader 4 и MATLAB Engine (виртуальная машина MATLAB) - Статьи по MQL4: особенности автоматических торговых стратегий
 
Renat, e quanto à velocidade das chamadas dll?
Preciso de ligar dois terminais para que traduzam as suas citações para Excel em tempo real.
Em MT4 poderia ser feito com DDE. Em MT5 parece que através da DLL é a única saída.
Mas se cada tick recebido for passado para DLL... Penso que será algo inimaginavelmente lento. É claro que ainda não tentei implementá-lo... mas honestamente, não quero tentar. Vai ser um pesadelo.
Em suma, vamos devolver o DDE ao MT5. É um anacronismo, mas por vezes pode precisar dele.

P.S. Obrigado por este artigo, é muito oportuno. Tenho faltado apenas um tal material.
 
Obrigado!!!
 
benik:
Renat, e quanto à velocidade de chamada da dll?

É muito fácil verificar a velocidade da chamada. Por exemplo, um cálculo aproximado pode ser feito desta forma:

_DLLAPI int __stdcall fnCalcSpeed(int var1,int var2,int var3)
  {
   return(0);
  }


#import "MQL5DLLSamples.dll"
int  fnCalcSpeed(int var1,int var2,int var3);
#import

   int calls=0;
   int ticks=GetTickCount();
   
   while(GetTickCount()-ticks<1000)
     {
      for(int i=0;i<1000;i++)
         fnCalcSpeed(1,2,3);
      calls++;
     }
   Print(calls * 1000, "вызовов в секунду");

Recebi 57.000 chamadas por segundo num Quad Q9400 @2,66Ghz. O mesmo código dá cerca de 20.000.000 de chamadas por segundo no MetaTrader 4, uma vez que não há controlo e tubagem no local.

Tentaremos definitivamente reduzir a perda nas chamadas DLL no MetaTrader 5.

 
Renat писал(а) :

57.000 chamadas por segundo

Ah, bem, se houver cerca de 50.000 chamadas por segundo, penso que é possível transmitir citações também através da DLL. Não haverá quaisquer perdas.

Obrigado pelo código.

 
Na próxima construção, a velocidade de chamadas DLL será aumentada para 20 000 000 de chamadas "vazias" por segundo, como na MQL4.
 

Se for possível exportar citações apenas através de um dll, então acontece que tem de ser colocado um guião em cada instrumento a ser exportado? E se houver muitos deles? Por exemplo, 50?

Compreendo que é possível passar citações para muitos instrumentos num único guião, mas não será um verdadeiro substituto do DDE, onde as carraças não se perdem.

 

A questão é que não temos a tarefa de "fornecer uma interface de cotação".

O nosso objectivo é criar um ambiente completo e auto-suficiente para o desenvolvimento de sistemas analíticos. Um tal ambiente para que mesmo programas de terceiros não necessitem de ser utilizados.

 
Em qualquer caso, o Mql5 é uma alegria. Obrigado