Обсуждение статьи "Рецепты MQL5 - Реализуем ассоциативный массив или словарь для быстрого доступа к данным" - страница 3
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Решил применить данный класс в своем советнике как контейнер стратегий вида (StrategyGUID, Strategy), где StrategyGUID - идентификатор типа ulong; Strategy - стратегия, созданная на основе класса с наследованием от CObject.
Соответственно объявляю необходимые переменные, в т.ч. CDictionary StrategyBook - книгу активных стратегий; создаю нужные стратегии Strategy01, Strategy02, которые в функции OnInit() советника инициирую различными параметрами, в т.ч. присваивая им уникальные GUID. В самом конце OnInit() решаю сохранить стратегии в StrategyBook путем вызова кода
StrategyBook.AddObject(Strategy01.strGUID,Strategy01);
StrategyBook.AddObject(Strategy02.strGUID,Strategy02);
И тут получаю по обеим строкам ошибку "StrategyХХ - parameter conversion not allowed".
Исходя из моего опыта с C# все сделано правильно. Но на MQL5 вот такая ошибка.
С чем она может быть связана?
Решил применить данный класс в своем советнике как контейнер стратегий вида (StrategyGUID, Strategy), где StrategyGUID - идентификатор типа ulong; Strategy - стратегия, созданная на основе класса с наследованием от CObject.
Соответственно объявляю необходимые переменные, в т.ч. CDictionary StrategyBook - книгу активных стратегий; создаю нужные стратегии Strategy01, Strategy02, которые в функции OnInit() советника инициирую различными параметрами, в т.ч. присваивая им уникальные GUID. В самом конце OnInit() решаю сохранить стратегии в StrategyBook путем вызова кода
StrategyBook.AddObject(Strategy01.strGUID,Strategy01);
StrategyBook.AddObject(Strategy02.strGUID,Strategy02);
И тут получаю по обеим строкам ошибку "StrategyХХ - parameter conversion not allowed".
Исходя из моего опыта с C# все сделано правильно. Но на MQL5 вот такая ошибка.
С чем она может быть связана?
Причин может быть несколько. Скорее всего либо несовместимость типов, либо неправильная работа с указателями. Также нельзя исключать особенности работы с шаблонными методами (там тоже свои нюансы).
А вообще лучше воспользоваться готовым торговым движком, много времени и нервом сэкономите: https://www.mql5.com/ru/articles/2166
Да, в конечном итоге так и решил сделать.
Новая статья MQL5 Cookbook: Реализация ассоциативного массива или словаря для быстрого доступа к данным была опубликована:
Автор: Василий Соколов
Спасибо за проделанную работу, но я никак не могу заставить работать ни один из примеров кода.
Кажется, Dictionary dict; должен быть CDictionary dict;
Как насчет простого рабочего примера?
В новом MT4 (Build 1080, 12 мая 2017) эти ошибки возникают при компиляции и препятствуют выполнению:
'm_array' - структуры, содержащие объекты, не разрешены Dictionary.mqh 303 25
Здравствуйте,
Как уже было сказано ранее другим человеком, компилируемого примера не существует.
Только файл с комментариями на русском языке.
Я с благодарностью успешно использую библиотеку Василия. Это реальная помощь!
Я помню, что у меня тоже были ошибки компилятора, и я смог их исправить. Правда, не могу сказать, какие именно и что я делал.
А поскольку меня крайне раздражает форматирование MQL5-кода, и я всегда переформатирую все под современный формат C++ (правильные отступы, отсутствие лишних скобок, отсутствие нагромождения комментариев и так далее), я не могу сказать, что именно было реальным изменением в коде. Все, что я помню, это то, что изменения были небольшими.
Если вы хотите использовать библиотеку с правильным форматированием, то вот она:
(Обратите внимание, что я использую табуляцию, поэтому форматирование здесь выглядит нарушенным, но в редакторе MetaEditor это не так!)
Кажется, я нашел ошибку при удалении элемента и попытке добраться до последнего элемента:
Ошибка в CDictionary.mqh будет:
invalid pointer access in 'Dictionary.mqh' (463,9).
Кто-нибудь может подтвердить это? Есть идеи, как исправить?