MetaTrader 5平台更新build 3280:根据交易者反馈的其他改进和修复 - 页 2

 

我可以建议一个改进吗?其内容如下。通过运行以下脚本代码

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() 
{ 
  
        ENUM_TIMEFRAMES time = PERIOD_D1;
        string szSymbol = "EURUSD";
        long id = ChartOpen(szSymbol, time);
        ChartRedraw(id);

        ChartIndicatorAdd(id, 0, iCustom(szSymbol, time, "Media Movel.ex5"));
}

在任何窗口中,我们将有一个新的窗口打开,其中有欧元兑美元的符号,我们将能够在新创建的窗口中添加一个自定义指标 ....完美 的...然而,如果我们把这个相同的脚本变成一个服务,如下图所示。

#property service
//+------------------------------------------------------------------+
void OnStart()
{
        ENUM_TIMEFRAMES time = PERIOD_D1;
        string szSymbol = "EURUSD";
        long id = ChartOpen(szSymbol, time);
        ChartRedraw(id);

        ChartIndicatorAdd(id, 0, iCustom(szSymbol, time, "Media Movel.ex5"));
}

的行为已经不同了,窗口将按照预期被创建,但即使有了窗口的ID值,我们也不能在 窗口中添加任何指标,它会返回 4802错误....

如果一个服务可以添加一个指标,那将是非常好的,因为我们可以使用服务来做一些额外的工作,而不会使EA负担过重,但即使不可能做到这一点,是谁知道的建议,允许一个服务运行一个脚本,无论如何,这将帮助很多...

如果这不是太过分的滥用......如果MQL5语言 有一个 EXIT() 以允许快速退出递归代码,当它产生故障时,但不是突然退出,我们可以通过调用EXIT() 来处理错误并完全完成程序的执行......就像我们调用ExpertRemove()来完成EA时发生的那样......。总之,感谢您的关注......。😁👍

 

我为/portbale模式安装过几次MT5。目前有三个项目在并行运行,两个在交易时的发布渠道,一个在测试渠道。

不幸的是, 询问是现在更新还是以后更新新版本的窗口并没有指出哪个版本 可以更新。发布或测试。


如果这个窗口只是说:" 已经下载了发行版更新(或测试版更新),那就更好了。及时..."

这样,用户就会知道他是否想在一周内(外汇市场开放)或最好只在周末更新。

也许还可以用颜色来区分发布版更新测试版更新。这可能有助于避免错误。

 
MetaQuotes:

2022年4月29日星期五,MetaTrader 5平台的更新版本将被发布。根据3270版本 发布后收到的反馈,我们在其中做了一些小的补充和修正。

该更新包括以下变化:

  1. 终端:在未平仓订单和头寸的上下文菜单中固定填写标准追踪止损水平。
  2. 终端:更新了用户界面的翻译。
  3. 交叉日志的更正。

该更新将通过实时更新系统提供。

既然有这样的 "小 "修复,我请你在下一个版本中加入这个错误的修复:使用MT5平台的标准功能,从Time$Sale源符号复制点数到自定义符号时,删除关于点数的信息。

对于那些使用交易所工具的人来说,这是一个小的,但非常恼人的bug,因为这个bug导致在MT5中建立的自定义 "连续 "期货上,不可能应用与交易所tick历史相关的指标!

连续的NQ

 
这个编译器警告 不是多余的吗?
void OnStart()
{
  Print(DEAL_REASON_TP == ORDER_REASON_TP); // implicit conversion from 'enum ENUM_ORDER_REASON' to 'enum ENUM_DEAL_REASON'
}
 

枚举转换的编译器错误。

ENUM_DEAL_REASON Reason() { return(DEAL_REASON_CLIENT); }

void OnStart()
{
  ENUM_ORDER_REASON Reason1 = Reason();                    // 'Reason' - cannot convert enum
  ENUM_ORDER_REASON Reason2 = (ENUM_ORDER_REASON)Reason(); // OK
}

搜索字符串Oshibka 040

 
fxsaber #:

枚举转换的编译器错误。

搜索字符串Oshibka 040

似乎没有错误。每个枚举都是它自己的类型。一个人只有通过明确的转换才能投向另一个人。编译器会在隐含的那个地方崩溃。

 
Stanislav Korotky #:

似乎没有任何错误。每个枚举都是它自己的类型。一个人只有通过明确的转换才能投向另一个人。编译器对隐含的那个人发誓。

错误,而不是警告。

'Reason' - cannot convert enum
1 errors, 0 warnings            
 
fxsaber #:

错误,而不是警告。

那又怎样?

 
Stanislav Korotky #:

那又怎样?

好吧,那我们就不要编译这样的代码了。

void OnStart()
{
  double d = 0;
  int i = d;
}
 
fxsaber #:

错误,而不是警告。

根据文档:enum 指的是一些有限的数据集在这个意义上,比较和赋值并没有本质上的不同:在这两种情况下,必须有警告或错误。而你可以比较而你不能分配的事实是无稽之谈