错误、漏洞、问题 - 页 2932

 

描述中的错误。

误差

这个字段被称为:time_type

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

我正试图让用户从指标设置窗口的菜单中选择两个时间段和它们的数量。

而我想让选定的时期直接进入PArray。但从上面的例子中可以看出,我给数组分配的是程序中预先设定的值,而不是用户输入的值。此外,编译器会产生警告。

当我试图将最后一行替换为。

编译器就会产生一个错误。

另外,NO_PERIOD=0意味着PERIOD_CURRENT,我不需要这个,我需要类似false或EMPTY_VALUE的东西,但它们根本不适合。

我怎样才能解决这个问题?

几乎修好了。

 
测试器中的符号设置不成立,交易时段 在周四和周五被切断,因为这个原因,总是出现错误的市场关闭,头寸不能打开,优化是不可能的,机器人不能正常工作,其他经纪商很好,但我需要这个经纪商,我应该怎么做?我不知道,但我以前从未遇到过这种问题。我不知道,我不知道我是否已经注册了交易机器人,但我一直无法开仓。谁知道该怎么做?注册了一个新账户,清理了终端的临时文件,尝试了另一个终端,没有帮助。视频问题 https://radikal.ru/video/1HA3UfUNVZt
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
SymbolInfoSessionQuote - Получение рыночной информации - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
你能告诉我们有什么方法可以消除 "数组超出范围 "的错误吗?首先,我不能用Print来打印一个已经超出范围的数组元素,因为错误信息在它前面,无法打印。第二,这个错误不是系统地出现,而是随心所欲地出现:它出现过一次,指标没有工作(但它在图表的指标列表中),然而,在后来的时间里,它没有出现,没有重新编译指标,没有什么可说的修改。
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:
告诉我,有什么战斗方法可以捕捉和纠正 "阵列超出范围 "的错误?

ArrayResize()在写一个数组元素之前,先计算并在那里输入应该在数组中的元素数量,或者使用一个动态数组,它本身会变胖。你只是在数组之外,例如你指定了100个元素的大小,但由于第一个元素是#0,有些人就会感到困惑,如果你把数字写成一排,就会适合0-99。我不是一个专业的程序员,如果有的话(但我可以),我脑子里出现的第一件事,它是有效的))。

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

在写数组的一个元素之前做ArrayResize(),计算并在那里输入应该在数组中的元素数量,或者使用一个 能自我增长的动态数组

实际上,无论如何,它是动态的。从帮助中可以看出:"该函数只能应用于动态数组注意,由SetIndexBuffer()函数分配为指标缓冲区的动态数组不应该被调整大小。对于指示器缓冲区,所有调整大小的操作都由终端的执行子系统执行。"但它不是一个指标性的缓冲器,所以你必须用你的手和头来思考......。

 
x572intraday:

实际上,它已经是动态的了。从帮助中可以看出:"该函数只能应用于动态数组你应该记住,由SetIndexBuffer()函数分配为指标缓冲区的动态数组不能被调整大小。对于指示器缓冲区,所有调整大小的操作都由终端的执行子系统执行。"但这不是一个指示器缓冲器,所以你必须用你的手和头脑思考......

捕捉这类错误的问题只能通过使用 "层 "来解决,比如一个拦截寻址的自定义数组类

MQL's OOP notes: rubber arrays, safe numbers, exceptions handling and other tricks: part 1
MQL's OOP notes: rubber arrays, safe numbers, exceptions handling and other tricks: part 1
  • 2016.11.08
  • www.mql5.com
Today we're starting a patchy subject, which will combine many different things. This is why I decided to split it into parts. Out final goal is exception handling, but before we can address it, we
 

当启动EA的时候,当algotrading被禁用,然后打开algotrading。

根据错误代码,尽管TERMINAL_TRADE_ALLOWED属性为真,但贸易禁令仍在。

#include <Greshnik\\ErrorDescription.mqh>
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
     {
      return;
     }
   MqlTradeRequest tr;
   MqlTradeResult r;
   ResetLastError();
   if(!OrderSend(tr,r))
     {
      int err=GetLastError();
      Print(err,"  ",cLng::CodeDescription(err));
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
2020.12.30 15:25:38.629 Experts automated trading is enabled
2020.12.30 15:25:39.159 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.297 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.397 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.499 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.725 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:42.781 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:43.129 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:43.758 Experts automated trading is disabled

结果应该是这样的。

2020.12.30 15:29:58.406 Experts automated trading is enabled
2020.12.30 15:30:02.247 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:02.368 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:02.486 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:04.320 Experts automated trading is disabled
 
CopyTime(_Symbol,tf,0,1,Arr);
很明显,必须总是ArraySize(Arr)=1。这是在复制成功的情况下。但是,在什么情况下,抄写酒吧可能会失败?因为当"数组超出范围 "错误 发生时,终端指向 Arr[0]。
 
x572intraday:
很明显,它应该总是ArraySize(Arr)=1。这是在复制成功的情况下。但是,在什么情况下,抄写酒吧可能会失败?当"数组超出范围 "错误 发生时,终端指向 Arr[0]。

终究还是抓到了错误,引自帮助。

4401

未找到所需的历史记录。

将其打印到日志中--得到了。

2020.12.31 14:45:20.474 test (EURUSD,H2)        ArraySize(Arr)=0; copied=-1; TF=PERIOD_H2
2020.12.31 14:45:20.474 test (EURUSD,H2)        Error Code = 4401

我现在该怎么做,我去哪里?我是个坏手还是......?毕竟,我只是把一个柱子从0复制到1。它(历史)怎么可能不是呢?越是这样,错误不一定会暴露出来。还是有必要事先强行检查并加载历史记录?

原因: