初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1498

 
你好,请指示。

将数据保存到文件。
void OrderExport(MqlTradeRequest &request)
  {
   static long trans = 0;
   static long keepTrans = 0;
   string file = "OrderExchange" + (request.magic > 0 ? IntegerToString(request.magic) : "") + ".csv";
   int handle = FileOpen(file, FILE_CSV | FILE_READ | FILE_SHARE_READ | FILE_WRITE | FILE_SHARE_WRITE | (Common ? FILE_COMMON : 0), ';');
   if(handle != INVALID_HANDLE)
     {
      FileSeek(handle, 0, SEEK_END);
      long tr = TimeGMT();
      trans = (tr > trans) ? tr : (trans + 1);
      FileWrite(handle,
                trans,
                request.action,
                request.magic,

从文件中获取数据

void OrderImport(MqlTradeRequest &aReq[], int magic, string symbol)
  {
   ArrayFree(aReq);
   long tr;
   static long trans = 0;
   if(trans == 0)
      trans = TimeGMT() - 3;
   string file = "OrderExchange" + (magic > 0 ? IntegerToString(magic) : "") + ".csv";
   int handle = FileOpen(file, FILE_TXT | FILE_READ | FILE_SHARE_READ | FILE_ANSI | (Common ? FILE_COMMON : 0));
   if(handle != INVALID_HANDLE)
     {
      FileSeek(handle, 0, SEEK_SET);
      while(!FileIsEnding(handle))
        {
         string s = FileReadString(handle);
         string aS[];
         int cnt = StringSplit(s, ';', aS);
         if(cnt <= 0)
            continue;
         //---   ПРОБЛЕМНОЕ МЕСТО ОТ
          tr = StringToInteger(aS[0]);
         //---    ПРОБЛЕМНОЕ МЕСТО ДО
         if(tr <= trans)
            continue;

GetLastError() 出错原因是 -破坏了字符串类型 参数

如果通过 Print() 输出 aS[0] 数组,字体与其他部分不同。


如果只打印参数 tr , 则 = 0

 
Mikhail Toptunov 字符串类型 参数

如果我通过 Print() 输出一个 S[0] 数组,字体与其他数组不同。


如果只打印参数 tr , 则 = 0

你试过查看文件本身吗?

您正在写入二进制值并读取文本字符串....

 
Maxim Kuznetsov #:

您试过查看文件本身吗?

您正在写入二进制值并读取文本字符串....

我是这样导入的

void OrderImport(MqlTradeRequest &aReq[], int magic, string symbol)
  {
   ArrayFree(aReq);
   long tr;
   static long trans = 0;
   if(trans == 0)
      trans = TimeGMT() - 1;
   string file = "OrderExchange" + (magic > 0 ? IntegerToString(magic) : "") + ".csv";
   int handle = FileOpen(file, FILE_READ | FILE_SHARE_READ | (Common ? FILE_COMMON : 0));

像这样导出

void OrderExport(MqlTradeRequest &request)
  {
   static long trans = 0;
   static long keepTrans = 0;
   string file = "OrderExchange" + (request.magic > 0 ? IntegerToString(request.magic) : "") + ".csv";
   int handle = FileOpen(file, FILE_READ | FILE_SHARE_READ | FILE_WRITE | FILE_SHARE_WRITE | (Common ? FILE_COMMON : 0), ';');

变得更好,但第一次导入第一个参数 字符串 aS[0]) 时总是出错。


下一个

tr - 以 int(aS[0]) 为单位反映翻译后的字符串

文件已查看,一切就绪。


但是导入第一行的第一个参数 aS[0] 并不能将其转换为 int。
 
Aleksandr Slavskii #:

如果不对数组进行初始化,数组中往往会包含垃圾。

谢谢,我甚至想起来以前遇到过这种情况(0 让我很困惑)。可惜文档中没有说明,我只能把这些东西记在脑子里。

 
Mikhail Toptunov #:

进口

像这样导出

但第一次导入第一个参数 字符串 aS[0]) 时总是出错。


下一个

tr - 以 int(aS[0]) 为单位反映翻译后的字符串

文件已查看,一切就绪。


但是导入第一行的第一个参数 aS[0] 并没有将其转换为 int

怎么会这样?- 第一个 aS[0] 总是坏的(错误 5040)


 
好心人,请给我一点提示。我有一个运行优化的任务,但为了优化,我需要使用外部数据。我是这样做的:我创建了一个包含数据的文件,每次通过时,我都打开文件,写入数组,然后关闭。如何优化并加快这一过程?
 
Mikhail Toptunov #:

怎么会这样?- 第一个 aS[0] 总是坏掉(错误 5040)


在 "导出 "和 "导入 "中设置 UTF-8 编码(或至少设置相同的不含 BOM 的单字节编码)。

(以二进制形式查看文件--前两个字节可能是 BOM,即它是 Unicode)--当你 FileSeek(0,SEEK_SET),然后读取时,你把它们读成了字符串,转换失败。

 
Maxim Kuznetsov #:
BOM

好吧,看来起作用了。确实有一次还是没有反映出来,但之后删除文件时至少不再出现故障了。


FILE_CSV | FILE_READ | FILE_SHARE_READ | FILE_ANSI | (Common ? FILE_COMMON : 0),CP_UTF8

非常感谢!

 

早上好,心情不错!

我遇到了MQL5 参考手册 中缺少ResultRetcodeExternal 描述的问题。在搜索引擎中,我得到了以下答案:没有找到与您的请求 相关的内容。绕了一圈,我发现似乎是"外部交易系统返回的错误代码"。这些错误的拼写和类型取决于经纪商和交易操作输出的外部交易系统"

问题:我找到的定义是否正确?

同时还要问文档开发人员第二个问题:如果是这样,为什么不立即向用户提供完整的信息,而要让他们到处去找这个定义是什么?

弗拉基米尔

 
MrBrooklin #:
ResultRetcodeExternal

您不会找到这样的东西。它不存在于 MQL5 中。

MqlTradeResult,其中有一个字段 retcode_external,并且有对该字段的描述。

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
  • www.mql5.com
Структура результата торгового запроса - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5