Errori, bug, domande - pagina 2798

 
Alexey Viktorov:

Mi chiedo se hai guardato la documentazione o hai semplicemente preso la descrizione della funzione dal mio post.

Ho il sospetto che tu abbia solo oggetti grafici che hanno una tendenza. Se sì, perché avete bisogno di un prefisso? C'è anche una cancellazione per tipo di oggetto

quindi non dovreste cambiare nulla nel progetto, basta scrivere

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

Naturalmente, stavo guardando la documentazione. E sì, tutto è possibile! Ma ho fatto questo... E cosa, non funziona o in qualche modo si mette in mezzo...?

E nel progetto, è più complicato di così. Come ho detto sopra...
 
Artyom Trishkin:

Questo è solo un caso speciale. Il prefisso è generale e universale. Mentre la rimozione di tutte le linee di tendenza influenzerà anche gli oggetti non appartenenti al programma.

Concordato. chart_id: 0 (grafico corrente). Significa che avrà effetto solo su questo grafico. E se ci saranno altri programmi, potete aggiungere ID ad ogni nome di oggetto e chiamareObjectsDeleteAllcon un prefisso appropriato e la funzione non confonderà nulla. Ecco perché ho detto nei post precedenti che la denominazione degli oggetti è complicata e avevo bisogno di pensare prima di usare questa funzione. Ma Alexey si è offeso con me, anche suo amico... Invano!

 
Mihail Matkovskij:

Perché? chart_id: 0 (grafico attuale). Significa solo su questo grafico. E se ci saranno altri programmi c'è anche la nozione di ID. Se viene aggiunto ad ogni nome di oggetto, la funzione ObjectsDeleteAll non confonderà nulla. Ecco perché ho detto nei miei post precedenti che la denominazione degli oggetti è complicata e ho dovuto pensarci bene prima di usare questa funzione. Ma Alexey si è offeso con me, anche suo amico... Invano!

Usa il tuo cervello prima di rispondere :)

L'ID scritto nel nome dell'oggetto è una specie di prefisso, che identifica e rimuove gli oggetti dal programma.

E ora guardate il codice, che ho scritto la mia risposta ad Alexei, e come il suo codice cancellerà solo gli oggetti necessari, che NON avranno un ID, e lascerà sul grafico oggetti "alieni" che non appartengono al programma?

La mia risposta a questo codice era Alexey con un tale messaggio di Alexey:

di conseguenza non dovreste cambiare nulla nel progetto, ma solo scrivere

ObjectsDeleteAll(0, 0, OBJ_TREND);
)))))))))))))
 
Artyom Trishkin:

Usa il cervello prima di rispondere :)

ID, scritto nel nome dell'oggetto - è una specie di prefisso, per l'identificazione del quale gli oggetti del programma vengono rimossi.

Ora guardate il codice, che ho scritto la mia risposta ad Alexei, e come il suo codice cancellerà solo gli oggetti necessari, che NON avranno ID scritto in esso, e lascerà sul grafico oggetti "alieni" che non appartengono al programma?

La mia risposta ad Alexey era a questo codice con un simile messaggio di Alexey:

Modificato. Hai risposto correttamente. Sono io che ho fatto un po' di confusione. Volevo dire qualcos'altro.

 
Mihail Matkovskij:

Ma Alexei si è offeso con me...

Tu non capisci... Io sono per la giustizia. Non bisogna esporre i propri difetti, e tutti li hanno, e anche io, per i bug del terminale.

C'è un esempio recente: qualche tempo fa ero felice di usare un tale espediente, clic destro su una variabile, "Vai alla definizione" e per tornare alla stessa variabile premevo i tasti del cricchetto "Indietro". Ma oggi ho notato che non funziona più. Qual è la ragione? Ieri ho aggiornato al 2530... Ho anche usato un linguaggio scurrile, ma improvvisamente mi sono ricordato che dovevo anche cambiare il cap. Ho aperto ME 2474 e oops..................... e non funziona. E se avessi avuto un messaggio in testa per scrivere tutto quello che pensavo degli sviluppatori? Come sarebbe?

Insomma, non abbiate fretta prima di scrivere dei bug, cercate i difetti nel vostro codice.

 
Alexey Viktorov:

Non lo farai... Io sono per la giustizia. Non esporre i tuoi difetti, e tutti li hanno e anche io, per i bug del terminale.

Chi lo espone?https://www.mql5.com/ru/forum/1111/page2795#comment_17290368 . Spero che tu lo legga attentamente questavolta... Quante volte te lo devo dire prima che finalmente ti entriin testa e smetti di scrivere sciocchezze qui?

 
Mihail Matkovskij:

Chi lo mette su?https://www.mql5.com/ru/forum/1111/page2795#comment_17290368 . Spero che tu l'abbia letto attentamente questavolta... Quante volte ancora devo dirtelo perché tu finalmentelo capisca e non scriva sciocchezze qui!

Io sono per l'equità.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

Mihail Matkovskij, 2020.07.11 14:47

Ho fatto un codice sorgente dove si verifica questo bug:
//+------------------------------------------------------------------+
//|                                           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);
  }
  return(rates_total);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
  
  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;
  }
}
//+------------------------------------------------------------------+

Azioni per dimostrare il bug.

Lancia l'indicatore sul grafico.

2. Rimuovere l'indicatore dal grafico.

3. premete Ctrl+B, poi premete il pulsante "List all" nella finestra e vedete gli oggetti che non sono stati rimossi.

Oggetti

Ne ho addirittura 294 su 100000.

Se si riduce il valore del parametro di input nBars, il bug non appare.


 
Alexey Viktorov:

Io sono per l'equità.



Quindi quel post non diceva quale bug fosse, il mio programma o il bug del terminale. Pensavo fosse un bug del terminale. Ma Rashid Umarov mi ha spiegato tutto e l'ho capito. Tutto era molto chiaro per me. Non c'era nessun bug del terminale, mi sbagliavo nelle mie supposizioni. Mi stai seguendo con una specie di entusiasmo maniacale. Ti ho chiesto quale fosse il motivo e tu me l'hai detto:

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

Questo è il motivo...

Vuoi smetterla con queste sciocchezze! Un adulto (spero)...

 
Mihail Matkovskij:

Quindi quel messaggio non diceva quale bug fosse, il mio programma o il bug del terminale. Pensavo fosse un bug del terminale. Ma Rashid Umarov mi ha spiegato tutto e l'ho capito. Tutto era molto chiaro per me. Non c'era nessun bug del terminale, mi sbagliavo nelle mie supposizioni. Mi stai seguendo con una specie di entusiasmo maniacale. Ti ho chiesto quale fosse il motivo e tu me l'hai detto:

Questo è il motivo...

Vuoi smetterla con queste sciocchezze! Un adulto, spero...

Tutto a posto. In un tumbleweed, ho cambiato le mie scarpe. Segnalato come un bug terminale e ............ vivete la vostra vita come la conoscete.

 
Collegare il magazzino

https://storage.mql5.io non è possibile accedere.