Обсуждение статьи "Передача данных между индикаторами - простое решение наболевшей проблемы" - страница 2
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
...Только один вопрос – как преобразовать указатель в целое. В этом нам и поможет Dynamic Link Library, а именно, возможности языка C++ по приведению типов данных. В связи с тем, что указатели в C++ являются четырехбайтовым типом данных, в наших целях удобно использовать четырехбайтовый же тип int...
Если не ошибаюсь, автор говорит о неявном преобразовании типов. Очень позновательная статья - огромное спасибо автору.
Ещё хотел добавить, что если понадобится сделать метод SetPtr, то не обойтись без явного приведения типов.
Будет выглядить примерно так
Вообще, MQL5 выиграл бы сильно, если бы указатели получили широкое признание и использование.
Вообще, MQL5 выиграл бы сильно, если бы указатели получили широкое признание и использование.
Я бы добавил в этот список обработку исключений, конструкторы с параметрами и множественное наследование.
Но разработчики почему-то считают, что мы не в достаточной мере умны, чтобы воспользоваться всеми этими возможностями, а только навредим себе.
Хотя все перечисленное является стандартными средствами ООП и никому особо еще не повредило.
Создается впечатление (у меня), что они просто не в состоянии надежно реализовать эти механизмы.
Печально, что кто-то решил, что этого у нас не будет
Как всё сложно!...
С помщью Ильнура ещё год назад написал библиотеку на MQL4 для работы с памятью. Можно выделять память, двигать указатели, писать и читать, передавать в любые другие программы имя области памяти.
Всё построенно на маппинге. Это существенно проще предлагаемого.
А можно добавить в DLL функции не только для работы с double, но и для datetime, для long и для int ?
Получается, что сейчас данные с массивов цен - легко можно переносить между вложенными структурами без копирования, а вот данные по времени, спреду и объемам - надо все равно копировать.
Пытался приспособить GetPtr для работы с datetime и long (и через извращения с передвижением бит с int) - не выходит, функция принимает ссылку на массив, и ее нельзя преобразовать.
Кто-нибудь решил данную проблему?
Молчание.
Эх... Придется самому вспоминать С++ и ставить MSVC...
Молчание.
Эх... Придется самому вспоминать С++ и ставить MSVC...
А сейчас вам никто ничего и не ответит, все ушли на фронт.
Слышали что нибудь об обновлении МТ4 ?
Краём уха, краём... :)
Обновление МТ4 мне очень даже кстати - у меня библиотеки большие, но все - на МТ5 (я, видите ли, без ООП жисть себе не представляю). А ДЦ, нехорошие люди - далеко не все МТ5 на реале имеют... Так что - мне данная новость очень даже кстати.
Но - пока не будет нормального МТ4++ я не вижу смысла приспосабливать код под обновленную платформу. Выйдет что-то вроде официальной беты (да, чтобы со Стандартой Библиотекой, я без нее тоже не желаю советников писать) - вот тогда и начнем преобразование кода...
А сейчас мне - ужасно хочется получать адреса не только массивов double, но и других... А - ёк... Хотел было через преобразование типов обойти проблему (время и лонги - тоже ведь восьмибайтные), но пока не выходит...
Вау ! Похоже, задачу можно победить и без написания библиотеки - просто переименовав импортируемую функцию... Сегодня уже поздно, а завтра - попробуем-попробуем...
Мдя. Рано радовался. GetValue для массивов, отличных от double возвращает что-то совсем не то, что хотелось бы... Увы, без MSVC не обойтись... Эх, давно не брал я в руки шашки...
Не понимаю, зачем в MQL нужны указатели? Если вы хотите что-то делать с указателями - делайте это сразу в с++.
Проблем по передаче указателей на другой тип данных и на массивы другого типа - нет! К примеру вот объявление: void setvar(int& var[]); для передачи указателя на массив целых чисел (догадаетесь что надо поменять для других типов?)
Накладные расходы с вызовом dll функций не исчезли (билд 646), скажем пустая mql-функция работает быстрее чем пустая dll-функция, но если добавить туда хотя-бы операцию выборки из массива, типа s[i], то уже тут c++ будет в выигрыше, тем не менее количество вызовов надо сводить к минимуму.
Самая большая утечка быстродействия идет при работе с глобальными переменными - они ОЧЕНЬ МЕДЛЕННЫЕ!!! Гораздо проще, если мы уж сделали dll, хранить глобальные переменные там. Для всех копий советников и индикаторов в рамках одного метатрейдера, линкуется одна копия dll, соответственно все ее глобальные переменные являются глобальными для всех окон метатрейдера (эта правда вынуждает персональны данные одного окна хранить либо в экземпляре класса, либо в массиве с доступом по идентификатору окна)