初学者的问题 MQL4 MT4 MetaTrader 4 - 页 154

 
nidves 首先,用代码做一个正确的信息,这很难理解,其次,我希望看到新闻文件的结构,否则不清楚什么数据用在哪里。
 

吸引你眼球的第一件事是,你把EA作为一个普通脚本使用。阅读手册,看看它们有什么不同。适合你的任务的是脚本,而不是专家顾问!

第二,为什么要使用这种设计?

  for (count=1; count<=countstr; count++)
  {
   //----
   //----  
  if (count>=countstr) break;
  }

也是你问题的根源所在。

void CreatFile()
   {
    string Filepatch="Analyse news\\"+"Symbol"+"_"+IntegerToString(periodMT)+".csv";
    Comment("Creat a new file");
    int file=FileOpen(Filepatch, FILE_WRITE|FILE_CSV);
    FileWrite(file, "Symbol","Period","News","Data Time","Open","High","Low","Close");
    
    int  bar_index=iBarShift(symbolMT,periodMT,DateNews[count-1]); 
//Чему равен в этот момент count? 
//Для чего нужен был массив событий если в обработку попадает только одно событие?
//Функция iBarShift (так как вы используете) возвращает либо номер бара по времени либо ближайший номер бара если в истории есть пропуски 
//Внимательно почитайте описание 
    int  countBar=bar_index;
    
    for(count=1; count<=countstr; count++)
    {
    countBar--;
    
    FileWrite(file,symbolMT,periodMT,NameNews[count-1],DateNews[count-1],
    
    DoubleToStr(iOpen(symbolMT,periodMT,countBar))

    );
    }
    FileClose(file);
    ExpertRemove();
   }

好吧,最后你在一个简单的程序中非常混乱地描述了你想从这个程序中得到什么,让我们试着一步一步地很好地写出这个脚本吧

 
Vitaly Gorbunov:

吸引你眼球的第一件事是,你把EA作为一个普通脚本使用。阅读手册,看看它们有什么不同。适合你的任务的是脚本,而不是专家顾问!

第二,你为什么要使用这种设计?

也是你问题的根源所在。

最后,你在一个简单的程序中制造了太多的噪音,描述一下你想从这个程序中得到什么,让我们试着一步一步地写出这个脚本吧

维塔利,谢谢你的答复

1)关于剧本,我理解你,我会努力的。

2)嗯,一切都很简单,我打断了for循环。

3) 我想创建一个专家顾问或脚本,以下载特定工具+时间框架的报价,按特定日期和时间的特定新闻

写入文件的最终结果应该是这样的

符号期间新闻日期时间开放式关闭
英镑兑美元5加拿大基准消费物价指数(CPI)(月)(m/m26.01.2018 16:30:000.000000000.000000000.000000000.00000000
英镑兑美元5加拿大基准消费物价指数(CPI)(月)(m/m21.12.2017 15:30:000.000000000.000000000.000000000.00000000
英镑兑美元5加拿大基准消费物价指数(CPI)(月)(m/m17.11.2017 15:30:000.000000000.000000000.000000000.00000000
英镑兑美元5加拿大基准消费物价指数(CPI)(月)(m/m20.10.2017 15:30:000.000000000.000000000.000000000.00000000

以此类推,不同的工具+时间框架+新闻和日期

还有一个细微差别。如果数据是在60分钟的时间框架上卸下的,那么报价应该对应于16:00和15:00的时间框架。

如果新闻的时间框架是14:45,那么报价应该与该时间相对应。

1分钟 - 14:45

5分钟 - 14:45

15分钟 - 14:45

30分钟 - 14:30

60分钟 - 14:00

我希望我说得很清楚。谢谢你

 

再看看这个循环!变量计数只由for语句 本身改变,所以if在这个循环中是多余的。

现在让我们来定义我们将如何处理这些数据。在我看来,从新闻文件中读取新闻参数,处理数据并将其写入报价文件中,会更符合逻辑。收集一个数组的新闻,然后要为一条记录再跑一遍数组,这似乎并不合理,此外,很多时候在处理数组的时候会出现很多与索引相关的错误。

 
Vitaly Gorbunov:

再看看这个循环!变量计数只由for语句 本身改变,所以if在这个循环中是多余的。

现在让我们来定义我们将如何处理这些数据。在我看来,从新闻文件中读取新闻参数,处理数据并将其写入报价文件中,会更符合逻辑。收集一个数组的消息,那再去跑遍一个数组的一条记录似乎并不合理,另外,很多时候在处理数组的时候会犯很多与索引有关的错误。

我的意思是,提前创建带有引号的文件,并在文件中添加新闻参数?

 
nidves:

你的意思是提前创建报价文件,并在文件中添加新闻参数?

你不明白我的意思,我们从新闻文件中读取,处理后立即写入 报价文件中,如此反复,直到整个新闻文件被处理完毕!"。
 
Vitaly Gorbunov:
你不明白我的意思,我们从新闻文件中读取,处理后立即写入 报价文件中,如此反复,直到整个新闻文件被处理完毕!"。
这就是我想做的,只是通过数组。你会如何写这段代码?
 
nidves:
这就是我想做的,只是通过数组。你会如何写这样的代码?
为什么在不需要的地方使用数组?代码越简单,你能犯的错误就越少!
 
Vitaly Gorbunov:
为什么要在不需要阵列的地方使用它?代码越简单,你能犯的错误就越少!

我正在通过这段代码学习如何处理数组。毕竟,这项任务在原则上并不复杂。

OpenSymbol  [count-1]=iOpen(symbolMT,periodMT,numberBar);

打开 "的引号已经存储在上面的数组中。因此,我只需要从数组中拉出我需要的日期的报价。

 
nidves:

我正在通过这段代码学习如何处理数组。毕竟,这项任务在原则上并不复杂。

打开 "的引号已经存储在上面的数组中。因此,我只需要从这个数组中提取我需要的日期的报价。

我现在要去夏天,周一就会到。如果你有兴趣,请加我为好友,我们可以在不影响论坛的情况下聊天。
原因: