Biblioteca de classes genéricas - bugs, descrição, perguntas, recursos de uso e sugestões - página 14
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
Quanto a mim, se um objeto não implementa alguma interface ou método, é melhor gerar uma exceção do que ficar em silêncio e depois procurar a origem do problema.
E, no final, você tem uma grande auto-bomba e uma ocultação evidente do problema com o código.
Pela mesma razão, a comparação é incorrecta. Como você pode comparar CHashMap personalizado e trabalhar com as funções do sistema para obter um ambiente de negociação?
Continue escrevendo código sub-ótimo, uma vez que você não aceita argumentos de ferro.
Fórum sobre negociação, sistemas de negociação automatizados e testes estratégicos
Biblioteca de classes genéricas - bugs, descrição, problemas, casos de uso e sugestões
fxsaber, 2017.12.08 22:46
Para um caso de teste mais realista (2000 negócios e 1.000.000 acessos únicos ao histórico) o resultado é o seguinte
Quase 100ms de poupança por passe! Se, digamos, fizermos Optimização para 10.000 passes completos, a variante Hash acabaria 15 minutos mais rápida.
Em suma, sim, é um nobre tiro no escuro e aparente encobrimento do problema com o código.
Continue escrevendo código sub-ótimo se você não aceitar argumentos de ferro.
Alguns disparates ambos escreveram, não compreendendo minimamente que o HashMap na sua forma actual não funciona para a estruturação e união.Querida, se você fuma alguma coisa e não consegue ler cuidadosamente o posto do interlocutor - então o problema é seu e não é todo mundo que precisa de tratamento, mas apenas a pessoa doente.
Repito: ninguém levantou a questão da estruturação e união, ninguém contestou suas idéias sobre o assunto....
Foi especificamente sobre esses termos de código.
Da biblioteca padrão:
E os teus acrescentados:
Fórum sobre negociação, sistemas de negociação automatizados e testes estratégicos
Biblioteca de classes genéricas - bugs, descrição, problemas, casos de uso e sugestões
fxsaber, 2017.12.08 21:17
Acrescentou outra sobrecarga
O que você estava a tentar transmitir:
O haxixe é usado para acelerar a procura de itens em um recipiente. A velocidade é O(1) - não depende de quantos itens são adicionados ao recipiente.
Situação - o usuário usa a sua própria classe como chave.
1) Devido à ausência de herança múltipla de interfaces(não há interfaces no MQL5), o usuário não pode herdar do IEqualityComparable;
2) O usuário também esquece de especificar uma especificação explícita para a função de modelo GetHashCode.
As consequências - o usuário não é informado de que omitiu algo e o código é executado com sucesso sem gerar exceções(não há exceções no MQL5).
A velocidade cai de O(1) com uma constante de cálculo de hash média para O(n) com uma constante bastante grande em comparação.
Somente com um grande número de elementos em um container e perdendo muito tempo procurando por um gargalo na implementação, o usuário pode ser capaz de encontrar a causa dos problemas - a falta de uma especificação explícita do GetHashCode para sua classe.
Sem ofensa, obrigado.
Caro Senhor, se você fuma alguma coisa e não consegue ler cuidadosamente o posto do interlocutor, o problema é seu e não são todos os outros que devem ser tratados, mas apenas a pessoa doente.
Aparentemente não há maneira de os abstémios fecharem a luva.
Embora não fosse originalmente uma coleção de exemplos, ainda sinto a necessidade de adicionar alguns exemplos para que aqueles que ainda não utilizaram os algoritmos em sua prática, possam entender porque é conveniente e, o mais importante, simples.
Exemplo 1: Associando um erro de tempo de execução com a descrição de sua string
Muitas vezes é necessário traduzir as constantes numéricas em literais de corda. Por exemplo, é melhor duplicar os códigos de erro com uma legenda clara descrevendo o erro. Esta não é uma tarefa muito difícil e normalmente é resolvida por uma função especial ou caso de interruptor ou muitos "se":
Qualquer solução desse tipo tem direito à vida. Mas vamos descrever aqui uma solução baseada no CHashMap e mostrar-lhe as suas vantagens.
O algoritmo pode parecer-se com isto:
- Nós criamos um array associativo do código <bug - descrição do bug> tipo;
- Adicione possíveis códigos de erro e sua descrição a este dicionário;
- Dirigimo-nos ao dicionário directamente e sem intermediários para obter a descrição do erro através do seu código
Este código parece ser o seguinte:Uma vez que os códigos de erro são preenchidos, eles são acessados com apenas uma linha, sem utilizar funções diferentes. Além disso, deixe-me lembrar que em alguns casos este código funcionará ainda mais rápido do que várias dezenas de ifs, já que o endereçamento ao erro necessário ocorre diretamente, com a velocidade média de O(1).
Uma vez preenchidos os códigos de erro, eles podem ser acessados com apenas uma string, sem o uso de diferentes funções.
ErrorToString terá que ser escrito de qualquer forma. Portanto, o argumento, como vantagem, é fraco.
Além disso, deixe-me lembrar que em alguns casos este código irá funcionar ainda mais rápido do que várias dezenas de ifs, pois o endereçamento ao erro necessário ocorre diretamente, com velocidade média O(1).
Mas isto é uma vantagem óbvia.
Há várias vantagens na solução proposta para o dicionário, a mais importante das quais não é totalmente óbvia à primeira vista. Quando escrevemos códigos como este:
Estamos conectados ao próprio código do Expert Advisor. Quando preenchemos o dicionário, fazemo-lo dinamicamente, ou seja, no momento da execução do programa. A abordagem dinâmica dá-nos mais flexibilidade. Por exemplo, os códigos de erro podem estar contidos num ficheiro especial, por exemplo ErrorsCode.txt:
No momento de lançar o programa pode ler este arquivo e preencher o dicionário com os códigos necessários e depois retornar a variante necessária da cadeia de caracteres para o usuário. Pode haver vários arquivos desse tipo: um arquivo por idioma. Desta forma, a localização pode ser realizada, onde são exibidos códigos de erro no idioma do usuário, dependendo do idioma do usuário. Além disso, o próprio utilizador pode traduzir uma vez esses códigos de erro para a sua própria língua e o próprio programa "aprende" a emitir a mensagem desejada na sua língua. É assim que a maioria dos programas são localizados, quando a tradução de um menu está contida em um arquivo de texto e o programa o carrega, dependendo das configurações. Ou seja, sem qualquer recompilação do programa e sem alterar o seu algoritmo, podemos influenciar significativamente a apresentação dos seus resultados.