Erros, bugs, perguntas - página 2797

 
Roman:

Bild 2530

No terceiro anexo da estrutura, não aparece nenhum IntelliSense.

IntelliSense intelligence continua a fornecer ))


ou seja, uma dica é tudo com que pode contar

 
Nikolai Karetnikov:

IntelliSense intelligence continua a fornecer ))

ou seja, uma dica é tudo com que pode contar

O meu posto era sobre estruturas aninhadas, não aparece nenhuma selecção IntelliSense no terceiro ninho.
O que é muito irritante, porque as estruturas aninhadas foram planeadas para serem utilizadas apenas para a selecção no intellisense.
E como não aparece, tenho de voltar à estrutura, e ver que campos estão lá. Nada bom.
Quem me dera que o resolvessem.

Em relação ao seu exemplo, para funções MQL padrão, as dicas são claras.
Se não compreender a ponta de ferramenta, coloque o cursor sobre a função e prima F1.

 
Mihail Matkovskij:

Substituiu a função ObjectDeleteAll em primeiro lugar no seu exemplo:

Depois para o indicador.

Acabou por ser fácil de usarObjectDeleteAll no meu projecto. Para apagar todos os objectos, só precisei de alterar o prefixo 3 vezes e chamar ObjectDeleteAll 3 vezes. O gráfico é claro como resultado. A linguagem da MQL5 tem muitas subtilezas. Mas, ao mesmo tempo, é uma linguagem muito bem pensada.

Obrigado a todos os que me ajudaram a resolver este problema!

Aqui vai outra vez:

    trend = new CChartObjectTrend();
    if(trend.Create(0, "trend"+(string)i, 0, time[shift], low[shift], time[shift], high[shift]))
      listOfTrendLines.Add(trend);
    else
      delete trend;

Um potencial buraco para o qual se pode vazar. Veja o que o método Add() devolve

(Sei que é um teste, sei que é suficientemente bom para verificar, mas se está a verificar o resultado da criação, porque não verificar o resultado da adição? Disciplinado para o futuro)
 
Artyom Trishkin:

Mais uma vez, tem aqui:

Um potencial buraco para o qual se pode vazar. Veja o que o método Add() devolve

(Compreendo que é um teste, compreendo que é suficientemente bom para verificar, mas se eu verificar o resultado da criação, porque não verificar o resultado da adição? Disciplina para o futuro)

Bem, faça isto:

    trend = new CChartObjectTrend();
    if(trend.Create(0, "trend"+(string)i, 0, time[shift], low[shift], time[shift], high[shift])) {
      if(!listOfTrendLines.Add(trend))
        delete trend;
    }
    else
      delete trend;

É isso mesmo. Agora não há buraco?

Este é na realidade um programa de teste e fez o seu trabalho. Não preciso de mais nada dele. Se estivesse a funcionar, teria uma abordagem e um conceito diferente. As mensagens de erro vão de cada ponto crítico com indicação da linha (__LINE__) e nome da função (__FUNÇÃO__) ... Por isso, por vezes também não preciso de usar a depuração. Basta olhar, nome do módulo, número de linha, nome da função...

 

Olá a todos! O problema é o seguinte...

Após a actualização, o atalho do terminal MT5 desaparece, tanto na área de trabalho como na pasta raiz. Reinstalou-o. Depois de reiniciar o meu PC, a história repetiu-se. Qual é o problema? Alguém teve problemas com isto?

 
Artyom Trishkin:

Aqui o tem novamente:

Um potencial buraco para o qual se pode vazar. Veja o que o método Add() devolve

(Sei que é um teste, compreendo que é suficientemente bom para verificar, mas se verificar o resultado da criação, porque não verificar o resultado da adição? Disciplina para o futuro)

E em que casos pode listarOfTrendLines.Add fail? Só não os conheço. Embora eu adira a esse princípio, onde "não há verificações desnecessárias" (c). Mas, hipoteticamente, podemos supor que pode chegar à paranóia. Ok, o método Criar de uma classe de objectos gráficos pode falhar. Mas funciona sempre correctamente se o código for escrito correctamente e o programa der nomes normais aos objectos. Mas digamos que pode haver falhas na sua utilização... Mas como pode o método Add devolver um objecto falso em condições normais. Ou a função ArrayResize (que, a propósito, é utilizada neste método), como pode o seu retorno resultar diferente de new_size. A menos que não haja memória suficiente... :) Mas onde é que já viu aparelhos modernos com um défice de memória tão grande? :)

 
Mihail Matkovskij:

Em que casos pode listarOfTrendLines.Add fail? Só não tenho conhecimento deles. Embora eu adira ao princípio onde "não há verificações desnecessárias" (c). Mas, hipoteticamente, podemos supor que pode chegar à paranóia. Ok, o método Criar de uma classe de objectos gráficos pode falhar. Mas funciona sempre correctamente se o código for escrito correctamente e o programa der nomes normais aos objectos. Mas digamos que pode haver falhas na sua utilização... Mas como pode o método Add devolver um objecto falso em condições normais. Ou a função ArrayResize (que, a propósito, é utilizada neste método), como pode o seu retorno resultar diferente de new_size. A menos que não haja memória suficiente... :) Mas onde é que já viu um sistema moderno com défice de memória? :)

Vps normalmente.
P.s. Penso que é injusto para com Alexei porque foi ele quem deu o primeiro e correcto conselho e de qualquer forma ele ajudou-o
 
Mihail Matkovskij:

Substituiu a função ObjectDeleteAll em primeiro lugar no seu exemplo:

Depois para o indicador.

Acabou por ser fácil de usarObjectDeleteAll no meu projecto. Para apagar todos os objectos, só precisei de alterar o prefixo 3 vezes e chamar ObjectDeleteAll 3 vezes. O gráfico é claro como resultado. A linguagem da MQL5 tem muitas subtilezas. Mas, ao mesmo tempo, é uma linguagem muito bem pensada.

Obrigado a todos os que me ajudaram a resolver este problema!

Pergunto-me se analisou a documentação ou se apenas tirou a descrição da função do meu posto.

Suspeito tanto que só tem objectos gráficos com tendências. Em caso afirmativo, porque é que precisa de um prefixo? Há também uma eliminação por tipo de objecto

int  ObjectsDeleteAll(
   long  chart_id,            // идентификатор графика
   int   sub_window=-1,       // индекс окна
   int   type=-1              // тип объекта для удаления
   );

Portanto, não tem de mudar nada no projecto, mas apenas escrever

ObjectsDeleteAll(0, 0, OBJ_TREND);
)))))))))))))
 
Aleksei Beliakov:
Vps normalmente.
P.s. Parece-me que afinal foi o senhor que tratou o Alexei injustamente, afinal foi ele quem deu o primeiro e correcto conselho e de qualquer forma ele ajudou-o

Onde está a injustiça nisso, tenho vergonha de perguntar...? Acho que estou bem com o Alexei. É parente dele?

 
Alexey Viktorov:

Pergunto-me se olhou para a documentação ou se apenas tirou a descrição da função do meu posto.

Suspeito que só tem objectos gráficos com tendências. Em caso afirmativo, porque é que precisa de um prefixo? Há também uma eliminação por tipo de objecto

para que não tenha de mudar nada no projecto.

)))))))))))))

Este é apenas um caso especial. O prefixo é geral e universal. Além disso, a eliminação de todas as linhas de tendência irá também afectar objectos que não pertencem ao programa.