Errori, bug, domande - pagina 2796

 
Mihail Matkovskij:

Non hai nient'altro da fare su questo forum, Alexey, oltre a distorcere i miei post per farli sembrare rivendicazioni agli sviluppatori a mio nome...? Mi chiedo quale sia stata la ragione di questo strano "entusiasmo" da parte sua? Preferite aiutare i neofiti con le loro domande nei thread appropriati, piuttosto che fare sciocchezze qui...!

Ma comunque, hai scritto chiaramente "bug". Questo indica un difetto segnalato nella piattaforma, non che non avete letto la documentazione fino alla sua conclusione logica.

 
Artyom Trishkin:

Ma comunque, hai scritto chiaramente "bug". Questo indica un difetto segnalato nella piattaforma, non che non avete letto la documentazione fino alla sua conclusione logica.

Beh, sì, l'ho fatto. Ho letto la nota nella descrizione della funzione ObjectDelete, ma non pensavo fosse il problema... Chi non lo fa?...

Ma tutto sta girando in tondo. Per essere più precisi, sta girando in tondo che ho scritto male o confuso... Ma per qualche ragione nessuno ha detto una parola su come risolvere questo bug... Naturalmente, eccetto la funzione ObjectsDeleteAll suggerita, per la quale dovrei rifare l'intero progetto, cosa che meno voglio.

 
Mihail Matkovskij:

Sì, mi sono confuso. Ho letto la nota nella descrizione della funzione ObjectDelete, ma non pensavo che fosse il problema... Chi non lo fa?

Succede...

 

Mihail Matkovskij:

... Nessuno ha detto una parola su come risolvere questo bug per qualche motivo... Naturalmente, tranne la funzione ObjectsDeleteAll suggerita, per la quale dovrei rifare l'intero progetto, cosa che meno voglio.

Cercate di usare un prefisso per i nomi degli oggetti grafici - è una pratica normale per identificare i vostri oggetti. Usa il prefisso per controllare i rifiuti e rimuoverli allo stesso tempo.

Aggiungere il prefisso ai nomi degli oggetti richiederà di rifare l'intero progetto?

Stai scrivendo in stile procedurale? Beh, anche lì non è così difficile cambiare le funzioni di creazione dei nomi degli oggetti.

 
Artyom Trishkin:

Cercate di usare un prefisso per i nomi degli oggetti grafici - è una pratica normale per identificare i vostri oggetti. Usa il prefisso per controllare i rifiuti e rimuoverli allo stesso tempo.

Aggiungere un prefisso ai nomi degli oggetti richiederà di rifare l'intero progetto?

Ok, se non ci sono altre opzioni, ci proverò.

Artyom Trishkin:

Stai scrivendo in stile procedurale? Non è così difficile cambiare la funzione che crea i nomi degli oggetti.

Un compito di Sisyphean? :)


Grazie a Rashid Umarov per il suo aiuto nel trovare la causa del mio bug dell'indicatore!
 
Mihail Matkovskij:

Non hai nient'altro da fare su questo forum, Alexey, oltre a distorcere i miei post per farli sembrare rivendicazioni agli sviluppatori a mio nome...? Mi chiedo quale sia stata la ragione di questo strano "entusiasmo" da parte sua? Preferite aiutare i neofiti con le loro domande nei thread appropriati piuttosto che fare sciocchezze qui...!

È in questo che sto cercando di aiutarvi. Sto cercando di aiutarti e di spiegarti in cosa ti sbagli. Provate un'altra opzione per eliminare gli oggetti grafici e tutto andrà bene. E tutti i bug di cui parlavate spariranno. Non devi stravolgere le tue parole e io ti cito.

 
Alexey Viktorov:

È in questo che sto cercando di aiutarvi. Vi sto spiegando su cosa vi sbagliate. Prova un altro modo per rimuovere gli oggetti grafici e tutto andrà bene. E tutti i bug di cui parlavate spariranno. Non c'è bisogno di stravolgere le tue parole, l'hai detto tu, io l'ho citato.

Sto cercando di aiutarti e allo stesso tempo di accusare senza motivo, non dimenticare di aggiungere. Ho chiesto cosa ha causato questo entusiasmo maniacale, ma per qualche motivo non mi hai risposto! Perché eviti la risposta, Alexey?

 
Mihail Matkovskij:

Sto cercando di aiutarti e allo stesso tempo di accusarti senza mezzi termini, non dimenticare di aggiungere. Ho chiesto cosa ha provocato un tale entusiasmo maniacale, ma per qualche motivo non mi hai risposto! Perché eviti di rispondere, Alexey?

Avresti dovuto stare zitto molto tempo fa e non avrei continuato.

Ecco il mio franco tentativo di aiutare senza alcun accenno di accusa.

Questo è il forum per il trading, i sistemi di trading automatico e il test delle strategie di trading

Errori, bug, domande

Alexey Viktorov, 2020.07.11 17:12

Come può essere che il ciclo duri più a lungo del tempo necessario per eseguire OnDeinit?

Dopo tutto, tutti gli oggetti nel tuo esempio hanno il prefisso "trend", perché non usarlo e rifiutare il ciclo?

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

Qual è la risposta? Leggete le vostre risposte.
 
Alexey Viktorov:

Tu saresti stato zitto molto tempo fa e io non avrei continuato.

А... Ecco la ragione delle accuse contro di me! Capisco... :)

Alexey Viktorov:
Qual è la sua risposta? Leggete le vostre risposte.

È tutto a posto lì. L'unica cosa è che inizialmente ho rifiutato di usare questa funzione. E deve averla messa in imbarazzo. Beh, mi dispiace allora... :)

 

Sostituito la funzione ObjectDeleteAll prima nel vostro esempio:

//+------------------------------------------------------------------+
//|                                           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;
  }
}
//+------------------------------------------------------------------+

Poi nell'indicatore.

Artyom Trishkin:

Aggiungere un prefisso ai nomi degli oggetti richiederà di rifare l'intero progetto?

Si è scoperto che usareObjectDeleteAll nel mio progetto era facile. Per cancellare tutti gli oggetti, dovevo solo cambiare il prefisso 3 volte e chiamare ObjectDeleteAll 3 volte. Il grafico è chiaro come risultato. Il linguaggio MQL5 ha un sacco di sottigliezze. Ma allo stesso tempo è un linguaggio molto ben studiato.

Grazie a tutti coloro che mi hanno aiutato a risolvere questo problema!