Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1374
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
Alguém lhe ensinou mal. A variável _LastError armazenará o valor até que ocorra o próximo erro.
Bem, olha, no início do código principal ocorre o seguinte erro
ERR_INVALID_DATETIME
4010
Valor incorrecto da data e/ou hora
E então um objecto é criado pelo código e _LastError é reescrito para
ERR_OBJECT_NOT_FOUND
4202
Objecto gráfico não encontrado
Se a verificação _LastError estiver no fim do código, como costumo fazer, receberei 4202 e simplesmente ignorá-lo-ei. Ou seja, o erro 4010 permanecerá despercebido. Onde é que estou errado?
É um requisito do mercado que não sejam recebidos erros de execução do servidor do corretor\dc.
Obrigado, não sabia disso, pensava que todos os erros eram proibidos.
Veja, no início do código principal, por exemplo, ocorre o seguinte erro:
ERR_INVALID_DATETIME
4010
Valor incorrecto da data e/ou hora
E então um objecto é criado pelo código e _LastError é reescrito para
ERR_OBJECT_NOT_FOUND
4202
Objecto gráfico não encontrado
Se a verificação _LastError estiver no fim do código, como costumo fazer, receberei 4202 e simplesmente ignorá-lo-ei. Ou seja, o erro 4010 permanecerá despercebido. Onde é que eu estou a ir errado?
Obrigado, não sabia disso, pensava que todos os erros eram proibidos.
Exactamente. Não está enganado...
Olá, alguém me pode dar uma dica?
Estou a escrever os valores de tempo de cada barra especificamente numa matriz. Há um limite de 3000 barras no gráfico.
A tarefa:
- Deslocar o conjunto de valores em cada nova barra.
Não consigo ajustá-lo para funcionar correctamente.
Estou a mudar correctamente a matriz numa nova barra se (this.m_rt-this.m_pc)=1?
Olá, alguém me pode dar uma dica?
Estou a escrever os valores de tempo de cada barra especificamente numa matriz. Há um limite de 3000 barras no gráfico.
A tarefa:
- Deslocar o conjunto de valores em cada nova barra.
Não consigo ajustá-lo para funcionar correctamente.
Estou certo em mudar a matriz num novo bar se (this.m_rt-this.m_pc)=1?
Ou seja, o tamanho da matriz deve ser exactamente 3000 e na formação de uma nova barra o índice zero deve ser sobrescrito primeiro ......... e no final escrever um novo valor?
Se entendi correctamente, qual é o objectivo do laço? Basta copiar a própria matriz no índice nulo a partir do primeiro, e depois escrever o novo valor no último índice.
Se nenhum objecto for encontrado, este é o erro de pesquisa do objecto.
ERR_OBJECT_NOT_FOUND
4202
Objecto gráfico não encontrado
Não há necessidade de alertar...
Fez alguns testes... Eis o que tenho em mente. Na MQL5, não é necessário utilizar ObjectFind() ao criar objectos.
O objecto pode ser criado sem qualquer verificação preliminar da sua existência (usando apenas o ObjectCreate). Mesmo dentro do OnTick tal código não causará quaisquer erros de _LastError.
Não sei como é implementado nas profundezas do código do sistema MQL5, talvez já exista alguma verificação de que o objecto só será criado se ainda não estiver presente. Mas acontece que pelo menos quando se cria um objecto dentro da MQL5, ObjectFind() não é necessário. E todas as suas propriedades são invariavelmente actualizadas a cada tick.
Isto não pode ser dito sobre a MQL4. A criação de um objecto sobre um já existente causará um erro 4200 ("O objecto já existe"). Significa que o uso deObjectFind() é obrigatório para a sua criação.Isto deixa-me com uma simples possibilidade de fechar as suas propriedades a partir de actualizações constantes sem gerar erros de _LastError.
Por favor, confirme as minhas conclusões.
Ou seja, o tamanho da matriz deve ser exactamente 3000 e quando se forma uma nova barra, o índice zero deve ser sobrescrito primeiro ......... e o novo valor deve ser acrescentado ao final?
Se entendi correctamente, porque preciso de um laço? Simplesmente, a matriz em si deve ser copiada para o índice nulo a partir do primeiro, e depois o novo valor deve ser acrescentado ao último índice.
Bem, sim, é claro, mas se houver uma pausa, por exemplo, um atraso, duas barras apareceram, eu escrevo-as.
Muito obrigado, compreendo, vou tentar através do CopyTime.
Fez alguns testes... Eis o que acontece. Na MQL5, não é necessário utilizar ObjectFind() ao criar objectos.
O objecto pode ser criado sem qualquer verificação preliminar da sua existência (apenas usando ObjectCreate). Mesmo dentro do código OnTick, este código não causará quaisquer erros de _LastError.
Não sei como é implementado nas profundezas do código do sistema MQL5, talvez já exista alguma verificação de que o objecto só será criado se ainda não estiver presente. Mas acontece que pelo menos quando se cria um objecto dentro da MQL5, ObjectFind() não é necessário. E todas as suas propriedades são invariavelmente actualizadas a cada tick.
Isto não pode ser dito sobre a MQL4. A criação de um objecto sobre um já existente causará um erro 4200 ("O objecto já existe"). Significa que o uso deObjectFind() é obrigatório para a sua criação.Isto deixa-me com uma simples possibilidade de fechar as suas propriedades a partir de actualizações constantes sem gerar erros de _LastError.
Por favor, confirme as minhas conclusões.
Bem, sim, parece claro, mas se houver uma pausa, por exemplo, atraso, apareceram duas barras, eu escrevo-as.
Obrigado, eu compreendo, vou tentar através do CopyTime.
Bem, se o fizer através do CopyTime, não há qualquer problema. Basta copiar a partir das actuais 3000 barras e pronto.
Como é que eu defino o nível da paragem regular no código do programa quando coloco uma ordem pendente ou abro uma posição a partir do mercado?
A forma como isto é feito manualmente é clara. Os programas para paragens não-padronizadas não são interessantes.
Obrigado de antemão.
Porque é que um tal desenho não funciona? Onde está o erro... (o tronco está vazio)
E o iene, também vazio.