Discussão do artigo "Guia Prático MQL5: Implementando um Array Associativo ou um Dicionário para Acesso Rápido ao Dados" - página 3
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
Decidi usar essa classe em meu EA como um contêiner de estratégias do tipo (StrategyGUID, Strategy), em que StrategyGUID é um identificador do tipo ulong; Strategy é uma estratégia criada com base em uma classe com herança de CObject.
Dessa forma, declaro as variáveis necessárias, incluindo o CDictionary StrategyBook - o livro de estratégias ativas; crio as estratégias necessárias Strategy01, Strategy02, que, na função OnInit() do EA, iniciam vários parâmetros, inclusive atribuindo-lhes GUIDs exclusivos. No final de OnInit(), decido salvar as estratégias no StrategyBook chamando o código
StrategyBook.AddObject(Strategy01.strGUID,Strategy01);
StrategyBook.AddObject(Strategy02.strGUID,Strategy02);
E então recebo o erro "StrategyXX - parameter conversion not allowed" em ambas as linhas.
Com base em minha experiência com C#, tudo foi feito corretamente. Mas, na MQL5, recebo esse erro.
A que isso pode estar relacionado?
Decidi usar essa classe em meu EA como um contêiner de estratégias do tipo (StrategyGUID, Strategy), em que StrategyGUID é um identificador do tipo ulong; Strategy é uma estratégia criada com base em uma classe com herança de CObject.
Dessa forma, declaro as variáveis necessárias, incluindo o CDictionary StrategyBook - o livro de estratégias ativas; crio as estratégias necessárias Strategy01, Strategy02, que, na função OnInit() do EA, iniciam vários parâmetros, inclusive atribuindo-lhes GUIDs exclusivos. No final de OnInit(), decido salvar as estratégias no StrategyBook chamando o código
StrategyBook.AddObject(Strategy01.strGUID,Strategy01);
StrategyBook.AddObject(Strategy02.strGUID,Strategy02);
E então recebo o erro "StrategyXX - parameter conversion not allowed" em ambas as linhas.
Com base em minha experiência com C#, tudo foi feito corretamente. Mas, na MQL5, recebo esse erro.
A que isso pode estar relacionado?
Pode haver vários motivos. O mais provável é que haja incompatibilidade de tipos ou trabalho incorreto com ponteiros. Além disso, não podemos excluir as peculiaridades do trabalho com métodos de modelo (eles também têm suas próprias nuances).
Em geral, é melhor usar um mecanismo de negociação pronto, pois você economizará muito tempo e nervosismo: https://www.mql5.com/pt/articles/2166.
Sim, foi isso que acabei decidindo fazer.
Novo artigo MQL5 Cookbook: Implementing an Associative Array or a Dictionary for Quick Data Access (Implementando uma matriz associativa ou um dicionário para acesso rápido a dados ) foi publicado:
Autor: Vasiliy Sokolov
Obrigado por todo o esforço, mas não consigo fazer com que nenhum dos exemplos de código funcione.
Parece que Dictionary dict; deveria ser CDictionary dict;
Que tal um exemplo simples que funcione?
Em relação ao novo MT4 (Build 1080, 12 de maio de 2017), esses erros ocorrem durante a compilação e impedem a execução:
'm_array' - estruturas contendo objetos não são permitidas Dictionary.mqh 303 25
Olá,
Como já foi dito por outra pessoa, não há nenhum exemplo compilável.
Apenas um arquivo com comentários em russo.
Estou usando a biblioteca de Vasiliy com sucesso. É de grande ajuda!
Lembro-me de que também tive alguns erros de compilador e consegui corrigi-los. No entanto, não sei dizer quais eram e o que eu fiz.
E como fico extremamente irritado com a formatação do código MQL5 e sempre reformato tudo para um formato C++ moderno (recuo adequado, evitando colchetes desnecessários, sem confusão de comentários e assim por diante), é impossível dizer qual foi a mudança real no código. Tudo o que me lembro é que as alterações foram pequenas.
Caso você queira usar a biblioteca formatada corretamente, aqui está ela:
(Observe que estou usando tabulações, portanto, a formatação parece estar quebrada aqui, mas no MetaEditor não está!)
Acho que encontrei um erro ao excluir um elemento e tentar chegar ao último elemento:
O erro no CDictionary.mqh será:
acesso deponteiro inválido em 'Dictionary.mqh' (463,9)
Alguém pode confirmar isso? Alguma ideia de como consertar?