文章 "MQL5 Cookbook - 以 MQL5 编写的多币种 EA,利用限价订单工作"

 

新文章 MQL5 Cookbook - 以 MQL5 编写的多币种 EA,利用限价订单工作已发布:

这次,我们将要创建一款多币种 EA,交易算法基于限价订单 Buy Stop(高买) 和 Sell Stop(低卖)。我们打算创建的范式,将被设计为日内交易/测试。本文讨论下列事项:

  • 在规定时间范围内进行交易。让我们来创建一个功能,可以设置交易的起止时间。例如,该时间可以是欧洲或美国的交易时段。这样可以确保在优化 EA 参数时,有机会发现更合适的时间范围。
  • 布置/修改/删除限价订单。
  • 处理交易事件: 检查最后一个持仓是否在止盈或止损位置平仓,以及在成交历史中控制每个品种。

MQL5 Cookbook - Multi-Currency Expert Advisor and Working with Pending Orders in MQL5

作者:Anatoli Kazharski

 

时间。

小时并不总是足够的,分钟也是必要的。例如,如果市场开盘和收盘的时间是零点。

这个功能会引起一些问题--您需要在午夜进行交易的次数要比您需要分钟的次数多得多。

bool IsInTradeTimeRange(int symbol_number)
  {
//--- 如果启用时间范围交易
   if(TradeInTimeRange[symbol_number])
     {
      //--- 日期和时间结构
      MqlDateTime last_date;
      //--- 获取最新日期和时间数据
      TimeTradeServer(last_date);
      //--- 超出授权时间范围
      if(last_date.hour<StartTrade[symbol_number] ||
         last_date.hour>=EndTrade[symbol_number])
         return(false);
     }
//--- 在允许的时间范围内
   return(true);
  }
 
TheXpert:

时间。

小时并不总是足够的,分钟也是必要的。例如,如果市场开盘和收盘的时间是零点。

这个功能会引起一些问题--您需要在午夜进行交易的次数要比分钟多得多。

是的,我同意。我稍后会尝试用某种新方案将其可视化。

也许我们应该在用户自己指定时间的地方加上一行,而不是枚举。例如"9:35".否则,参数列表就会增加三个参数(在文章方案中),用于指定分钟。

如果能有一种方便的标准方式来指定时间,那就再好不过了。现在我们有了日期时间,还需要时间。)

 

事实上,这些都是程序代码,不适合作为文章,应该放在代码库部分。

 
revers45:

事实上,这都是程序代码,我认为它不能作为一篇文章,而应该放在代码库部分。

哦,好吧。那就好好干吧。把所有东西都写到代码库里去吧。)
 
revers45:

事实上,这些都是程序代码,我认为它不能作为一篇文章,而应该放在代码库部分。

这样的文章便于学习语言。

同时阅读文本和代码,同时查看插图,要比分别滚动阅读文章和不同文件中的代码更容易。

但我也认为缺少了一些描述性的部分。以纯文本形式提供概念和实施要点。

 
komposter:

这类文章便于学习语言。

同时阅读文本和代码,同时查看插图,比分别滚动阅读文章和将不同文件中的代码分开要容易得多。


但我也认为缺少了一些描述性的部分。以纯文本的形式提供概念和实施要点。

这一系列文章更多的是用于语言的顺序学习。在之前的一篇文章中已经介绍过该方案,再次介绍可能没有意义。在文章开头有一个链接,可以链接到详细介绍该方案的文章。这里还写了其他功能,并做了一些小改动。一切都很简单,没有多余的东西,代码中的每一行都有注释。我认为,有很多现成的方案供你选择和使用是件好事。

我无法想象这篇文章还能添加什么内容。不过没关系。))

 
为什么要为几个符号编写这么多代码?在我看来,为每个符号设置一个 Expert Advisor 不是更简单吗?在这方面,亲爱的作者,您能告诉我如何转换这些用于处理挂单 的函数,使它们只适用于一个符号,除了在变量 #define NUMBER_OF_SYMBOLS 中加入一个的方法吗?
 
kuva:
为什么要为多个符号编写这么多代码?

为了能在测试器中同时在多个符号上测试系统。

kuva:
把一个智能交易系统放在不同的符号上不是更简单吗?在我看来,这样执行程序会更快。在这方面,亲爱的作者,除了在变量 #define NUMBER_OF_SYMBOLS 中加入一个字符外,您能否告诉我如何转换这段代码,使其只在一个字符上运行?

如果您希望代码只对一个字符有效,只需删除所有与字符搜索相关的循环即可。然后,您需要从某些函数中删除字符序列号的第一个参数。

此外,不再需要用外部参数值初始化的数组。在使用过这些数组的函数中,必须用外部参数变量来替代它们。

 
真实刻度 上进行前向测试 - 优化结果将与之相反。
 
通过 symbol_number 搜索符号非常不方便。我曾经使用过这种方案,但现在我改用了 OOP。每个符号 = 类的一个实例。运行时,在每个OnChartEvent 事件中,按顺序搜索类的实例。这样做的速度甚至更快一些。