文章 "轻松快捷开发 MetaTrader 程序的函数库(第 二十三部分):基准交易类 - 基准类,有效参数验证" - 页 2

 
Artyom Trishkin:

什么是 "专家地位"?

假设我有一个带有 2 个指标的 TS,但我一直在一个指标上交易,而在另一个指标上只在开始后交易 2 次,并在第一个指标上最后一次亏损后再打开订单.....。

哪个 TS 并不重要,重要的是根据独立原则下单的某个 TS,但切换到第二个 TS 的时刻很重要,即可以调用多重专家,或在一个 EA 中使用 2 个 TS ...

如果终端超载,就会使搜索起始订单的算法复杂化,因为我们可能不知道哪个 TS 先开始工作?




在您的大型 EA 中,可能需要保存数据,这就是我为什么要问,是否会或已经编写了保存复杂数据格式的类/函数?

 
Artyom Trishkin:

图书馆可以。

MT4 交易历史记录中没有同样的信息。

 
fxsaber:

MT4 交易历史记录中没有同样的信息。

是的,没有。但事件列表中有(目前有)。它是在 Expert Advisor 运行期间记录的。所有信息都在其中。

当然,重新加载终端或重新启动智能交易系统后,智能交易系统的当前历史记录将丢失。但这只是暂时的,因为今后所有列表中的重要内容都将保存到文件中,并在重启时从文件中读取。当然,在测试器中不会这样做。

 
Igor Makanu:

假设我有一个包含 2 个指标的 TS,但我一直使用一个指标进行交易,而另一个指标只在开始交易后使用 2 次,今后我将在第一个指标最后一次亏损后打开订单.....。

哪种 TS 并不重要,重要的是根据独立原则下单的某种 TS,但切换到第二个 TS 的时刻很重要,即可以调用多重专家,或在一个 EA 中使用 2 个 TS....。

如果终端超载,搜索起始订单的算法就会变得复杂,因为我们可能不知道哪个 TS 先开始工作?




就像在您的大型智能交易系统中,可能需要保存数据,这就是为什么我想知道是否会或已经编写了保存复杂数据格式的类/函数?

说实话,我真的不明白。一个库怎么可能知道一个尚未创建的 EA 的逻辑?它的目的是为终端创建程序提供方便,它根本不知道在它的帮助下会创建出什么程序。

同时,如果有些东西很难用程序来定义,那么很有可能在程序库的帮助下就可以很容易地完成,这样专家就可以很快地控制一切。

我不需要一个抽象的例子来更好地 理解它。

 
Artyom Trishkin:

说实话,我真的不明白。程序库怎么可能知道尚未创建的智能交易系统的逻辑?它的目的是为终端创建程序提供方便,它根本不知道在它的帮助下会创建什么程序。

同时,如果有些东西很难通过编程来定义,那么很有可能在程序库的帮助下很容易就能做到,这样专家顾问就能很快控制一切。

我不需要一个抽象的例子来更好地 理解它。

您只需实现它就足够了:

阿尔乔姆-特里什金

当然,重新加载终端或重新启动智能交易系统后,智能交易系统的当前历史将丢失。但这只是暂时的,因为今后所有列表的重要内容都将保存到文件中,重启时再从文件中读取。当然,在测试器中不会这样做。

乍一看,这是个简单的任务,但问题很多:与文件同步、及时记录、重启后的恢复逻辑.....。我希望看到写入复杂数据类型 的实现有很多细微差别

 
Igor Makanu:

就足以让你意识到

当然,重新加载终端或重启智能交易系统后,智能交易系统的当前历史记录将丢失。但这只是暂时的,因为将来所有列表中的重要内容都会保存到文件中,重启时再从文件中读取。当然,在测试器中不会这样做。

乍一看,这是个简单的任务,但问题很多:与文件同步、及时记录、重启后的恢复逻辑.....。我希望看到写入复杂数据类型 的实现有很多细微差别

因此,这已经计划了很长时间--可以说从一开始就是这样。当所有必要的数据集合创建完成后,我就会实现它--一次性完成所有工作。

但是,所写的内容--有必要了解哪个 TC 最先交易--并不需要如此复杂。毕竟,该库可以查看从账户充值到现在的整个终端历史。对于 MetaTrader4 而言,在终端中解析整个历史记录非常重要。我没有借助 dll - 我打算用标准工具提供可能的可能性(双关语),这就是我没有考虑也不会考虑 dll 的原因。

因此,您总是可以快速找到每个 TS 在任何时间段的所有交易并进行比较。哪种交易是第一种 - 即 TS 和拖鞋。

 
Igor Makanu:

MQL4 不存储已触发挂单 的历史记录,您只能在订单历史记录中定义:

我在 mql4 上测试了库的这一功能。历史与此无关,库会捕捉挂单激活的事实,此时未结头寸的所有属性都可用。

 
Alexey Viktorov:

我在 mql4 上测试了该库的功能。历史与此无关,库会捕捉挂单激活的事实,此时未结头寸的所有属性都可用。

不仅是此时。所有已触发订单的历史(以及一般情况下的所有交易事件)都存储在库中,并在整个工作过程中可用。也就是说,您总能找到头寸的全部历史记录--从设置挂单 到完全平仓。

不过,目前还无法将智能交易系统的历史记录保存到文件中--在重新启动智能交易系统后,所有交易事件的历史记录都将丢失,并在下一个交易事件发生后重新开始累积。但这种行为只是暂时的--最初的计划是将所有重要信息保存到文件中。这将在创建所有必要的数据集合后进行。

CEngine 有一个方法 GetListAllOrdersEvents(),用于向控制程序返回自基于库的程序启动以来账户上发生的所有交易事件的完整列表。

要获得属于某个智能交易系统(或其与某个魔术师的仓位)的交易事件的完整列表,应根据所需的魔术师对获得的列表进行过滤:

   //--- 获取账户上所有交易事件的完整列表
   CArrayObj *list=engine.GetListAllOrdersEvents();
   //----在列表中只留下属于专家(或命令)的事件,并显示魔力 100500
   list=CSelect::ByOrderProperty(list,ORDER_PROP_MAGIC,100500,EQUAL);

然后,您就可以在所获得的列表中逐一循环获取所有交易事件,并对其进行处理。

   if(list!=NULL)
     {
      for(int i=0;i<list.Total();i++)
        {
         CEvent *event=list.At(i);
         if(event==NULL)
            continue;
         Print("----------------------");
         event.Print();
        }
     }
 
Artyom Trishkin:

不仅是此时此刻。所有触发订单(以及一般情况下的所有交易事件)的历史都存储在库中,并在整个工作过程中可用。也就是说,从设置挂单 到完全平仓,您总能找到头寸的全部历史记录。

不过,目前还无法将智能交易系统的历史记录保存到文件中--重启智能交易系统后,所有交易事件的历史记录都将丢失,并在下一个交易事件发生后重新开始累积。但这种行为只是暂时的--最初的计划是将所有重要信息保存到文件中。在创建所有必要的数据集合后,我们将在稍后完成这项工作。

CEngine 有一个方法 GetListAllOrdersEvents(),可向控制程序返回自程序启动以来账户上发生的所有交易事件的完整列表。

要获得属于某个智能交易系统(或其与某个魔术师的仓位)的交易事件的完整列表,需要根据所需的魔术师对获得的列表进行过滤:

然后,您就可以通过对所获列表的循环,逐一获取列表中的所有交易事件,并对其进行处理。

我只说了目前对我来说最重要的东西。也是经过测试的。谢谢你的说明,如果有需要,我会用问题来折磨你的。

 
您好!我下载了最新版本的库和专家Part_23,在测试仪上设置了可视模式,市场订单已打开,但所有挂单均未打开,日志中写道 "2019.10.23 failed sell stop limit 2.00 RTS-12"。
订单已打开,但所有挂单均未打开,日志中写道 "2019.10.27 10:13:32.157 2019.09.23 10:00:02卖出止损 失败 2.00 RTS-12.19 at 135750 (135800) sl: 135900 tp: 135600 [Invalid expiration].
Exchange symbols, broker Otkritie, version 5.00 build 2190.
另外。在之前的文章中,我想是在第 14 或 15 部分,您承诺创建用于处理符号集的类,但为什么会这样呢?
在以前的文章中,我想是在第 14 或 15 部分,您承诺过要创建用于处理符号集和玻璃的类,但为什么会这样呢?

你已经在图书馆的改进(资源、声音等)方面走得很远了,我认为你忽略了基本任务。

谢谢你们,图书馆非常需要你们。