Альтернативные реализации стандартных функций/подходов - страница 2

 
Renat Fatkhullin:

К 2016 году большинство С++ компиляторов пришло к одинаковым уровням оптимизации.

MSVC заставляет удивляться улучшениям с каждым апдейтом, а Intel C++ как компилятор слился - так и не вылечился от своих "internal error" на больших проектах.

Еще из наших улучшений в 1400 билде в компиляторе то, что он стал быстрее компилировать сложные проекты.

Если бы не этот диалог, наверное, и не узнали бы. Побольше бы информации по той огромной работе, что делаете.
 
fxsaber:

По теме. Приходиться создавать альтернативы стандартным функциям, потому что они выдают иногда не то, что нужно. Вот пример альтернативы SymbolInfoTick

Казалось бы, в тестере вызывай на каждом событии NewTick SymbolInfoTick и складывай volume-поле, чтобы узнать биржевой оборот. Ан нет, нельзя! Приходиться делать куда более логичную по смыслу MySymbolInfoDouble.

Добро пожаловать в программирование, где вы сами творец!

Мы даем максимально полный инструмент, где вы можете сделать что хотите.

 
Renat Fatkhullin:

Можно оптимизировать все вокруг.

Это бесконечный процесс. Но в 99% случаев экономически невыгодный.

Тут речь не об оптимизации, а об приведении старой функции к новым реалиям. Понятно, что можно было Вам не писать NormalizeDouble совсем. И люди делали бы свой вариант. Но для экономии времени Вы создали. Сейчас этого оказалось не достаточно. И хорошо бы подрихтовать старый велосипед, чтобы удовлетворял тем же биржевым инструментам.
 
fxsaber:
Тут речь не об оптимизации, а об приведении старой функции к новым реалиям. Понятно, что можно было Вам не писать NormalizeDouble совсем. И люди делали бы свой вариант. Но для экономии времени Вы создали. Сейчас этого оказалось не достаточно. И хорошо бы подрихтовать старый велосипед, чтобы удовлетворял тем же биржевым инструментам.
Спасибо, будем проверять и смотреть на возможность изменения библиотеки.
 

Кстати, не так давно @iliyas предлагал массу системных функций на этапе компиляции вставлять в виде исходных кодов на MQL5, чтобы они участвовали в инлайнинге и максимальной оптимизации.

Я сразу не оценил идею, но вот сейчас вижу, что это будет великолепно. Это делает тот же самый MSVC.

 
Renat Fatkhullin:
Спасибо, будем проверять и смотреть на возможность изменения библиотеки.

Вы не поняли. Не библиотеки, а NormalizeDouble. Добавить перегрузку

double NormalizeDouble( double Value, double TickSize );

Чтобы можно было нормализовывать цены и лоты, когда TickSize = 25, VolumeStep = 0.5

Например, нормализация выглядела бы так

NormalizeDouble(Price, 0.00001) // Нормализация до пятого знака
NormalizeDouble(Price, 10.0) // Нормализация цены для RTS-9.16
NormalizeDouble(Price, 25.0) // Нормализация цены для MIX-9.16
 
Renat Fatkhullin:

Кстати, не так давно @iliyas предлагал массу системных функций на этапе компиляции вставлять в виде исходных кодов на MQL5, чтобы они участвовали в инлайнинге и максимальной оптимизации.

Я сразу не оценил идею, но вот сейчас вижу, что это будет великолепно. Это делает тот же самый MSVC.

Получается, что #import ex5 - это зло оптимизации.

Обратите, пожалуйста, внимание на возможности препроцессора

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как последовательно перебрать перечисление?

Alexey Navoykov, 2016.09.01 23:20

Ну вот это ключевой момент.  В MQL5 макросы мало того, что с фиксированным числом аргументов, так ещё и это число ограничено 8.  Так что удастся сделать enum всего для 3 значений.

А насчёт теоретического появления, наверно быстрей появится штатная функция для парсинга enum.  Разработчики уже обещали родить что-нибудь.


Как оказалось, можно очень хитрые и удобные в использовании конструкции создавать. 

 
fxsaber:

Вы не поняли. Не библиотеки, а NormalizeDouble. Добавить перегрузку

Чтобы можно было нормализовывать цены и лоты, когда TickSize = 25, VolumeStep = 0.5

Например, нормализация выглядела бы так

Так перегружать нельзя. Одинаковые сигнатуры функций.

Но мысль понятна - функция нормализации с учетом грануляции тика.

 
Renat Fatkhullin:

Так перегружать нельзя. Одинаковые сигнатуры функций.

Вроде, там нет проблем. В одном варинате второй параметр int (было), в другом - double (появится).

Но мысль понятна - функция нормализации с учетом грануляции тика.

Точно!
 

fxsaber

В Вашем коде ошибка

 

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