Aqui vamos nós. Eu primeiro. :)
Embora os lugares mais "mágicos" abrandem muito - mas... Talvez um dos feiticeiros do mql5 encontre uma forma de o acelerar?// Pode ver por si próprio como são lentos, o teste é dedicado a medir a sua velocidade.
Este código funciona de acordo com a sintaxe habitual da utilização de matrizes bidimensionais.
void OnStart() { float FA[5][3]; long st=GetTickCount(); for(int t=0;t<1000000;t++) { for(int i=0;i<5;i++) { for(int j=0;j<3;j++) { FA[i][j] = (i+1.5)*(j+1.3); } } } Print("====",GetTickCount()-st," ms ===="); st=GetTickCount(); C2DMagicArray MA(5,3); for(int t=0;t<1000000;t++) { for(int i=0;i<MA.SizeL();i++) { for(long j=0;j<MA.MaxR();j++) { MA[i][j] = (i+1.5)*(j+1.3); // ^ ^ Как это сделано ??? Можете повторить ? :)) } } } Print("====",GetTickCount()-st," ms ===="); st=GetTickCount(); for(int t=0;t<1000000;t++) { for(int i=0;i<MA.SizeL();i++) { for(long j=0;j<MA.MaxR();j++) { MA.Set(i,j,float((i+1.5)*(j+1.3))); } } } Print("====",GetTickCount()-st," ms ===="); for(int i=0;i<MA.SizeL();i++) { for(int j=0;j<MA.MaxR();j++) { Print( MA[i][j] ); // ^ ^ Как это сделано??? :)) Жду Вашу версию! } } }
Ainda não poderá compilar o código : os injectores estarão disponíveis mais tarde... - caso contrário, não será tão interessante. :)
Então, quem pode repetir a proeza?
Enquanto Vladimir espera por uma resposta nossa, tenho uma pergunta digna de uma proeza ;)
Como podemos fazer uma ex5 funções de importação de 32 e 64 DLLs?
Digamos que fazer um ex5 para dois terminais (32/64).
- www.mql5.com
Enquanto Vladimir espera por uma resposta nossa, tenho uma pergunta digna de uma proeza ;)
Como podemos fazer uma ex5 funções de importação de 32 e 64 DLLs?
Digamos, para fazer um ex5 para dois (32/64) terminais.
Está a pedir novamente excepções?
Não, nunca tinha pedido uma excepção antes. Provavelmente não se trata disso, trata-se mais de #ifdef
Esperava que, se Vladimir fosse capaz de sobrecarregar operações usando o seu código, o seu método pudesse funcionar para activar automaticamente a DLL o_O
Uma espécie de #importância dentro de #define
Aqui vamos nós. Eu primeiro. :)
Então, quem pode repetir a proeza?
Está a demorar muito tempo a repetir a sua proeza :) Embora haja um exemplo semelhante na documentação.
//--- перебираем строки для сложения for(int i=0;i<rows;i++) { //--- запишем результаты сложений строк матриц в массив for(int k=0;k<cols;k++) { arr[k]=this[i][k]+m[i][k]; } //--- поместим массив в строку матрицы res[i]=arr; }
Está a demorar muito tempo a repetir a sua proeza :) Embora haja um exemplo semelhante na documentação.
Portanto, faça-o por essa analogia... nada de especial! :-))
E vou dar uma vista de olhos. ;)
Como posso importar funções de 32 e 64 DLLs para um ex5?
Digamos que fazer um ex5 para dois terminais (32/64).
As funções têm nomes diferentes. E no código, colocar chamadas condicionais, dependendo da taxa de bits do terminal, a funções diferentes.
Parece-me que o terminal carrega DLL à primeira chamada. Nenhuma chamada - nenhuma tentativa de carregar e nenhum aborto espontâneo crítico.
Não vejo outras formas. A bitness terminal é devolvida por TerminalInfoInteger().
bool x64 = TerminalInfoInteger(TERMINAL_X64);
Tudo isto pode ser feito directamente na biblioteca MyLib.ex5.
void MyLibMultibitFunc() // библиотечная универсальная обёртка для DLL-функции { if(x64) { MyDll64Func(); } else { MyDll32Func(); } }
As funções têm nomes diferentes. E no código, colocar chamadas condicionais, dependendo da taxa de bits do terminal, a funções diferentes.
Parece-me que o terminal carrega DLL à primeira chamada. Nenhuma chamada - nenhuma tentativa de carregar e nenhum aborto espontâneo crítico.
Não vejo outras formas. A bitness terminal é devolvida por TerminalInfoInteger().
Tudo isto pode ser feito directamente na biblioteca MyLib.ex5.
Sim, a mesma opinião, esse terminal cria um objecto com a função dll apenas na primeira chamada.
E sobre o bitness parece ter havido algumas menções sobre a representação diferente dos números no fórum, se o campo de bit de variável dá um resultado mas será 32 se outro, será 64. Pode ser determinado pela experiência.
As funções têm nomes diferentes. E no código, colocar chamadas condicionais, dependendo da taxa de bits do terminal, a diferentes funções a que se referir.
Parece-me que o terminal carrega DLL à primeira chamada. Nenhuma chamada - nenhuma tentativa de carregar e aborto crítico.
Não, cavalheiros, não compreendem o problema. As possibilidades com TERMINAL_X64 ou _Is64 são conhecidas.
Mas infelizmente o terminal faz diferente.
- Quando se corre para o gráfico verifica a lista de DLLs utilizadas e mostra a lista de funções importadas na janela Dependências
Nas DLL's que não correspondem à bitness escreve um aviso MQL5\Libraries\somedll64.dll' não é uma versão de 32 bits
- Mas quando pressiona OK e o Expert Advisor começa, está realmente em apuros.
O terminal gera erro 193 e descarrega o EX5
O carregamento do EX5 falhou
E quero chamar a vossa atenção para o facto de que este código contém apenas a declaração DLL e nenhuma função é importada a partir dela
#importar "somedll64.dll"
#importância
- www.mql5.com
E por isso há a questão número um.
Como se importam funções de 32 bit dlls como user32.dll etc. para uma aplicação de 64? Ou existem cópias para eles no sistema com esse nome e é criado o espaço OOP ?
- 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
Sugiro publicar e analisar todo o tipo de "impossibilidades" de mql5, como esta: Compilação Condicional.
É possível mostrar a possibilidade no início(sem revelar a implementação) a fim de torturar pessoas inquisitivas e estimular a criatividade do próprio leitor.
Mas no final, é necessário (obrigatório!) revelar o segredo e fornecer uma amostra de implementação.
Claro que uma tal forma de "duas fases" está repleta de embustes, mas vou confiar em declarações honestas de trabalhadores milagrosos, que estão prontos a "recuar". :)
--
So........ AQUI VAMOS !