Структура торговой транзакции - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Объект динамического массива - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
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
2020.12.3015:25:38.629 Experts automated trading is enabled
2020.12.3015:25:39.159 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:40.297 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:40.397 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:40.499 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:40.725 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:42.781 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:43.129 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:43.758 Experts automated trading is disabled
结果应该是这样的。
2020.12.3015:29:58.406 Experts automated trading is enabled
2020.12.3015:30:02.247 Test1 (EURUSD,M1) 4756 Не удалось отправить торговый запрос
2020.12.3015:30:02.368 Test1 (EURUSD,M1) 4756 Не удалось отправить торговый запрос
2020.12.3015:30:02.486 Test1 (EURUSD,M1) 4756 Не удалось отправить торговый запрос
2020.12.3015:30:04.320 Experts automated trading is disabled
描述中的错误。
贸易交易的结构(MqlTradeTransaction)
这个字段被称为:time_type
我正试图让用户从指标设置窗口的菜单中选择两个时间段和它们的数量。
而我想让选定的时期直接进入PArray。但从上面的例子中可以看出,我给数组分配的是程序中预先设定的值,而不是用户输入的值。此外,编译器会产生警告。
当我试图将最后一行替换为。
编译器就会产生一个错误。
另外,NO_PERIOD=0意味着PERIOD_CURRENT,我不需要这个,我需要类似false或EMPTY_VALUE的东西,但它们根本不适合。
我怎样才能解决这个问题?
几乎修好了。
告诉我,有什么战斗方法可以捕捉和纠正 "阵列超出范围 "的错误?
ArrayResize()在写一个数组元素之前,先计算并在那里输入应该在数组中的元素数量,或者使用一个动态数组,它本身会变胖。你只是在数组之外,例如你指定了100个元素的大小,但由于第一个元素是#0,有些人就会感到困惑,如果你把数字写成一排,就会适合0-99。我不是一个专业的程序员,如果有的话(但我可以),我脑子里出现的第一件事,它是有效的))。
在写数组的一个元素之前做ArrayResize(),计算并在那里输入应该在数组中的元素数量,或者使用一个 能自我增长的动态数组。
实际上,无论如何,它是动态的。从帮助中可以看出:"该函数只能应用于动态数组。注意,由SetIndexBuffer()函数分配为指标缓冲区的动态数组不应该被调整大小。对于指示器缓冲区,所有调整大小的操作都由终端的执行子系统执行。"但它不是一个指标性的缓冲器,所以你必须用你的手和头来思考......。
实际上,它已经是动态的了。从帮助中可以看出:"该函数只能应用于动态数组。你应该记住,由SetIndexBuffer()函数分配为指标缓冲区的动态数组不能被调整大小。对于指示器缓冲区,所有调整大小的操作都由终端的执行子系统执行。"但这不是一个指示器缓冲器,所以你必须用你的手和头脑思考......
捕捉这类错误的问题只能通过使用 "层 "来解决,比如一个拦截寻址的自定义数组类。
当启动EA的时候,当algotrading被禁用,然后打开algotrading。
根据错误代码,尽管TERMINAL_TRADE_ALLOWED属性为真,但贸易禁令仍在。
结果应该是这样的。
很明显,它应该总是ArraySize(Arr)=1。这是在复制成功的情况下。但是,在什么情况下,抄写酒吧可能会失败?当"数组超出范围 "错误 发生时,终端指向 Arr[0]。
终究还是抓到了错误,引自帮助。
4401
未找到所需的历史记录。
将其打印到日志中--得到了。
我现在该怎么做,我去哪里?我是个坏手还是......?毕竟,我只是把一个柱子从0复制到1。它(历史)怎么可能不是呢?越是这样,错误不一定会暴露出来。还是有必要事先强行检查并加载历史记录?