Die Anmeldung bei OnBookEvent fällt manchmal aus - gibt es so etwas? - Seite 8

 
fxsaber:

Und Sie können auch die Entkernung von kostenpflichtigen Market-Produkten automatisieren - im kostenlosen Demo-Modus werden alle Ressourcen (Icons, Cursor usw.) entfernt. Mit Alpha-Kanälen und so.

Sie können. Und man kann auch aufhören, auszuflippen und zu denken: Warum muss ein Ereignis ein Ende haben?

 
A100:

Ich kann es nicht glauben! - Es steht geschrieben, dass alles auf dem Markt sicher ist

Ich vermute, dass es intern importiert wird)

 
A100:

Ich kann es nicht glauben! - Es steht geschrieben, dass alles auf dem Markt sicher geschützt ist

Ich kann nicht sagen, ob das ernst gemeint oder Sarkasmus ist. Wenn man es ernst meint, dann ist ResourceSave das Maß aller Dinge.

Aber man kann es auch so machen.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Merkmale der Sprache mql5, Feinheiten und Tricks

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);
}


Anmeldung

// Сохраняет в 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 Auch ein BMP->GIF/PNG Dateikonverter ist implementiert.

 
A100:

Wo nehmen Sie die Änderungen vor? Im MetaTrader oder in der Dokumentation... z.B..

Für breite Ereignisse wird OnChartEvent spezifischer geschrieben: Senden von Ereignismeldungen an alle mql5-Programme auf dem Diagramm (d.h. die Abonnementeinheit ist das Diagramm)

Und genau das passiert auch

Vielleicht werden sie die Funktion CheckBookEventCount() hinzufügen

Das heißt, wenn der Zähler größer als 1 ist, wird die Abmeldung nicht aufgerufen.

 
prostotrader:

Vielleicht CheckBookEventCount() Funktion hinzufügen

D.h. wenn die Anzahl größer als 1 ist, rufen wir nicht das Abonnement löschen

Warum nicht?

Es bleiben jedoch Fragen offen:

  • Durch welche Funktion wird der Zähler verringert?
  • Welcher wird den Becher schließen?

Wenn wir alles auf MarketBookRelease setzen, warum dann CheckBookEventCount und warum wir mit unserer Gegenprüfung?

 

Wenn die Einheit des Breitbandabonnements ein Diagramm ist, können Sie im Allgemeinen gar nichts tun, indem Sie ein programmübergreifendes Abonnement auf der Grundlage einer globalen Variablen mit einem Namen wie diesem organisieren:

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

durch stillschweigende Vereinbarung

 
A100:
In Ihrer Sandbox, ja. Jeder externe Code, der mit dem Glas verbunden ist, wird Sie wahrscheinlich zerstören.
 
prostotrader:

Nun, wie erwartet, liegen Sie falsch.

Ich kann mich irren, aber nicht in diesem Fall. Ich wünschte, Sie würden die Beiträge anderer sorgfältiger lesen. Es wurde mehrmals wiederholt, was das Problem ist, aber ohne Erfolg...

 
fxsaber:

Init und Deinit sind nicht Teil des Abonnements. Vielleicht hilft dieser Umstand.

Nein, das spielt keine Rolle. Selbst wenn wir uns auf das Problem der unvorhersehbaren Abfolge von OnInit/OnDeinit-Aufrufen beim Neuladen von Indikatoren beziehen, wird es nicht verschwinden, wenn wir uns auf die Erstellung/Zerstörung von Objekten verlassen - es besteht das gleiche Paradoxon.

Aber auch hier gilt, dass diese Reihenfolge (in den Indikatoren) nicht die Fehlerquelle ist.

 
Stanislav Korotky:

Ich kann mich irren, aber nicht in diesem Fall. Ich wünschte, Sie würden die Beiträge anderer sorgfältiger lesen. Es wurde mehrmals wiederholt, was das Problem ist, aber ohne Erfolg...

Richtig, es ist eine gute Idee, alle Beiträge zu lesen.

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