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
Que construção você usou? Como parece haver um possível bug na última construção com a função"ObjectDelete()", pode haver também problemas com o "ObjectFind()"!
MT5: Construir 1495 (09 Dez 2016)
MT5: Construir 1495 (09 Dez 2016)
Eu corri seu código no build 1491 e obtive resultados semelhantes:
Eu corri seu código no build 1491 e obtive resultados semelhantes:
Isto poderia ser mais semântico do que um bug.
O objetivo do ObjectDelete é "remover o objeto com o nome especificado".
No final da execução da função, ainda há um objeto chamado "Objeto não-existente" no gráfico? Não... Então, este sucesso é um sucesso?
Olhando de outra forma, o ObjectDelete removeu um objeto chamado "Objeto Não Existente"? Não... então este fracasso é um fracasso?
Você mede o sucesso pelo resultado ou pela ação tomada?
Talvez um falso seria esperado se o objeto nomeado permanecesse no gráfico após a execução da função. Caso contrário, foi um sucesso.
Talvez o que você diz seja verdade, mas como estamos migrando de MQL4 para MQL5, esperamos ver o mesmo resultado ou pelo menos um resultado que esteja claramente escrito no valor de retorno da referência.
Passando este primeiro problema, testei a função ObjectMove, e novamente estou obtendo um resultado VERDADEIRO também! isto vai além de sua explicação de que, como o objeto não está disponível no final, então o verdadeiro está correto.
com ObjectMove em um objeto que não está disponível, ele deve retornar falso!
moveResult=ObjectMove(ChartID(), "linha de tendência não disponível",1,tempo[4950],baixo[4980]));
Print(__LINE__,"-moveResult=",moveResultado);
2016.12.11 17:22:39.367 Far-Test-ChangeTrendLine (EURUSD,H1) 44-moveResult=verdadeiro
oi , estou escrevendo um indicador em MQL5, mas o que quer que eu escreva como nome de string ObejectDelete retorna verdadeiro ! mesmo em um gráfico vazio, sem objetos!
Leia a descrição das funções dos objetos
Este é o grupo de funções destinadas a trabalhar com objetos gráficos relacionados a qualquer gráfico especificado.
As funções que definem as propriedades dos objetos gráficos, assim como as operações ObjectCreate() e ObjectMove() para criar e mover objetos ao longo do gráfico são realmente usadas para enviar comandos para o gráfico . Se estas funções forem executadas com sucesso, o comando é incluído na fila comum dos eventos do gráfico. Mudanças visuais nas propriedades dos objetos gráficos são implementadas ao lidar com a fila de eventos do gráfico.
Ler Descrição das funções do objeto
Isso significa que o comando "Apagar este objeto" foi aceito com sucesso. Você pode controlar o resultado de seu comando por GetLastError(). Experimente-o - qual código é retutado?Eu mudei o código desta forma :
int ObjCount = ObjectsTotal(ChartID(),/*0=subjanela principal*/0,/*todos os objetosTypes*/-1);
ResetLastError();
bool deleteResult=ObjectDelete(ChartID(), "objeto não existente");
Print(__LINE__,"-",deleteResult," | ObjCount=",ObjCount," | LastError=",GetLastError());
aqui está o resultado :
2016.12.12 12:38:43.373 Far-TestObjectDelete (EURUSD,H1) 38-true | ObjCount=0 | LastError=0
ERR_SUCCESS
0
A operação foi concluída com sucesso
por isso não retorna o erro para descobrir, por exemplo, que não pôde acessar aquele objeto. mas no MT4 retorna o erro.
ERR_SUCCESS
0
A operação foi concluída com sucesso
por isso não retorna o erro para descobrir, por exemplo, que não pôde acessar aquele objeto. mas no MT4 retorna o erro.
OK. Como eu descobri, não levantamos nenhum erro em tal caso na MQL5 porque estas operações são assíncronas. Portanto, você tem 2 opções:
OK. Como descobri que não levantamos nenhum erro em tal caso na MQL5 porque estas operações são anisócronas. Portanto, você tem 2 opções:
OK. Como descobri que não levantamos nenhum erro em tal caso na MQL5 porque estas operações são assíncronas. Portanto, você tem 2 opções:
Como poderia retornar falso neste caso?
A documentação ObjectDelete() diz:
Valor de retorno
Retorna verdadeiro se a remoção foi bem sucedida, caso contrário, retorna falso.
A documentação deve ser mais clara, ela não diz "verdadeiro se o comando for aceito".
Se quisermos ter certeza de que um objeto é excluído, teremos que verificar se ele existe após o comando de exclusão, não faz sentido.
Como poderia retornar falso neste caso?
A documentação ObjectDelete() diz:
A documentação deve ser mais clara, ela não diz "verdadeiro se o comando for aceito".
Será fixado de tal forma
Valor de retorno
Retorna verdadeiro se o comando for colocado na fila comum dos eventos do gráfico , caso contrário, retorna falso.