mql4语言的特点、微妙之处以及技巧 - 页 14

 
开发者注意。


https://docs.mql4.com/ru/basis/types/integer


C++标准只保证char类型 的大小。其他类型的长度是具体实施的。匹配表是不正确的,可能导致未定义的行为。

Целые типы - Типы данных - Основы языка - Справочник MQL4
Целые типы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Целые типы представлены в языке MQL4 одиннадцатью видами. Некоторые из типов могут использоваться вместе с другими, если этого требует логика программы, но при этом необходимо иметь ввиду правила преобразования типов. В таблице приведены характеристики каждого типа. Кроме того, в...
 
与本主题无关的评论已被移至 "MQL4 MT4 MetaTrader 4初学者的问题"。
 

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

fxsaber, 2018.12.01 11:15

超级制动器设计
string Str[];
const int handle = FileOpen(FileName, FILE_READ | FILE_ANSI | FILE_TXT);  

FileReadArray(handle, Str);

一个40Mb的100万行的文件需要18秒的时间来读取。


同样的输出结果,但以不同的方式进行

  uchar Bytes[];
  const int handle = FileOpen(FileName, FILE_READ | FILE_BIN);
  
  FileReadArray(handle, Bytes);

  string Str[];
  StringSplit(CharArrayToString(Bytes), '\n', Str);

已经在0.5秒内完成。


 

在16Gb的内存中超载任务。Chrome浏览器最后冻结了,MT5在运行优化功能的情况下--没有问题。但更有趣的是MT4。

指标仍在工作,但由于没有ArrayResize结果检查,Expert Advisors因 "超出范围 "而停止。

我并不总是想检查ArrayResize,但这里证实了没有这个检查可以停止,例如,VPS上的 战斗专家顾问。


我唯一不能理解的是,如果ArrayResize之前是用一个大的Reserve做的,结果怎么会 "超出范围"?

 
fxsaber:

在16Gb的内存中超载任务。Chrome浏览器最后冻结了,MT5在运行优化功能的情况下--没有问题。但更有趣的是MT4。

指标仍在工作,但由于没有ArrayResize结果检查,Expert Advisors因 "超出范围 "而停止。

我并不总是想检查ArrayResize,但这里证实了没有这个检查可以停止,例如,VPS上的 战斗专家顾问。


我唯一不能理解的是, 如果ArrayResize之前是用一个大的Reserve做的,它怎么会 "超出范围"?

容易 :-)这对大多数语言/系统都是如此。

储备分配了虚拟内存,当我用完物理内存时,我找不到空闲的页面。我们得到了一个处理器异常,经过一系列的处理,变成了超范围的

顺便说一句,MT完全没有崩溃的事实证实了工艺的质量:-)

 

在历史上的秩序排序问题上犯了严重的错误。不幸的是,按关门时间排序并不总是如此。

检查脚本

#property strict

void OnStart()
{
  datetime time = INT_MAX;
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    {
      if (OrderCloseTime() > time)
      {
        Print(time);
        OrderPrint();
        
//        break;
      }
      
      time = OrderCloseTime();
    }
}


为什么这样一个基本的代码不能立即写出来用于自我测试,这是一个谜。

这也是一个难题:怎么可能不按时间对订单进行排序?我问这个问题是因为我在一个QB中使用了一个自定义测试器。而从逻辑上讲,既然这个命令进入了历史,那么它的记录就比之前的那些记录要晚。如何动摇这个逻辑,一点也不清楚。

也许,订单存储在不同的MT5服务器上,在同步过程中出现这种混乱。我希望这是一个终端的错误,而不是MT4服务器的问题。我也希望这种情况不会发生在MT的交易中。

 
fxsaber:

在历史上的秩序排序问题上犯了严重的错误。不幸的是,按关门时间排序并不总是如此。

检查脚本


为什么不能创建这样一个基本的代码来进行即时自我测试,这是一个谜。

这也是一个难题:怎么可能不按时间对订单进行排序?我问这个问题是因为我在一个QB中使用了一个自定义测试器。而从逻辑上讲,既然这个命令进入了历史,那么它的记录就比之前的那些记录要晚。如何动摇这个逻辑,一点也不清楚。

也许,订单存储在不同的MT5服务器上,在同步过程中出现这种混乱。我希望这是一个终端的错误,而不是MT4服务器的问题。我也希望这种情况不会发生在MT的交易中。

你是否尝试过改变账户历史中的排序方式?

 
Artyom Trishkin:

你是否尝试过改变账户历史中的排序方式?

并不影响结果。

 
Artyom Trishkin:

你是否尝试过改变账户历史中的排序方式?

是的,它应该没有影响。只有账户历史标签中的订单数量 受到影响。你必须注意这一点。

 
fxsaber:

并不影响结果。

职位的关闭 时间是由服务器给出的。

原因: