文章 "EA 遥控方法"

 

新文章 EA 遥控方法已发布:

交易机器人的主要优势在于能够在远程 VPS 服务器上每天 24 小时不间断工作。 但有时候有必要干预它们的工作,而此刻可能无法直接访问服务器。 是否可以遥控管理 EA? 本文提出了一种通过外部命令控制 EA 的选项。

我们处于数字时代,各种用于金融市场交易的自动化系统已经变得非常普遍。 电子智能交易系统(EA)的主要优点一般认定为能够完美无瑕的执行算法,并可一天 24 小时不间断工作。 虚拟主机允许全天候自动运行 EA。

不幸的是,并非所有的 EA 在任何市场情况下都能同样有效。 在这些情况下,交易者通常需要手动启用和禁用它们。 当用户可以直接访问终端时,这很容易做到。 但是如果您无法快速访问终端来控制 EA 工作怎么办? 在这种情况下,能够远程控制 EA 操作会很好。 我们来研究一下在终端中遥控 EA 的可能方法之一。


作者:Dmitriy Gizlyk

 

感谢您的文章。特别感谢提供改变智能交易系统状态库的链接。通过模板工作确实是一种非常新颖的解决方案。

不过说实话,当我看到标题时,我还以为会是关于客户服务器 或套接字....。

如果您有多个账户,您会厌倦到处放置挂单。

在论坛的某个地方有一个通过电报进行交互的库。那里有更多的可能性,而且所有命令都可以通过按下机器人中预先准备好的按钮来设置。

 
Sergey Likho:

感谢您的文章。特别感谢提供改变智能交易系统状态库的链接。通过模板工作确实是一种非常新颖的解决方案。

不过说实话,看到标题我还以为是关于客户服务器或套接字的....。

如果您有多个账户,您会厌倦到处放置挂单。

在论坛的某个地方有一个通过电报进行交互的库。那里有更多的可能性,而且所有命令都可以通过按下机器人中预先准备好的按钮来设置。

据我所知,有计划准备一篇关于通过电报进行管理的文章,甚至已经指定了作者。也许新文章会对您更有用。

 
为了使用方便,我们将库中的所有方法都设为公共方法。
我们可以使用这个技巧来不改变原始源代码
#define private public
  #include <fxsaber\Expert.mqh> //https://www.mql5.com/zh/code/19003
#undef private

#define  STRING_END "\r\n"
#define  EXPERT_BEGIN ("<expert>" + STRING_END)
#define  EXPERT_END ("</expert>" + STRING_END)
#define  EXPERT_NAME "name="


因此,要启用/禁用智能交易系统,我们只需重写模板文件,将 expertmode 标志更改为我们需要的值,并删除隐藏对象。

我不知道有这个标志,也没有考虑到与对象打交道的微妙之处,谢谢!


这段代码

      string temp=EXPERT::TemplateToString(i_chart,true);
      if(temp==NULL)
        {
         i_chart=ChartNext(i_chart);
         continue;
        }
//---
      temp=EXPERT::StringBetween(temp,EXPERT_BEGIN,EXPERT_END);
      if(temp==NULL)
        {
         i_chart=ChartNext(i_chart);
         continue;
        }

不仅会捕获 EA,还会捕获脚本。所以最好这样写

      if(!EXPERT::Is(i_chart))
        {
         i_chart=ChartNext(i_chart);
         continue;
        }
      
      
      string temp=EXPERT::TemplateToString(i_chart,true);

在这种情况下,模板将只保存在需要的地方。


ZY 我并没有刻意让 FileDelete 总是显示最后生成的模板。

 
fxsaber:
您可以使用这种技术来不改变原始资料

有趣的技术,以前从未想到过这种方法。谢谢。

 
fxsaber:

该代码


不仅会捕获 EA,还会捕获脚本。所以最好这样写

在这种情况下,模板将只保存在需要的地方。

在代码中,TemplateToString 被有意调用为 true。也许您忘记了,在带有 true 标志的函数体中,通过调用 Is 方法来检查图表上是否存在智能交易系统。

 static string TemplateToString( const long Chart_ID = 0, const bool CheckExpert = false )
  {
    short Data[];

    return(((!CheckExpert || EXPERT::Is(Chart_ID)) && ::ChartSaveTemplate((ulong)Chart_ID, PATH + FILENAME) && (::FileLoad(FILENAME, Data) > 0)) ?
           ::ShortArrayToString(Data) : NULL);
  }

这就是为什么这两个代码应该以同样的方式工作。

总之,感谢您提供的库和评论。

Dmitry。

 
Dmitriy Gizlyk:

在代码中,TemplateToString 被有意调用为 true 标志。也许您已经忘记了,图表上是否存在智能交易系统,是通过调用函数 正文中的 Is 方法并使用 true 标志来检查的。

我确实忘了。

总之,感谢您提供的库和评论。

我很高兴您理解了它并做了实质性补充。的确,考虑到您提到的细微差别,对它进行修正也无妨。

 
这当然很好,编程简单易记,文章也很有趣。
但我脑子里有一个问题,是不是只有我这么懒,终端运行在家里的电脑上,而我通过 TimWeaver 在手机上使用它?还是没有人听说过这样的机会?
我只看到了优点,即
-无需专用 IP
-该程序的跨平台性(适用于 Windows、Mac、Android、iOS)
-免费
-工作方便,就像坐在家里的电脑前一样...
-无需大量模板和代码。
在移动终端 上,您总能看到一切,如果有什么需要修改,您可以打开应用程序,修改所需的内容,无论是关闭某个智能交易系统,还是启动另一个,或者只是修改设置中的某些内容。甚至可以完全关闭或重启电脑....。
 
sic20101:
但我脑子里有一个问题,是不是只有我这么懒,终端运行在家里的电脑上,而我通过 TimWeaver 在手机上使用它?还是没人听说过这种可能性?

由于技术原因,带有智能交易系统的 VPS(或您家中的电脑)可能会离线一段时间。虽然不知道什么时候能重新上线,但您需要,比如,不要进行交易,因为您知道可能会有更多的中断。在这种情况下,建议的远程控制功能比您的变体要强大得多。


MetaQuotes 也有 VPS。只有在那里才会这样。

 
fxsaber:
这种情况不会发生,原因只有一个,那就是没有网络--没有交易,而且您可能没有注意到,账户控制在手机或平板电脑上是可见的。如果网络断了,我们就用手关闭所有交易,然后等待网络出现,或者在家里的电脑上进行进一步操作。
分析我使用了一年多的方法,接入网络是唯一的瓶颈。而这个问题只存在于对服务提供商的选择上,因为 TimWeaver 服务并不是第一年就能正常运行,而且即使它关闭了,你也可以随时离开谷歌浏览器,它也有这样的功能,它们肯定不会很快死去....。
 
sic20101:
这种情况不会发生,原因只有一个,那就是没有互联网--没有交易,而且您可能没有注意到,您的手机或平板电脑上可以看到账户控制。如果网络断了,我们只需用手关闭所有交易,然后等待网络出现,或者在家对电脑进行进一步操作。

在没有网络的情况下,电脑上的终端离您很远。您可以访问您的账户,但无法访问带有智能交易系统的终端。如何让 Expert Advisor 在连接到交易服务器(互联网正常)时不进行交易?