La suscripción a OnBookEvent a veces se cae - ¿existe? - página 8

 
fxsaber:

Y también puedes automatizar el vaciado de los productos de pago del Mercado - en el modo de demostración gratuita arranca todos los recursos (iconos, cursores, etc.). Con canales alfa y demás.

Puedes hacerlo. Y también puedes dejar de asustarte y pensar: ¿por qué un evento tiene que tener un final?

 
A100:

¡No lo puedo creer! - Está escrito que todo en el Mercado es seguro

Sospecho que es de importación interna)

 
A100:

¡No lo puedo creer! - Está escrito que todo está protegido de forma segura en el Mercado

No puedo decir si esto es serio o es un sarcasmo. Si es serio, entonces ResourceSave es la cabeza de todo.

Pero puedes hacerlo así.

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

Características del lenguaje mql5, sutilezas y trucos

fxsaber, 2017.10.31 08:11

// Сохранение Bitmap-объекта в bmp/gif/png-файле (прозрачность не учитывается)
bool BitmapObjectToFile( const long chartID, const string ObjName, const string FileName, const bool FullImage = false )
{  
  const ENUM_OBJECT Type = (ENUM_OBJECT)ObjectGetInteger(chartID, ObjName, OBJPROP_TYPE);  
  bool Res = (Type == OBJ_BITMAP_LABEL) || (Type == OBJ_BITMAP);
             
  if (Res)
  {
    const string Name = __FUNCTION__ + (string)MathRand();

    ObjectCreate(chartID, Name, OBJ_CHART, 0, 0, 0);
    ObjectSetInteger(chartID, Name, OBJPROP_XDISTANCE, -1 e3);
    
    const long chart = ObjectGetInteger(chartID, Name, OBJPROP_CHART_ID);
        
    Res = ChartSetInteger(chart, CHART_SHOW, false) && ObjectCreate(chart, Name, OBJ_BITMAP_LABEL, 0, 0, 0) &&
          ObjectSetString(chart, Name, OBJPROP_BMPFILE, ObjectGetString(chartID, ObjName, OBJPROP_BMPFILE)) &&
          (FullImage || (ObjectSetInteger(chart, Name, OBJPROP_XSIZE, ObjectGetInteger(chartID, ObjName, OBJPROP_XSIZE)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_YSIZE, ObjectGetInteger(chartID, ObjName, OBJPROP_YSIZE)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_XOFFSET, ObjectGetInteger(chartID, ObjName, OBJPROP_XOFFSET)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_YOFFSET, ObjectGetInteger(chartID, ObjName, OBJPROP_YOFFSET)))) &&
                         ChartScreenShot(chart, FileName, (int)ObjectGetInteger(chart, Name, OBJPROP_XSIZE),
                                                          (int)ObjectGetInteger(chart, Name, OBJPROP_YSIZE));
    ObjectDelete(chartID, Name);
  }                    

  return(Res);
}


Aplicación

// Сохраняет в png-файлах все Bitmap-объекты текущего чарта
void OnStart()
{  
  for (int i = ObjectsTotal(0) - 1; i >= 0; i--)
  {
    const string Name = ObjectName(0, i);
    
    BitmapObjectToFile(0, Name, (string)ChartID() + "\\" + Name + ".png");    
  }      
}


ZZY También se ha implementado un convertidor de archivos BMP->GIF/PNG.

 
A100:

¿Dónde se hacen los cambios? En MetaTrader o en la documentación... Por ejemplo

En el caso de los eventos amplios, OnChartEvent se escribe de forma más específica: enviando mensajes de eventos a todos los programas mql5 del gráfico (es decir, la unidad de suscripción es el gráfico)

Que de hecho es lo que ocurre

Quizá añadan la función CheckBookEventCount()

Significa que si el contador es mayor que 1, no llamamos a la cancelación de la suscripción

 
prostotrader:

Quizás añadir la función CheckBookEventCount()

Es decir, si el recuento es mayor que 1 , no llamamos a la suscripción de borrado

¿Por qué no?

Sin embargo, siguen existiendo interrogantes:

  • ¿Qué función disminuirá el contador?
  • ¿Cuál cerrará la copa?

Si ponemos todo en MarketBookRelease entonces ¿por qué CheckBookEventCount y por qué nosotros con nuestra comprobación del contador?

 

En general, si la unidad de suscripción de banda ancha es un gráfico, entonces no se podría hacer nada organizando un contador de suscripción entre programas basado en una variable global con un nombre como este:

string GVName( string symbol ) { return IntegerToString(ChartID()) + ":" + symbol; }

por acuerdo tácito

 
A100:
en su caja de arena, sí. cualquier código externo ligado al cristal es probable que lo rompa.
 
prostotrader:

Bueno, como era de esperar, se equivoca.

Puedo equivocarme, pero no en este caso. Me gustaría que leyeras los posts de los demás con más atención. Se ha repetido varias veces cuál es el problema, y en vano...

 
fxsaber:

Init y Deinit no forman parte de la suscripción. Tal vez esta circunstancia ayude.

No, no importa. Incluso si nos referimos al problema de la secuencia impredecible de llamadas OnInit/OnDeinit en la recarga de los indicadores, no desaparecerá si nos basamos en la creación/destrucción de objetos - existe la misma paradoja.

Pero una vez más, esta secuencia (en los indicadores) no es la fuente del error.

 
Stanislav Korotky:

Puedo equivocarme, pero no en este caso. Me gustaría que leyeras los posts de los demás con más atención. Se ha repetido varias veces cuál es el problema, y en vano...

Cierto, es una buena idea leer todos los posts.

https://www.mql5.com/ru/forum/267154/page7#comment_8170755
Подписка на OnBookEvent иногда отваливается - есть такое?
Подписка на OnBookEvent иногда отваливается - есть такое?
  • 2018.07.24
  • www.mql5.com
После того как поплотнее занялся стаканом и повесил на чарты несколько экспертов и индикаторов, подписанных на OnBookEvent, обнаружил, что некоторы...
Razón de la queja: