記事"DIY マルチスレッド非同期 MQL5 WebRequest"についてのディスカッション - ページ 2

 

コードをよく見てみた。

今のところセキュリティーホールのようだが、クールだ。

 

シグナルを購読する。

  • 独自の取引を行う。
  • チャートの操作
  • ターミナルの終了
  • エキスパートアドバイザー/インジケーターの起動に失敗する。
  • 実行したインジケーターのアンロードに失敗する。不可視モード。
  • ...
  • これらはWebRequestの項目です。同じリストがマーケットにも作れます。私はこれらを穴とは思わない。

     
    fxsaber:

    これらはWebRequestの項目である。同じリストがマーケットプレイスにも作れる。穴があるようには見えない。

      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

    私は目の端でスクリプトがここに呼び出されていることに気づいた。インジケーターから。権威の上昇とともに。

    ちょっと分かりにくいのはEXPERT::Runだけ。

    ここだ。

    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:

    私は目の端でこれがスクリプト・コールであることに気づいた。インジケーターから。威勢がいい。

    ただひとつ、ちょっとわかりにくいのは、EXPERT::Run.

    ここです。

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

    アイデアがつかめなかった。

     
    チャート・オブジェクト(とその中に入れ子になっているもの)はどのスレッドで実行されるのか?
     
    Stanislav Korotky:
    チャート・オブジェクト(とその中にネストされたもの)はどのスレッドで実行されるのか?

    そのスレッドで実行される。それらはチャートだが、オブジェクトの形をしている。

     
    fxsaber:

    その流れの中で。これらはチャートですが、オブジェクトです。

    さらに質問ですが、0x0や1x1のサイズのチャート・オブジェクトを作ることは可能でしょうか?

    一般的に、私が理解しているところでは、このアイデアはこうです - マネージャーやプールなしで、必要に応じてチャート・オブジェクトを作成し、その中でワーカースクリプトを実行し、ウェブ要求を送信して結果を取得し(データ転送のためのリソースはどこでも作成します)、最後にオブジェクトを削除する。

     
    Stanislav Korotky:

    それから追加の質問ですが、0x0や1x1の大きさのチャート・オブジェクトを作ることは可能ですか?

    それを見えなくするには、負の座標に移動させればよい。以下はその例です。

    取引、自動取引システム、取引戦略のテストに関するフォーラム

    mql5言語の特徴、取引の機微とトリック

    fxsaber, 2017.10.31 08:11

    // ビットマップオブジェクトを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);
    }


    アプリケーション

    // 現在のチャートのすべてのビットマップオブジェクトをpngファイルに保存する。
    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 BMP->GIF/PNGファイルのコンバーターも実装しています。


    一般的に、私が理解しているアイデアはこうです - マネージャーとプールなしで、必要に応じてチャートオブジェクトを作成し、その中でワーカースクリプトを実行し、Webリクエストを送信して結果を取得し(データ転送のためにリソースをスポーンすることはどこにでもあります)、最後にオブジェクトを削除するだけです。

    そうです。しかし、これはMT5でのみ機能します。

     

    WebRequest()関数を 並列インジケータに配置し、EventChartCustom()を介してEAと通信できるのであれば、なぜEAとマネージャを持つ複数のチャートが必要なのでしょうか?

    Expert Advisorはインジケータにコマンドを送信し、インジケータはWebRequest()を実行し、結果をExpert Advisorに返します。すべて非同期です。

     
    Реter Konow:

    WebRequest()関数をパラレルインジケータに入れ、EventChartCustom()を介してエキスパートと通信できるのであれば、なぜエキスパートとマネージャーを持つ複数のチャートが必要なのでしょうか?

    エキスパートアドバイザーはインジケーターにコマンドを送信し、インジケーターはWebRequest()を実行し、その結果をエキスパートアドバイザーに返します。すべてが非同期です。

    WebRequestは インジケータでは機能しません(このライブラリを使用すると、この制限を回避できます)。MTの別スレッドはExpert Advisorとスクリプトだけに割り当てられていますが、スクリプトはイベントと連動しません。