Erros, bugs, perguntas - página 2796

 
Mihail Matkovskij:

Não tem mais nada a fazer neste fórum, Alexey, além de torcer as minhas mensagens para que pareçam reivindicações aos criadores em meu nome...? Qual terá sido a razão de um "entusiasmo" tão estranho da sua parte? Prefere ajudar os novatos com as suas perguntas nos tópicos apropriados, do que fazer disparates aqui...!

Mas mesmo assim, escreveu claramente "insecto". Isto indica uma falha relatada na plataforma, não que não tenha lido a documentação até à sua conclusão lógica.

 
Artyom Trishkin:

Mas mesmo assim, escreveu claramente "insecto". Isto indica uma falha relatada na plataforma, não que não tenha lido a documentação até à sua conclusão lógica.

Pois bem, sim, eu fiz. Li a nota na descrição da função ObjectDelete, mas não pensei que fosse o problema... Quem não o faz?

Mas anda tudo em círculos. Para ser mais exacto, anda em círculos que o escrevi mal ou misturado. Mas por alguma razão ninguém disse uma palavra sobre como resolver este insecto. Claro, excepto para a função ObjectosDeleteAll sugerida, para a qual eu teria de refazer todo o projecto, o que eu menos quero.

 
Mihail Matkovskij:

Sim, fiquei confuso. Li a nota na descrição da função ObjectDelete, mas não pensei que fosse esse o problema... Quem não o faz?

Acontece...

 

Mihail Matkovskij:

... Ninguém disse uma palavra sobre como resolver este insecto por alguma razão. Claro, excepto a função ObjectosDeleteAll sugerida, para a qual eu teria de refazer todo o projecto, o que eu menos quero.

Tente usar um prefixo para nomes de objectos gráficos - é prática normal identificar os seus objectos. Utilizar o prefixo para verificar a existência de lixo e removê-lo ao mesmo tempo.

Acrescentar o prefixo aos nomes dos objectos exigirá que se refaça todo o projecto?

Está a escrever em estilo processual? Bem, também não é assim tão difícil alterar as funções de criação de nomes de objectos ali.

 
Artyom Trishkin:

Tente usar um prefixo para nomes de objectos gráficos - é prática normal identificar os seus objectos. Utilizar o prefixo para verificar a existência de lixo e removê-lo ao mesmo tempo.

Acrescentar um prefixo aos nomes dos objectos exigirá que se refaça todo o projecto?

Ok, se não houver outras opções, vou tentar.

Artyom Trishkin:

Está a escrever em estilo processual? Não é assim tão difícil alterar a função que cria os nomes dos objectos.

Uma tarefa de Sísifo? :)


Obrigado a Rashid Umarov pela sua ajuda para encontrar a causa do meu bug indicador!
 
Mihail Matkovskij:

Não tem mais nada a fazer neste fórum, Alexey, além de torcer as minhas mensagens para que pareçam reivindicações aos criadores em meu nome...? Qual terá sido a razão de um "entusiasmo" tão estranho da sua parte? Prefere ajudar os novatos com as suas perguntas nos tópicos apropriados do que fazer disparates aqui...!

É com isso que estou a tentar ajudá-lo. Estou a tentar ajudá-lo e a explicar o que está errado. Tente outra opção para eliminar objectos gráficos e tudo ficará bem. E todos os insectos de que estava a falar desaparecerão. Não precisa de torcer as suas palavras e passo a citá-lo.

 
Alexey Viktorov:

É com isso que estou a tentar ajudá-lo. Estou a explicar-lhe o que está errado. Tente outra opção para remover os objectos gráficos e tudo ficará bem. E todos os insectos de que estava a falar desaparecerão. Não há necessidade de distorcer as suas palavras, você disse-o, eu citei-o.

Estou a tentar ajudá-lo e ao mesmo tempo a acusá-lo sem fundamento, não se esqueça de acrescentar. Perguntei o que causou tal entusiasmo maníaco, mas por alguma razão não me respondeu! Porque estás a fugir à resposta, Alexey?

 
Mihail Matkovskij:

Estou a tentar ajudá-lo e, ao mesmo tempo, acusá-lo de forma desapologética, não se esqueça de acrescentar. Perguntei o que causou tal entusiasmo maníaco, mas por alguma razão não me respondeu! Porque estás a fugir a uma resposta, Alexey?

Já devia ter-se calado há muito tempo e eu não teria continuado.

Aqui está a minha tentativa franca de ajudar sem quaisquer pistas de acusação.

Este é o fórum para o comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Erros, bugs, perguntas

Alexey Viktorov, 2020.07.11 17:12

Como pode ser que o laço dure mais tempo do que o tempo necessário para executar o OnDeinit?

Afinal, todos os objectos do seu exemplo têm o prefixo "tendência", porque não usá-lo e recusar o laço?

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

Qual é a resposta? Leia as suas respostas.
 
Alexey Viktorov:

Já se teriam calado há muito tempo e eu não teria continuado.

А... Aí está a razão das acusações contra mim! Estou a ver... :)

Alexey Viktorov:
Qual é a sua resposta? Leia as suas respostas.

Tudo está bem aí. A única coisa é que inicialmente me recusei a utilizar esta função. E isso deve tê-lo envergonhado. Bem, desculpem então... :)

 

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

//+------------------------------------------------------------------+
//|                                           DeleteChartObjects.mq5 |
//|                                      Copyright 2020, © Cyberdev. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev."
#property version   "1.00"
#property indicator_chart_window

#property indicator_plots 0

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

#include <ChartObjects\ChartObjectsLines.mqh>
#include <Arrays\ArrayObj.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//--- input parameters
input int      nBars = 100000;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int customN_Bars = 0;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CArrayObj listOfTrendLines;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit() {
//--- indicator buffers mapping
  int totalBars = iBars(NULL, PERIOD_CURRENT);
  customN_Bars = (nBars < totalBars) ? nBars : totalBars;
//---
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]
) {
  CChartObjectTrend * trend;
  int delta = rates_total - customN_Bars;
  int shift;
  int i;
  for(i = 0; i < customN_Bars; i++) {
    shift = delta + customN_Bars - i - 1;
    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;
  }
  return(rates_total);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
  
  ObjectsDeleteAll(0, "trend", 0, OBJ_TREND);
  
  CChartObjectTrend * trend;
  
  int i = listOfTrendLines.Total() - 1;
  for(; i >= 0; i--) {
    trend = dynamic_cast <CChartObjectTrend *> (listOfTrendLines.At(i));
    
    if(CheckPointer(trend) == POINTER_INVALID)
      continue;
    
    delete trend;
  }
}
//+------------------------------------------------------------------+

Depois para o indicador.

Artyom Trishkin:

Acrescentar um prefixo aos nomes dos objectos exigirá que se refaça todo o projecto?

Acontece que utilizarObjectDeleteAll no meu projecto foi fácil. Para apagar todos os objectos, bastava-me 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!

Razão: