Ошибки, баги, вопросы - страница 2458

 

При переходе с MQL4 на MQL5 столкнулся с глюком:

код:

ResetLastError();

int ObjTotal = ObjectsTotal(0);

int Error = GetLastError();

возвращает:

ObjTotal = 0

Error = 4022

Что это за ошибка, почему ее нет в документации?

Пробовал разные варианты: ObjectsTotal(0, -1, -1), ObjectsTotal(ChartID(), 0, OBJ_TREND) и т.д.

Результат тот-же. 

Как заставить это работать?

Терминал: MetaTrader 5, Version 5.00 build 2025.
 
Игорь Евдокимов:

Совет: хотите что-то спросить - вставляйте ПОЛНЫЙ код, а не кусок. 

В чём смысл: любой человек берёт Ваш код и запускает у себя. А кусочный код практически никто не смотрит - кусочный код - это неуважение.

Пример Вашего кода:

//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ResetLastError();
   int ObjTotal=ObjectsTotal(0);
   int Error=GetLastError();
   Print("ObjectsTotal: ",ObjTotal,", GetLastError: ",Error);
//---
  }
//+------------------------------------------------------------------+

Запускаем на графике на котором нет ни одного графического объекта. Результат:

2019.05.10 13:26:59.169 1 (EURUSD,H1)   ObjectsTotal: 0, GetLastError: 0

То есть никакой ошибки нет. 


Использую терминал:

2019.05.10 13:25:35.665 MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
2019.05.10 13:25:35.668 Windows 10 (build 17763) x64, IE 11, UAC, Intel Core i3-3120M  @ 2.50GHz, Memory: 3712 / 8077 Mb, Disk: 77 / 415 Gb, GMT+2
2019.05.10 13:25:35.668 C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
Файлы:
1.mq5  2 kb
 
Vladimir Karputov:

Совет: хотите что-то спросить - вставляйте ПОЛНЫЙ код, а не кусок. 

Спасибо за совет, так и буду делать.

Тем не менее, вопрос остается открытым.

Уточнение: если кусок кода из предыдущего поста находится в функции OnDeinit() индикатора, то результат такой:

2019.05.10 14:08:20.105 PtS (EURUSD,H1) ObjectsTotal: 0, GetLastError: 4022

Если тот же код запустить после удаления индикатора с графика, как скрипт (1.mq5 из предыдущего поста), то получаем:

2019.05.10 14:08:33.609 1 (EURUSD,H1) ObjectsTotal: 8575, GetLastError: 0

Помогите разобраться с причиной.

Господа разработчики! Что это за ошибка, которой нет в документации?

 
Vladislav Andruschenko :

ошибка в тестере стратегий при оптимизации.

"task rejected by  tester agent "

Например, если валюта счета EUR,

  • EURJPY Нет проблем
  • Ошибка при GBPJPY


Если валюта счета - доллар США,

  • USDCAD Нет проблем
  • USDJPY Нет проблем
  • Ошибка при EURAUD


появляется при использовании в коде других валютных пар.

конкретно на моем примере - это использование расчета динамического лота



т.е. когда советник запрашивает цену другой валюты. 

@Vladislav Andruschenko

Привет, вы получили какой-либо ответ или решение этой проблемы?

 
Vladimir Pastushak:

При смене графика / периода PBB получает значение 10, не зависимо от того какое значение вы указали в поле ввода.

В момент переинициализации происходит так как будто это первый запуск.

Решить Вашу задачу можно двумя спсобами

1 - хранить значение PBB в глобальных переменных терминала и получать период оттуда

2 - В момент срабатывания ОнЧартЕвент делать переинициализацию индикатора MA и получать новый хендл...

Проверил все варианты. Не работает.

Недоработка в программе MQL5.

 Не инициализируются новые значения. Только с параметром input int PBB_=. Других вариантов нет. Совсем плохо.

 
Uladzimir Izerski:

Проверил все варианты. Не работает.

Недоработка в программе MQL5.

 Не инициализируются новые значения. Только с параметром input int PBB_=. Других вариантов нет. Совсем плохо.

В MQL все хорошо, просто Вы не понимаете что делаете в коде и как все работает...

Еще раз повторяю, при вызове ChartSetSymbolPeriod(0,_Symbol,_Period);   

Вы сбрасываете все на по умолчанию...

Как вариант попробуйте в ините запросить значение из Вашего текстового поля.

По логике получится так, первый запуск индикатора все создается а при смене данных в поле будет новый вызов инита и установка значения из Вашего текстового поля...

 
Vladimir Pastushak:

В MQL все хорошо, просто Вы не понимаете что делаете в коде и как все работает...

Еще раз повторяю, при вызове ChartSetSymbolPeriod(0,_Symbol,_Period);   

Вы сбрасываете все на по умолчанию...

Как вариант попробуйте в ините запросить значение из Вашего текстового поля.

По логике получится так, первый запуск индикатора все создается а при смене данных в поле будет новый вызов инита и установка значения из Вашего текстового поля...

Пробовал и из текстового поля и через GlobalVariable и что только не пробовал. Глухо как в танке.

В другом варианте OnCalculate работает без проблем.

 
Uladzimir Izerski:

Пробовал и из текстового поля и через GlobalVariable и что только не пробовал. Глухо как в танке.

В другом варианте OnCalculate работает без проблем.

Значит что то не то делаете

 
В службу поддержки уже обращался.Посоветовали написать в форум.При подключении к счету открывается окошко и пишется,что я не должен читать не подготовленные "ряды",хотя и написано,что авторизация разрешает подключение к счету...Что делать?Посоветуйте...
 
Vladimir Pastushak:

Значит что то не то делаете

Так уже код выложил.

Если Я неумека, кто то должен быть профи. Покуда не вижу.

Принимаю ваше старание найти ответ. Тут глубже в понимании. Т.е. на уровне разработчиков.

Причина обращения: