Diskussion zum Artikel "Die eigene, multi-threaded, asynchrone Web-Anfrage in MQL5" - Seite 2

 

Ich habe mir den Code genauer angesehen.

Bis jetzt sieht es nach einer Sicherheitslücke aus, aber cool, Respekt.

 

Abonnieren Sie das Signal.

  • Führen Sie Ihren eigenen Handel durch.
  • Beliebige Aktionen mit Charts.
  • Terminal schließen.
  • Fehlgeschlagener Start von Expert Advisors/Indikatoren.
  • Fehler beim Entladen eines von Ihnen ausgeführten Indikators. Unsichtbarer Modus.
  • ...
  • Dies sind die WebRequest-Elemente. Die gleiche Liste kann auch für den Markt erstellt werden. Ich sehe sie nicht als Löcher.

     
    fxsaber:

    Dies sind die Elemente von WebRequest. Die gleiche Liste kann auch für den Marktplatz erstellt werden. Ich sehe sie nicht als Löcher.

      const long Res = ObjectCreate(0, __FILE__, OBJ_CHART, 0, 0, 0) && _GlobalVariableSet("ORDERSEND", Order) &&
                       _GlobalVariableSet("Symbol", Symb) && _GlobalVariableSet("Comment", comment) &&
                       EXPERT::Run(ObjectGetInteger(0, __FILE__, OBJPROP_CHART_ID), Params) &&
                       ObjectDelete(0, __FILE__) ? _GlobalVariableGet2<long>(__FUNCTION__) : -1

    Aus den Augenwinkeln erkenne ich, dass hier ein Skript aufgerufen wird. Vom Indikator. Mit einer Erhöhung der Autorität.

    Das einzige, was ein wenig verwirrend ist, ist EXPERT::Run.

    hier.

    https://www.mql5.com/ru/forum/288985#comment_9291731

    Обсуждение статьи "Многопоточный асинхронный WebRequest на MQL5 своими руками"
    Обсуждение статьи "Многопоточный асинхронный WebRequest на MQL5 своими руками"
    • 2018.11.08
    • www.mql5.com
    Опубликована статья Многопоточный асинхронный WebRequest на MQL5 своими руками: Автор: Stanislav Korotky...
     
    Maxim Kuznetsov:

    Aus den Augenwinkeln erkenne ich, dass es sich um einen Skriptaufruf handelt. Vom Indikator. Mit erhöhter Autorität.

    Das einzige, was ein wenig verwirrend ist, ist EXPERT::Run.

    hier.

    https://www.mql5.com/ru/forum/288985#comment_9291731

    Ich habe die Idee nicht verstanden.

     
    Für den vorgeschlagenen Ansatz stellt sich vor allem eine Frage: In welchem Thread werden die Diagrammobjekte (und das, was in ihnen verschachtelt ist) ausgeführt?
     
    Stanislav Korotky:
    Für den vorgeschlagenen Ansatz stellt sich vor allem eine Frage: In welchem Thread werden die Diagrammobjekte (und das, was in ihnen verschachtelt ist) ausgeführt?

    In einem eigenen Thread. Es sind Diagramme, aber in Form von Objekten.

     
    fxsaber:

    In ihrem Fluss. Das sind Diagramme, aber als Objekte.

    Dann eine zusätzliche Frage: ist es möglich, ein Diagramm-Objekt der Größe 0x0 oder 1x1 zu machen?

    Im Allgemeinen ist die Idee, wie ich es verstehe, ist dies - ohne einen Manager und Pool, erstellen wir einfach ein Diagramm-Objekt nach Bedarf, führen Sie ein Worker-Skript in ihm, senden Sie eine Web-Anfrage und erhalten das Ergebnis (wir immer noch Ressourcen für die Datenübertragung überall erstellen), und löschen Sie das Objekt am Ende.

     
    Stanislav Korotky:

    Dann eine zusätzliche Frage: Ist es möglich, ein Diagrammobjekt mit der Größe 0x0 oder 1x1 zu erstellen?

    Um es unsichtbar zu machen, kann es auf negative Koordinaten verschoben werden. Hier ist ein Beispiel

    Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

    Merkmale der mql5-Sprache, Feinheiten und Tricks des Handels

    fxsaber, 2017.10.31 08:11

    // Speichern eines Bitmap-Objekts in einer bmp/gif/png-Datei (Transparenz wird nicht berücksichtigt)
    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);
    }


    Anwendung .

    // Speichert alle Bitmap-Objekte des aktuellen Diagramms in png-Dateien
    void OnStart()
    {  
      for (int i = ObjectsTotal(0) - 1; i >= 0; i--)
      {
        const string Name = ObjectName(0, i);
        
        BitmapObjectToFile(0, Name, (string)ChartID() + "\\" + Name + ".png");    
      }      
    }


    ZY Ein Konverter von BMP->GIF/PNG Dateien ist auch implementiert.


    Im Allgemeinen ist die Idee, wie ich es verstehe, ist dies - ohne einen Manager und Pool, erstellen wir einfach ein Diagramm-Objekt nach Bedarf, führen Sie ein Worker-Skript in ihm, senden Sie eine Web-Anfrage und erhalten Sie das Ergebnis (wir immer noch spawnen Ressourcen für die Datenübertragung überall), und löschen Sie das Objekt am Ende.

    Ja, das ist die Idee. Aber es wird nur in MT5 funktionieren.

     

    Der Artikel ist interessant, aber von Anfang an gab es eine Frage: Warum brauchen wir mehrere Charts mit EAs und Manager, wenn wir die Funktion WebRequest() in einem parallelen Indikator platzieren und mit dem EA über EventChartCustom() kommunizieren können?

    Der Expert Advisor sendet einen Befehl an den Indikator, und der Indikator führt WebRequest() aus und gibt das Ergebnis an den Expert Advisor zurück. Alles asynchron.

     
    Реter Konow:

    Der Artikel ist interessant, aber von Anfang an stellte sich eine Frage: Warum braucht man mehrere Charts mit Experten und Manager, wenn man die Funktion WebRequest() in einen parallelen Indikator einbauen und mit einem Experten über EventChartCustom() kommunizieren kann?

    Der Expert Advisor sendet einen Befehl an den Indikator, und der Indikator führt WebRequest() aus und gibt das Ergebnis an den Expert Advisor zurück. Alles ist asynchron.

    WebRequest funktioniert nicht in Indikatoren (und diese Bibliothek ermöglicht es Ihnen, diese Einschränkung zu umgehen). Ein separater Thread in MT ist nur für Expert Advisors und Skripte vorgesehen, aber Skripte arbeiten nicht mit Ereignissen.