文章 "自己动手开发多线程异步 MQL5 WebRequest" - 页 2

 

我仔细看了一下代码。

目前看来是个安全漏洞,不过很酷,值得尊敬。

 

订阅信号。

  • 进行自己的交易。
  • 对图表进行任何操作。
  • 终端关闭。
  • 无法启动智能交易系统/指标。
  • 无法卸载运行的指标。隐形模式。
  • ...
  • 这些是 WebRequest 上的项目。市场 "也可以列出同样的清单。我不认为它们是漏洞。

     
    fxsaber:

    这些是 WebRequest 上的项目。Marketplace 也可以列出同样的清单。我不认为它们是漏洞。

      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 的图表对象?

    一般来说,我的理解是这样的--在没有管理器和池的情况下,我们只需根据需要创建一个图表对象,在其中运行 Worker 脚本,发送网络请求并获取结果(我们仍然会为各处的数据传输创建资源),最后删除该对象。

     
    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 文件的转换器。


    总的来说,我理解的想法是这样的--在没有管理器和池的情况下,我们只需根据需要创建一个图表对象,在其中运行 Worker 脚本,发送网络请求并获取结果(我们仍在各处生成资源用于数据传输),最后删除对象。

    是的,这就是我们的想法。但它只能在 MT5 中运行。

     

    这篇文章很有意思,但从一开始就有一个问题:如果我们可以将WebRequest() 函数 放在一个并行指标中,并通过 EventChartCustom() 与 EA 通信,为什么还需要几个带有 EA 和管理器的图表呢?

    专家顾问将向指标发送命令,指标将执行 WebRequest() 并将结果返回给专家顾问。所有操作都是异步的。

     
    Реter Konow:

    这篇文章很有意思,但从一开始就有一个问题:如果可以将 WebRequest() 函数放入一个并行指标,并通过 EventChartCustom() 与专家进行通信,为什么还需要多个带有专家和管理器的图表?

    专家顾问将向指标发送命令,指标将执行 WebRequest() 并将结果返回给专家顾问。一切都是异步的。

    WebRequest 在指标中不起作用(该库允许您绕过这一限制)。MT 中的一个独立线程只分配给智能交易系统和脚本,但脚本不与事件一起工作。