
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот накатал тут рабочий пример хеш-функции Adler32:
Основной код функции взят из википедии и незначительно изменен под MQL5. Вот результат работы скрипта:
Как видно все значения выдаваемые функцией обсолютно разные, хотя сами строки различаются не сильно.
А почему ulong, а не uint ?
И операция с массивами в данной функции крайне не эффективны. Проще модернизировать код и раскладывать unicode на два независимых символа - будет раз в 50 быстрее
3681 мс против 13822 мс при 3-х миллионном прогоне.... разница всего в 4 раза...... но зато никаких потерь при преобразованииДа, точно, ведь 32 бита - это integer а не long. Хотя, если честно, я бы все же переделал хеш-функцию под 64 битную версию. Все-же вероятность коллизии вроде меньше, да и под magic эксперта легко подстроить. Хотя, с другой стороны текущая реализация полностью совместима с MQL4 (ведь в нем нет типа long)
P.S. А не будет ли быстрее, если сконвертировать string в uchar array перед циклом, а уже в цикле последовательно переберать значения array? Все же я думаю вызывать каждый раз StringGetCharacter(buf, n) в цикле весьма накладно.
Да, точно, ведь 32 бита - это integer а не long. Хотя, если честно, я бы все же переделал хеш-функцию под 64 битную версию. Все-же вероятность коллизии вроде меньше, да и под magic эксперта легко подстроить. Хотя, с другой стороны текущая реализация полностью совместима с MQL4 (ведь в нем нет типа long)
P.S. А не будет ли быстрее, если сконвертировать string в uchar array перед циклом, а уже в цикле последовательно переберать значения array? Все же я думаю вызывать каждый раз StringGetCharacter(buf, n) в цикле весьма накладно.
Я так понимаю, что этот алгоритм может быть только 32-битным.
А по поводу конвертации перед циклом - это как? Вам массив тогда понадобится... динамическое распределение... Да и при конвертации происходит потеря информации
Я так понимаю, что этот алгоритм может быть только 32-битным.
3681 мс против 13822 мс при 3-х миллионном прогоне.... разница всего в 4 раза...... но зато никаких потерь при преобразовании
еще быстрее будет, если операцию dat % 256 заменить на dat & 0xFF, а s = (...)%65521; разложить на s = (...); if(s>=65521) s-=65521;
А по поводу конвертации перед циклом - это как? Вам массив тогда понадобится... динамическое распределение... Да и при конвертации происходит потеря информации
Так вот штатная конвертация перед циклом:
Правда, опять-таки, эта функция есть только в MQL5. А потеря информации как я понимаю происходит при Unicode-->ASCII, что вполне приемлемо.
Так вот штатная конвертация перед циклом:
Правда, опять-таки, эта функция есть только в MQL5. А потеря информации как я понимаю происходит при Unicode-->ASCII, что вполне приемлемо.
Ну да... только это для Вас в Вашей конкретной задаче приемлемо, а для алгоритма нет.
Приглядитесь лучше к 64-битному алгоритму MaHash8v64 (ulong), а лучше наверное одновременно к двум в связке (по крайней мере я у себя так сделаю)
А в MQL4 нет Юникод, нет и проблемы...
P.S. StringGetCharacter - это достаточно быстрая функция, она всего лишь возвращает WORD (ushort для MQL5) из нужной позиции, т.е. не работает со строкой вообще
Если у кого проект С++ windows приложения VS, желательно для 10-й версии. Нужно что бы проект использовал в работе dll. Буду использовать в качестве шаблона.
Желательно, что бы dll называлась MLP2HL.dll.
Заранее спасибо.
Если у кого проект С++ windows приложения VS, желательно для 10-й версии. Нужно что бы проект использовал в работе dll. Буду использовать в качестве шаблона.
Желательно, что бы dll называлась MLP2HL.dll.
Заранее спасибо.
Шаблон есть здесь: ...\MetaTrader 4\experts\samples\DLLSample
VS 2010 его автоматически преобразует. Имя можно поменять.Шаблон есть здесь: ...\MetaTrader 4\experts\samples\DLLSample
VS 2010 его автоматически преобразует. Имя можно поменять.Не, я про этот шаблончик dll знаю. :)
Мне нужен шаблон проекта exe, проект которого содержит в себе исходники dll, что бы можно было dll отлаживать. dll ведь не исполняемый и его должен кто то вызывать. Решил вот изучить Intel Parallel Studio 2011 для VS.