Discusión sobre el artículo "Otras clases en la biblioteca DoEasy (Parte 70): Ampliación de la funcionalidad y actualización automática de la colección de objetos de gráfico"
Orden Limitada, usando el botón DeletePending, da muchos eventos OnChartEvent idénticos, mientras que debería haber diferentes
O mediante Bulk Operations Delete Limit Orders también da muchos eventos idénticos.
Si cierra manualmente, los eventos son secuenciales.
2023.03.07 14:58:31.385 TestDoEasy131 (GBPUSD.c,H1) - Pending order removed: 2023.03.07 14:57:59.055 - 2023.03.07 14:58:31.385 TestDoEasy131 (GBPUSD.c,H1) GBPUSD.c Deleted 0.10 Pending order Buy Limit #89090285 at price 1.19636, sl 1.19486, tp 1.19786, Magic number 4718715 (123), G1: 8, G2: 4 2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1) - Pending order removed: 2023.03.07 14:57:58.395 - 2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1) GBPUSD.c Deleted 0.10 Pending order Buy Limit #89090282 at price 1.19640, sl 1.19490, tp 1.19790, Magic number 10223739 (123), G1: 12, G2: 9 2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1) - Pending order removed: 2023.03.07 14:58:00.613 - 2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1) GBPUSD.c Deleted 0.10 Pending order Buy Limit #89090287 at price 1.19636, sl 1.19486, tp 1.19786, Magic number 6357115 (123), G1: 1, G2: 6 2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1) - Pending order removed: 2023.03.07 14:57:59.669 - 2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1) GBPUSD.c Deleted 0.10 Pending order Buy Limit #89090286 at price 1.19636, sl 1.19486, tp 1.19786, Magic number 393339 (123), G1: 6 2023.03.07 14:58:31.392 TestDoEasy131 (GBPUSD.c,H1) MAGIC = %d10223739 2023.03.07 14:58:31.392 TestDoEasy131 (GBPUSD.c,H1) 2023.03.07 14:58:30 2023.03.07 14:58:31.392 TestDoEasy131 (GBPUSD.c,H1) OnChartEvent: Pending order removed 2023.03.07 14:58:31.394 TestDoEasy131 (GBPUSD.c,H1) MAGIC = %d10223739 2023.03.07 14:58:31.394 TestDoEasy131 (GBPUSD.c,H1) 2023.03.07 14:58:30 2023.03.07 14:58:31.394 TestDoEasy131 (GBPUSD.c,H1) OnChartEvent: Pending order removed 2023.03.07 14:58:31.395 TestDoEasy131 (GBPUSD.c,H1) MAGIC = %d10223739 2023.03.07 14:58:31.395 TestDoEasy131 (GBPUSD.c,H1) 2023.03.07 14:58:30 2023.03.07 14:58:31.395 TestDoEasy131 (GBPUSD.c,H1) OnChartEvent: Pending order removed 2023.03.07 14:58:31.397 TestDoEasy131 (GBPUSD.c,H1) MAGIC = %d10223739 2023.03.07 14:58:31.397 TestDoEasy131 (GBPUSD.c,H1) 2023.03.07 14:58:30 2023.03.07 14:58:31.397 TestDoEasy131 (GBPUSD.c,H1) OnChartEvent: Pending order removed
BillionerClub OnChartEvent idénticos, pero debería haber diferentes.
No entiendo lo que quieres decir...
O mediante Bulk Operations Delete Limit Orders da muchos eventos idénticos
Si cierras manualmente, los eventos son secuenciales.
Artyom Trishkin OnChartEvent.
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- Si trabaja en el probador, salga //if(MQLInfoInteger(MQL_TESTER)) // volver; int idx=id-CHARTEVENT_CUSTOM; //--- Extraer de lparam (1) los milisegundos del tiempo del evento, (2) la causa, (3) la fuente del evento, y (4) establecer el tiempo exacto del evento. ushort msc=engine.EventMSC(lparam); ushort reason=engine.EventReason(lparam); ushort source=engine.EventSource(lparam); long time=::TimeCurrent()*1000+msc; //--- Tratamiento de los eventos comerciales if(idx>TRADE_EVENT_NO_EVENT && idx<TRADE_EVENTS_NEXT_CODE) { //--- Obtener la lista de todos los eventos comerciales CArrayObj *list=engine.GetListAllOrdersEvents(); if(list==NULL) return; //--- obtener el índice del evento respecto al final de la lista //--- en el probador el offset se pasa por el parámetro lparam al manejador de eventos //--- no en el tester - cada evento es enviado uno a la vez y manejado en OnChartEvent() int shift=(engine.IsTester() ? (int)lparam : 0); CEvent *event=list.At(list.Total()-1-shift);
Así lo he corregido, parece que funciona.
int shift=(engine.IsTester() ? (int)lparam : 0); static int NEvents =list.Total()-1-shift; CEvent *event=list.At(NEvents); NEvents++;
BillionerClub OnChartEvent
¿Te refieres a que la librería envía eventos erróneos al manejador de eventos?
Así es como lo he arreglado, parece que funciona.
Artyom Trishkin #:
¿Te referías a que la librería envía los eventos equivocados al manejador de eventos?
¿Te referías a que la librería envía los eventos equivocados al manejador de eventos?
Sí, a eso me refería. Creo que lo he arreglado, pero no estoy seguro de la solución, ya que no entiendo muy bien dónde estarían los inconvenientes.
int shift=(engine.IsTester() ? (int)lparam : 0); static int NEvents =list.Total()-1-shift; CEvent *event=list.At(NEvents); NEvents++; if(event==NULL) { event=list.At(list.Total()-1-shift); if(event==NULL)return; }

Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Artículo publicado Otras clases en la biblioteca DoEasy (Parte 70): Ampliación de la funcionalidad y actualización automática de la colección de objetos de gráfico:
En este artículo, ampliaremos la funcionalidad de los objetos de gráfico, organizaremos la navegación por los gráficos, crearemos capturas de pantalla, y también guardaremos plantillas y las aplicaremos a los gráficos. Asimismo, implementaremos la actualización automática de la colección de objetos de gráfico, sus ventanas y los indicadores en ellas.
Queda por probar la creación de capturas de pantalla del gráfico actual. Cada vez que presionemos el botón, se creará una captura de pantalla del gráfico con un tamaño determinado. Primera pulsación: captura de pantalla 800x600, segunda pulsación: captura de pantalla 750x562, tercera pulsación: captura de pantalla en el tamaño de gráfico actual:
Después de crear tres capturas de pantalla en diferentes resoluciones (sobre las cuales la biblioteca ha creado las entradas correspondientes en el diario),
también miramos el contenido de la carpeta en la que se guardan estas capturas de pantalla.
Antes de tomar las capturas de pantalla, hemos movido el cursor por diferentes lugares de las dos ventanas del gráfico actual, y en los comentarios del gráfico se puede ver el tiempo, el precio, el número de subventana y las coordenadas X e Y del cursor en píxeles. La coordenada Y del cursor tiene dos valores. El primer valor muestra la coordenada Y respecto a las coordenadas iniciales de la ventana principal del símbolo, mientras que el segundo valor mostrado (entre paréntesis) indica el valor de la coordenada Y respecto al borde superior de la ventana donde se encuentra el cursor.
Autor: Artyom Trishkin