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.
- 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. - 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:
- www.mql5.com
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.
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.
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.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Artigo publicado Como escrever uma DLL para MQL5 em 10 minutos e trocar dados?:
Autor: Renat Fatkhullin