
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Aqui está um exemplo de funcionamento da função hash Adler32:
O código básico da função é retirado da wikipedia e ligeiramente modificado para MQL5. Aqui está o resultado do roteiro:
Como você pode ver, todos os valores retornados por esta função são absolutamente diferentes, embora as próprias cordas não sejam muito diferentes.
Por que ulong e não uint?
E as operações com matrizes nesta função são extremamente ineficientes. É mais fácil modificar o código e dividir unicode em dois símbolos independentes - será 50 vezes mais rápido.
3681 ms vs 13822 ms a 3 milhões de corridas.... apenas 4 vezes diferente...... mas sem perda de conversãoSim, isso mesmo, porque 32 bits é um número inteiro, não um longo. Embora, francamente falando, eu modificaria a função hash para a versão de 64 bits. Afinal de contas, a probabilidade de colisão é menor, e é fácil de ajustar para o especialista mágico. Embora, por outro lado, a implementação atual seja totalmente compatível com a MQL4 (pois não tem tipo longo)
P.S. Não seria mais rápido, se eu convertesse a string em uchar array antes do looping, e já em loop, um por um, passar pelos valores da array? Mas eu acho que chamar StringGetCharacter(buf, n) cada vez no loop é muito caro.
Sim, isso mesmo, porque 32 bits é um número inteiro, não um longo. Embora, para ser honesto, eu ainda mudaria a função hash para a versão de 64 bits. Afinal de contas, a probabilidade de colisão é menor, e é fácil de ajustar para o especialista mágico. No entanto, por outro lado, a implementação atual é totalmente compatível com a MQL4 (pois não tem tipo longo)
P.S. Não seria mais rápido, se eu convertesse a string em uchar array antes do loop, e depois em loop eu tenho que passar pelos valores da array um por um? Ainda assim, acho que chamar StringGetCharacter(buf, n) cada vez no laço é bastante caro.
Entendo que este algoritmo só pode ser de 32 bits.
E quanto à conversão antes do loop - como? Você precisaria então de uma matriz... alocação dinâmica... Sim e há uma perda de informação quando se converte
Entendo que este algoritmo só pode ser de 32 bits.
3681 ms vs 13822 ms a 3 milhões de corridas.... apenas 4 vezes diferente...... mas sem perda de conversão
seria ainda mais rápido se dat % 256 operação fosse substituída por dat & 0xFF, e s = (...)%65521; decompor por s = (...); if(s>=65521) s-=65521;
А по поводу конвертации перед циклом - это как? Вам массив тогда понадобится... динамическое распределение... Да и при конвертации происходит потеря информации
Portanto, esta é a conversão regular antes do ciclo:
Mas novamente, esta função só está disponível na MQL5. A perda de informações, como eu entendo, ocorre em Unicode->ASCII, o que é bastante aceitável.
Portanto, esta é a conversão regular antes do ciclo:
Mas novamente, esta função só está disponível na MQL5. A perda de informações, como eu entendo, ocorre em Unicode->ASCII, o que é bastante aceitável.
Bem, sim... Só é aceitável para você em sua tarefa específica, embora não para o algoritmo.
Veja mais de perto o algoritmo MaHash8v64 (ulong) de 64 bits, ou talvez os dois juntos (pelo menos, eu o farei por mim).
Não há Unicode na MQL4, portanto, também não há problema.
P.S. StringGetCharacter é uma função bastante rápida, ele só retorna WORD(ushort para MQL5) da posição requerida, ou seja, não funciona com string em absoluto
Se alguém tiver um projeto de aplicação VS com janelas C++, de preferência para a versão 10. O projeto precisa utilizar uma dll em seu trabalho. Vou usá-lo como um modelo.
De preferência a dll deve ser chamada MLP2HL.dll.
Obrigado de antemão.
Se alguém tiver um projeto de aplicação VS com janelas C++, de preferência para a versão 10. O projeto precisa utilizar uma dll em seu trabalho. Vou usá-lo como um modelo.
De preferência a dll deve ser chamada MLP2HL.dll.
Agradecemos antecipadamente.
O modelo está aqui: ...amostra do MetaTrader 4\\ amostra doDLLS
A VS 2010 a converte automaticamente. O nome pode ser mudado.O modelo está aqui: ...amostra do MetaTrader 4\\ amostra doDLLS
A VS 2010 o converte automaticamente. O nome pode ser mudado.Nah, eu sei sobre o modelo dll. :)
Eu preciso de um modelo de projeto exe que contenha nele as fontes da dll, para que eu possa depurá-lo. Uma dll não é executável e deve ser chamada por alguém. Decidi estudar o Intel Parallel Studio 2011 para a VS.