Erros, bugs, perguntas - página 650

 
Rosh:
Escrever ao Service Desk com todos os detalhes (anexar um perito se necessário). Será mais rápido.
Ok. Fá-lo-ei com toda a certeza hoje. Mas, de qualquer forma, vou fazer-lhe algumas perguntas para desenvolvimento geral. :)
mql5:
Pode estar a usar um grande tamanho de variáveis de funções locais, por exemplo, matrizes.
Na construção seguinte, para o terminal de 32 bits, pode controlar o tamanho da pilha com a propriedade de compilação correspondente #propriedade de pilha

É apenas uma questão de terminais de 32 bits? Eu tenho x64. Como posso entender "...grande tamanho de variáveis de funções locais, por exemplo, matrizes..."? "Quão grande deve ser para a pilha ficar transbordada no final?
 
tol64:
Será isto apenas um problema com terminais de 32 bit? Eu tenho x64. Como entendo "...grande tamanho de variáveis de funções locais, por exemplo, matrizes... "Quão grande deve ser para que a pilha acabe por transbordar?
Não, não se trata apenas de um problema de um terminal de 32 bits. Mas a solução para o terminal de 32 bits está pronta por agora, enquanto no terminal de 64 bits ainda está limitada por um limite de pilha de 256Kb.
Mas se o programador não especificar manualmente o tamanho da pilha necessária utilizando uma propriedade, o EX5 no terminal funcionará com o tamanho de pilha predefinido ( 256Kb).

Sobre o grande tamanho.
Cada declaração de variável dentro de uma função (excepto para variáveis estáticas) atribui espaço na pilha, e a atribuição de espaço na pilha para variáveis locais ocorre em cada chamada.

Portanto, se uma função tem 64Kb variáveis locais, o espaço da pilha é suficiente para 3 chamadas aninhadas dentro dela, e o transbordo da pilha ocorre a 4 chamadas (como parte da pilha é utilizada para as necessidades internas do terminal). Portanto, se houver necessidade de grandes dados locais, é melhor usar memória dinâmica - quando se entra na função, a memória para necessidades locais é atribuída no sistema (novo, ArrayResize) e quando se sai da função, a memória é apagada (delete, ArrayFree).
 

Olá!

Não consigo compreender este problema.

filehandle=FileOpen("My\\Symbols.txt",FILE_READ|FILE_TXT|FILE_ANSI);

Funciona bem na depuração, o ficheiro é legível em MT5\MQL5\File

Ao correr no testador, diz "Symbols.txt file could not be opened, error 5004" e Handel -1

Também a coloquei na pasta de ficheiros do agente MT5000MQL5, mas não a volta a ver e mata o ficheiro lá de todo).

Ao mesmo tempo, diz a descrição:

"O ficheiro é aberto na pasta do terminal do cliente na subpasta MQL5\files (ou catalog_agent_testing\MQL5\files em caso de teste)".

"A função procura um ficheiro na pasta local (MQL5\Files ou MQL5\Tester\Files em caso de teste)".

Não tenho a pasta "MQL5Tester\Files" como diz no Help?

O que estou a fazer mal e como posso ultrapassar este problema?

Obrigado pela sua resposta.

 

Tente usar o #property tester_file:

#property tester_file "My\\Symbols.txt"
 
Rosh:

Tente usar o #property tester_file:

Ugh-uh-x Parecia ajudar no agente MT5000MQL5 Voltou a colocar o ficheiro, depois funciona com a propriedade.

Obrigado!

 
Fia:

Tentei novamente o testador com Handle -1 e erro 5004.

Não sei o que mais poderia ser, obviamente não consegue encontrar o ficheiro, mas consegue ver tudo quando se depura.

Copiar o ficheiro para MQL5\Tester\Files ( criar uma pasta de antemão).
Документация по MQL5: Файловые операции / FolderCreate
Документация по MQL5: Файловые операции / FolderCreate
  • www.mql5.com
Файловые операции / FolderCreate - Документация по MQL5
 
uncleVic:
Copiar o ficheiro para MQL5\Tester\Files ( criar uma pasta de antemão).

Tentei, criei tais pastas manualmente, coloquei o meu ficheiro (com subpasta, #priva_arquivo do testador de propriedades desactivado), não o encontra de forma alguma no testador.

E se ligar o #property tester_file, ele funciona de forma estranha.

No entanto, de vez em quando, ele trava uma pasta e um ficheiro no ficheiro MT5000MQL5, provavelmente devido ao facto de que se desactivar #property tester_file ele racha tudo lá.

Sim, agora descobri que se eu mudar o código (em qualquer lugar) no arquivo mq5 (do qual txt é chamado), então compilá-lo e ir ao tester, ele racha tudo no arquivo MT5tester000MQL5

É um milagre, mas pelo menos funciona - e isso é bom.

 
Fia:

Tentei, criei tais pastas manualmente, coloquei o meu ficheiro (com subpasta, #priva_arquivo do testador de propriedades desactivado), não o encontra de forma alguma no testador.

E se ligar o #property tester_file então, estranhamente, funciona.

No entanto, de vez em quando, ele trava uma pasta e um ficheiro no ficheiro MT5000MQL5, provavelmente devido ao facto de que se desactivar #property tester_file ele racha tudo lá.

Sim, agora descobri que se eu mudar o código (em qualquer lugar) no arquivo mq5 (do qual txt é chamado), então compilá-lo e ir ao tester, ele racha tudo no arquivo MT5tester000MQL5

É um milagre, mas pelo menos funciona, e isso é bom.

Se W7, colocar o ficheiro no directório Documento e Configuração/.../MetaQuotes/Common/Files, ou desactivar o UAC

PS verifica novamente a correcção da ortografia do nome, em que layouts está escrito o nome (melhor certamente copiar), disponibilidade de espaço no fim do nome e assim por diante.

 
Urain:

Se W7, colocar o ficheiro em Document and Setting/.../MetaQuotes/Common/Files, ou desactivar o UAC

PS verifica novamente a correcção da ortografia do nome, em que está escrito o nome (é melhor copiar), a disponibilidade de espaço no fim do nome e assim por diante.

Realmente tenho Win7 64bit, mas UAC é zero.

C:Documentos e Definições Todos os Utilizadores Citações de MetaQuotes Arquivos Comuns Coloquei lá a minha pasta e ficheiro, não ajudou, não encontra o ficheiro no testador.

Sim, penso que tudo está correcto com o nome, em #property tester_file nos trabalhos de teste (e nos trabalhos de depuração em qualquer ), mas no testador não há hipótese, excepto como apenas através de #property tester_file.

E com o problema acima mencionado de matar o ficheiro depois de mudar e compilar o mq5 (tenho tal disposição).

 

Tem uma mentira gritante escrita na sua ajuda:

CLBufferWrite

Escreve uma matriz para o tampão OpenCL.

CLBufferWrite(
intbuffer//handle to OpenCL buffer
const void&data[]// matriz de valores
uintoffset=0// a partir do qual o elemento, por defeito, é do primeiro
tamanho vazio=WHOLE_ARRAY// número de valores, toda a matriz por defeito
);

Parâmetros

......

compensar

.....

tamanho

[em] O número de valores a serem escritos. Por defeito, todos os valores da matriz são escritos no buffer do OpenCL.

......

Na realidade escreve o número de bytes (!!!), não os valores de todo.

Passei duas noites a depurar o indicador, até o descobrir! E porquê? - Porque acreditei na sua escrita...

FIXE AGORA!!! :))

// Não o descobriu a tempo, porque o padrão ( size=WHOLE_ARRAY) funciona correctamente.