Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 855

 

É importante para mim obter uma resposta às minhas perguntas.

Para CTrade::Comprar, CTrade::Vender, CTrade:: FecharMétodos de posição

Significa que se for devolvido falso, o Retcode deve ser ignorado?

Significa que se a verdade for devolvida, o Retcode é sempre preenchido com o valor correcto?

Obrigado.

 

Colegas, ajudem-me.

Estou a tentar descobrir como trabalhar com o registo, fiz um simples Expert Advisor para o teste. A leitura de dados do registo do sistema corre sem problemas, mas há problemas de escrita, MT e falhas de memória... (((

Talvez o meu olho já esteja encharcado e não veja o óbvio...

Arquivos anexados:
TestReg.mq5  25 kb
 
Алексей Барбашин:

Colegas, ajudem-me.

Estou a tentar descobrir como trabalhar com o registo, fiz um simples Expert Advisor para o teste. A leitura de dados do registo do sistema corre sem problemas, mas há problemas de escrita, MT e falhas de memória... (((

Talvez o meu olho já esteja encharcado e não veja o óbvio...

Aqui deve ser simples. Antes e depois de cada chamada para a função API, imprimir algo para registar. Após o acidente, os registos mostrarão onde ocorreu o acidente.

 
. ... Rick D. ... .:

Deve ser bastante simples. Antes e depois de cada chamada da função API, imprimir algo em log. Após o acidente, será possível ver nos registos onde o acidente ocorreu.

Desta forma o registo nem sequer tem tempo para ser escrito, o terminal fecha com um erro. (( Presumo que haja uma fuga de memória. Mas os objectos dinâmicos não são utilizados (novos). Não sei como lidar com isso e procurar tais problemas ;(.

 
Алексей Барбашин:

Assim, o registo nem sequer tem tempo para ser escrito, o terminal fecha com um erro. (( Presumo que haja uma fuga de memória. Mas os objectos dinâmicos não são utilizados (novos). Não sei como lidar com isso e como detectar tais problemas ;(

Posso ter afinado um pouco o vosso exemplo.
Arquivos anexados:
TestReg.mq5  26 kb
 
. ... Rick D. ... .:
Afinei um pouco o seu exemplo.

Я ... chocados, agradavelmente chocados. Coloque a sua alteração em vários gráficos ao mesmo tempo para assegurar uma carga assíncrona no registo.... Tudo está a funcionar de forma consistente. Mudou-se o princípio da passagem de parâmetros no API, ou seja, onde são utilizados valores de retorno, aplicaram-se matrizes com passagem por referência, o que em mql significa passar um endereço, ou ponteiro em termos de +++. Mas eu pensava que esta abordagem, descrita há 10 anos atrás, era anacrónica, porque todos os tipos de dados simples em API são passados por referência.... de qualquer forma. Mas aparentemente foi erro meu e miopia, significa que os tipos simples não são passados de forma tão indolor para o API. Muito obrigado por me teres apontado na direcção certa! )))

 
Алексей Барбашин:

Я ... chocados, agradavelmente chocados. Coloque a sua alteração em vários gráficos ao mesmo tempo para assegurar uma carga assíncrona no registo.... Tudo está a funcionar de forma consistente. Mudou-se o princípio da passagem de parâmetros no API, ou seja, onde são utilizados valores de retorno, aplicaram-se matrizes com passagem por referência, o que em mql significa passar um endereço, ou ponteiro em termos de +++. Mas eu pensava que esta abordagem, descrita há 10 anos atrás, era anacrónica, porque todos os tipos de dados simples em API são passados por referência.... de qualquer forma. Mas aparentemente foi erro meu e miopia, significa que os tipos simples não são passados de forma tão indolor para o API. Muito obrigado por me teres apontado na direcção certa! )))

Há algum tempo atrás sob MT4 fui ensinado a passar apontadores para funções API através de arrays unidimensionais. Se algo mudou neste momento, e alguém o pode confirmar, utilizarei uma nova abordagem.

Mas os tipos continuavam a ser confusos. Em particular, os longos no Windows e no MQL5 têm tamanhos diferentes.
Talvez encontre algumas outras diferenças.

 
. ... Rick D. ... .:

Era uma vez sob MT4 que se ensinava a passar apontadores para as funções API através de matrizes unidimensionais. Se alguma coisa mudou neste momento e alguém o puder confirmar, utilizarei a nova abordagem.

Mas também teve alguma confusão com os tipos. Em particular, os longos no Windows e no MQL5 têm tamanhos diferentes.
Talvez encontre algumas outras diferenças.

Eu vi todas as diferenças)))) Muito obrigado!

A única questão é sobre o tamanho dos dados armazenados no registo. De acordo com o exemplo da documentação (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx), podemos armazenar um pouco mais de dados do que no ficheiro corrigido (ushort buff[1024];). Será que o entendo correctamente?
RegQueryValueEx function (Windows)
  • msdn.microsoft.com
Retrieves the type and data for the specified value name associated with an open registry key. To ensure that any string values (REG_SZ, REG_MULTI_SZ, and REG_EXPAND_SZ) returned are null-terminated, use the RegGetValue function. Syntax Parameters hKey [in] lpValueName [in, optional] The name of the registry value. If lpValueName is NULL or an...
 
Алексей Барбашин:

Eu vi todas as diferenças)))) Muito obrigado!

A única questão é sobre o tamanho dos dados armazenados no registo. De acordo com o exemplo da documentação (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx) é possível armazenar um pouco mais de dados do que no ficheiro fixo (ushort buff[1024];). Estou a lê-lo bem?
Correcto. Pode haver mais dados. Para dados grandes, é correcto solicitar primeiro o comprimento, depois redimensionar dinamicamente a matriz, depois obter todos os dados.
 
. ... Rick D. ... .:
Certo. Pode haver mais dados. Para dados grandes, é correcto solicitar primeiro o comprimento, depois redimensionar dinamicamente a matriz, depois obter todos os dados.

Hmmm... Provavelmente não olhei muito cuidadosamente para o API, mas não vi tal função.... E provavelmente seria útil.

Quaisquer outras dicas... talvez a questão seja demasiado... ridícula... Como traduzir um número, por exemplo, duplo, para um char de matriz? Ou seja, em alguns API é necessário passar números como um ponteiro. Os apontadores são passados como arrays unidimensionais. É claro com as cordas, as funções StringToShortArray e StringToCharArray são fornecidas para eles, mas com números ainda não entendo como convertê-los em matrizes de bytes (char).

Razão: