Errores, fallos, preguntas - página 2798

 
Alexey Viktorov:

Me pregunto si has mirado la documentación o simplemente has tomado la descripción de la función de mi post.

Sospecho que sólo tiene objetos gráficos con tendencia. Si es así, ¿por qué necesita un prefijo? También existe una eliminación por tipo de objeto

por lo que no tendrías que cambiar nada en el proyecto, sólo escribir

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

Por supuesto, estaba mirando la documentación. Y sí, ¡todo es posible! Pero hice esto... ¿Y qué, no funciona o estorba de alguna manera...?

Y en el proyecto, es más complicado que eso. Como dije arriba...
 
Artyom Trishkin:

Esto es sólo un caso especial. El prefijo es general y universal. Mientras que la eliminación de todas las líneas de tendencia también afectará a los objetos que no pertenecen al programa.

De acuerdo. chart_id: 0 (gráfico actual). Significa que sólo afectará a este gráfico. Y si va a haber otros programas, se puede añadir ID a cada nombre de objeto y llamar aObjectsDeleteAllcon un prefijo apropiado y la función no confundirá nada. Por eso dije en los posts anteriores que la denominación de los objetos es complicada y que tenía que pensar antes de usar esta función. Pero Alexey se ofendió conmigo, también su amigo... ¡En vano!

 
Mihail Matkovskij:

¿Por qué? chart_id: 0 (gráfico actual). Así que sólo está en este gráfico. Y si habrá otros programas también existe la noción de ID. Si se añade a cada nombre de objeto, la función ObjectsDeleteAll no confundirá nada. Por eso dije en mis posts anteriores que la denominación de los objetos es complicada y que tuve que pensarlo bien antes de usar esta función. Pero Alexey se ofendió conmigo, también su amigo... ¡En vano!

Usa tu cerebro antes de responder :)

El ID escrito en el nombre del objeto es una especie de prefijo, que identifica y elimina los objetos del programa.

Ahora mira el código, que escribí mi respuesta a Alexei, y cómo su código borrará sólo los objetos que necesita, que NO tendrá ID escrito en él, y dejará en el gráfico objetos "ajenos" que no pertenecen al programa?

Mi respuesta a este código fue Alexey con tal mensaje de Alexey:

Por lo tanto, no debe cambiar nada en el proyecto, sino simplemente escribir

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

Usa tu cerebro antes de responder :)

ID, escrito en el nombre del objeto - es una especie de prefijo, por la identificación de los cuales se eliminan los objetos del programa.

Ahora mira el código, que escribí mi respuesta a Alexei, y cómo su código borrará sólo los objetos que necesita, que NO tendrá ID escrito en él, y dejará en el gráfico objetos "ajenos" que no pertenecen al programa?

Mi respuesta a Alexey fue a este código con tal mensaje de Alexey:

Editado. Has respondido correctamente. Fui yo quien se equivocó un poco. Quería decir algo más.

 
Mihail Matkovskij:

Pero Alexei se ofendió conmigo...

No lo entiendes... Estoy a favor de la justicia. No debes exponer tus defectos, y todos los tienen, y yo también, por los bichos del terminal.

Hay un ejemplo reciente: hace algún tiempo, me gustaba usar ese truco, hacer clic con el botón derecho en una variable, "Ir a la definición" y para volver a la misma variable pulsaba el botón "Atrás" de la rata. Pero hoy me he dado cuenta de que ya no funciona. ¿Cuál es la razón? Ayer actualicé a 2530... Incluso utilicé un lenguaje soez, pero de repente me acordé de que también tenía que cambiar la tapa. He abierto ME 2474 y oops..................... y no funciona. ¿Y si tuviera un mensaje en la cabeza para escribir todo lo que pensaba de los promotores? ¿Cómo se vería eso?

Es decir, no te apresures antes de escribir sobre los errores, busca los fallos en tu código.

 
Alexey Viktorov:

No lo harás... Estoy a favor de la justicia. No expongas tus defectos, y todo el mundo los tiene y yo también, por los bichos del terminal .

¿Quién lo expone?https://www.mql5.com/ru/forum/1111/page2795#comment_17290368 . Espero que estavez lo leas con atención... ¿Cuántas veces tengo que decírtelo para que por fin teentre en la cabeza y dejes de escribir tonterías aquí?

 
Mihail Matkovskij:

¿Quién lo pone?https://www.mql5.com/ru/forum/1111/page2795#comment_17290368 . Espero que estavez lo hayas leído con atención... ¿Cuántas veces más tengo que decírtelo para que por finlo entiendas y no escribas tonterías aquí?

Estoy a favor de la equidad.

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

Mihail Matkovskij, 2020.07.11 14:47

He hecho un código fuente donde se produce este error:
//+------------------------------------------------------------------+
//|                                           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;
  }
}
//+------------------------------------------------------------------+

Acciones para demostrar el fallo.

Lanza el indicador en el gráfico.

2. Retire el indicador del gráfico.

3. Pulse Ctrl+B, luego haga clic en "Listar todo" en la ventana y vea los objetos que no han sido eliminados.

Objetos

Tengo hasta 294 de 100000.

Si se reduce el valor del parámetro de entrada nBars, el error no aparece.


 
Alexey Viktorov:

Estoy a favor de la equidad.



En ese post no se decía qué fallo era, si el de mi programa o el del terminal. Pensaba que era un error del terminal. Pero Rashid Umarov me explicó todo y lo entendí. Todo estaba muy claro para mí. No había ningún fallo en el terminal, estaba equivocado en mis suposiciones. Me estás siguiendo con una especie de entusiasmo maníaco. Te pregunté cuál era la razón y me lo dijiste:

Te habrías callado hace mucho tiempo y yo no habría continuado.

Esa es la razón...

¿Quieres dejar de hacer estas tonterías? Un adulto (espero)...

 
Mihail Matkovskij:

Así que ese mensaje no decía qué fallo era, si el de mi programa o el del terminal. Pensaba que era un error del terminal. Pero Rashid Umarov me explicó todo y lo entendí. Todo estaba muy claro para mí. No había ningún fallo en el terminal, estaba equivocado en mis suposiciones. Me estás siguiendo con una especie de entusiasmo maníaco. Te pregunté cuál era la razón y me lo dijiste:

Esa es la razón...

¿Quieres dejar de hacer estas tonterías? Un adulto, espero...

Muy bien. En una rueda de molino, he cambiado mis zapatos. Lo reporté como un error terminal y ............ que vivas tu vida como la conoces.

 
Conexión de la instalación de almacenamiento

https://storage.mql5.io no es posible conectarse.