问题标签 [mql5]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
221 浏览

struct - 如何向 MQL5 中的内置结构添加新项目?

我有以下示例 MQL5 代码(用于演示问题):

它在 Metaeditor 5 的最新版本(版本 1495)上编译得很好,但是在版本 1162(使用较旧的mql编译器)中,我遇到了以下错误:

我想改进代码以向后兼容,并且我已经PositionSelectByTicket按照上面的方法添加了定义以避免未定义的函数。

虽然我如何修复上面的错误以在两个编译器上工作?

在 struct 的文档页面中,MqlTradeRequestpositionstruct 项存在,因此很可能它是在最近的构建中添加的。

那么,有没有办法将缺少的变量项添加到现有的内置结构中,这样旧的编译器就会通过语法检查?

0 投票
2 回答
246 浏览

compiler-errors - 如何定义指向同名静态类方法的全局宏?

我有以下 MQL4/5 代码:

但是,根据错误,它无法在 MQL4 或 MQL5 下编译:

与最新的 1498 版本相同的错误。

基本上它是说Ask太复杂宏。虽然当我将Ask()方法重命名为GetAsk()并更新宏定义时它工作正常,
但是
我想了解
是否有任何其他解决方案而不必重命名它。

是否有任何语法可以定义可以理解以下宏的宏替换:

无需重命名它,同时仍将其保留在静态类方法中?

0 投票
3 回答
1906 浏览

pointers - 如何在 MQL 中分配指向结构数组的指针?

我有 3 个相同类型的单独结构数组,例如:

与此处描述的 C类似。

假设稍后填充这些数组,我如何创建指向其中之一的公共指针?


所以我可以做类似的事情:orders_ptr = &orders1*orders_ptr = orders1

这是我的非工作代码:

这是另一个尝试:

通过不同的池,我的意思是类似于在OrderSelect中使用它的pool参数完成的事情,但我的池完全不同。

但是上面的代码失败了,有很多没有任何意义的错误,我已经在评论中包含了其中的一些。

什么是正确的方法?

我的目标是分配一个指向结构数组的指针,这样我就可以遍历选定的数组。

0 投票
2 回答
204 浏览

compiler-errors - 前向声明在 MQL 中无法按预期工作

我在以下层次结构中的 4 个不同文件中有 4 个类:

括号中是类指针,类实现为类变量。

所以 Draw 和 Market 类扩展了 Chart,Chart 扩展了 Terminal。虽然我仍然想定义一些类指针,但终端类本身具有chart指向图表类的指针。

这些文件是:

Terminal.mqh

Chart.mqh

注意:包含到DrawMarket文件放在类定义之后,只是为了确保Chart在加载这些包含时定义当前类,并且就在声明使用它的变量之前。

Draw.mqh

Market.mqh

为了避免在加载包含时出现任何编译器错误,我进行了前向声明,但是编译仍然失败。

错误如下(取决于我要编译的文件):

  • Terminal.mqh(3 个错误,0 个警告)

    '终端' - 结构未定义 Chart.mqh 8 22

    '图表' - 结构未定义的 Draw.mqh 7 21

    '图表' - 结构未定义 Market.mqh 8 23

  • Chart.mqh(2 个错误,0 个警告)

    '图表' - 结构未定义的 Draw.mqh 7 21

    '图表' - 结构未定义 Market.mqh 8 23

  • Draw.mqh(1 个错误,0 个警告)

    '图表' - 结构未定义 Market.mqh 8 23

  • Market.mqh(1 个错误,0 个警告)

    '图表' - 结构未定义的 Draw.mqh 7 21

在最新版本 1498 中测试。

对于 MQL4 和 MQL5 编译器构建,上述错误是相同的。

以上问题有解决办法吗?我错过了什么?

澄清一下,我的目标是将每个类保存在一个单独的文件中。

0 投票
1 回答
65 浏览

superclass - 如何在 MQL 中初始化类并覆盖其父级?

我有两个课程:扩展市场的图表。

我想初始化 Chart 类,但提供指向已经存在的父类的指针以节省一些内存(如果它可以指向同一事物,则避免初始化新实例)。

这是代码:

但是它失败了:

'=' 对象需要

是否可以通过提供类指针在子初始化期间覆盖父类的实例?

0 投票
2 回答
440 浏览

struct - 如何在两个不同的文件中编译相交的枚举和结构?

我有这两个简单的文件:

Trade.mqh

Order.mqh

但是编译失败。

如何在不保留相同文件且不将结构移动到一个文件的情况下解决编译问题?


我想保持结构的原样(两个单独的文件),贸易类文件中的贸易相关结构,它依赖于订单类文件中定义的订单相关枚举。

错误是:

  • MQL4/MQL5 用于Trade.mqh

    '交易' 结构未定义 (Order.mqh)

    'TradeRequest' - 没有类型的声明 (Order.mqh)

  • MQL4 用于Order.mqh

    'ENUM_ORDER_STATE' - 没有类型的声明 (Trade.mqh)

    '贸易' - 结构未定义 (Order.mqh)

    ';' - 程序意外结束 (Order.mqh)

    在 MQL5 中编译,但带有枚举已经定义的警告。

0 投票
2 回答
3907 浏览

node.js - 如何使 MetaTrader 终端 DDE 将外汇汇率导出到本地 Node.js 服务器?

我有一个 Node.js 服务器,在我的计算机上运行,​​同时我也在运行一个 MT4.exe。

如果我可以通过这个脚本将实时汇率导出到一个简单的 Excel 文件。

我想这意味着我也可以轻松地将实时汇率导出到我的 Node.js 服务器。

我怎样才能做到这一点?

在 Excel 中,我只将此代码粘贴MT4|BID!USDEUR到一个单元格中,它可以工作,并且每次 BID USDEUR 汇率发生变化时,单元格都会发生变化,这使得单元格处于活动状态。

0 投票
2 回答
5795 浏览

node.js - 如何从 MetaTrader 终端 5 MQL 5 向我的 nodejs 服务器发送请求,该服务器在我的 MT5 主机上本地运行?

我正在尝试在我的 nodejs 服务器中获取外汇汇率,并且 socke.io 将它们发送到客户端,同时运行 MetaTrader 终端 5 或 4。

所以我想我必须使用 MQL4/5。我知道如何处理我的 nodejs 服务器中的请求。我不知道在哪里编写 MQL4 代码,在我的 MetaTrader 终端中配置什么。

假设我想在每次更改时将 EUR/USD 出价发送到我的 nodejs 服务器。我如何使用 MT4/5 和 MQL4/5 实现这一目标?

我的nodejs代码:

MQL5 脚本:

当我编译并运行时,我看到它是在 MT Experts 选项卡中执行的,但是在我的 nodejs 服务器上,控制台什么也没有记录。

0 投票
1 回答
745 浏览

node.js - 如何制作 MetaTrader 5 终端脚本以将 EURUSD 出价率发布到我的 nodejs 服务器的 443 端口?

基本上我希望我的本地 MetaTrader 5 终端在每次 EUR/USD 货币对的 BID 汇率变化时执行 POST 请求。

我将console.log在我的 nodejs 服务器中访问它:

这是我的 MQ5 脚本,编译时没有错误。但是当我运行它时,我的 nodejs 服务器终端中没有看到任何记录。

Print("Test:",b);在 Meta Trader 中看到脚本打印Experts Tab

我还在 MetaTrader 5 终端 -> 工具 -> 选项 -> 智能交易系统中添加了

MQ5 脚本

0 投票
2 回答
109 浏览

class - 如何在 MQL 中调用未知类的方法?

我有一个Collection旨在存储不同类型对象的类,但是我想调用这些类共享的特定方法名称(例如ToString())。

这是我的尝试:

但是使用((void *) data[i]).ToString()语法失败:

'ToString' - 成员函数未定义 Collection.mqh

如何ToString()为每个存储的对象调用方法?