Оптимизация кода
Показано с 1 по 8 из 8

Тема: Оптимизация кода

  1. #1
    Теоретик
    Регистрация
    03.04.2013
    Сообщений
    475
    Promo (¢)
    690
    Благодарности
    Получено: 148
    Отправлено: 79

    Оптимизация кода

    Кто и какие способы применяет, чтобы советник использовал как можно меньше ресурсов?

    Вы не можете благодарить!

  2. #2
    Banned
    Регистрация
    22.10.2012
    Адрес
    Питер
    Сообщений
    603
    Promo (¢)
    0
    Благодарности
    Получено: 254
    Отправлено: 48
    [QUOTE=KLoAF;532467]Кто и какие способы применяет, чтобы советник использовал как можно меньше ресурсов?[/QUOTE]
    А что, прямо так реально много кушает??? Просто я против оптимизации на этапе разработки, пока еще не заработал алгоритм и не пошла реальная прибыль. Код все-равно постоянно переделывается, так что это пустая трата времени. Я всегда оптимизируют только готовый продукт.
    Вот мой свежий пример оптимизации, он на Матлабе, но вполне универсальный. Делаю на Матлабе тестер тиковых стратегий с оптимизатором, столкнулся с тем, что при прогоне стратегии 90% времени уходит на расчет всяких фильтров, дивергенции и прочей математики. Причем, эти вычисления одинаковы для разных настроек. Сделал так, что при первом прогоне просчитанные данные пишутся в файл, а при последующих считываются оттуда. Теперь тест за месяц занимает 40 сек вместо 20 минут. Такая оптимизация имеет смысл.
    Ну и картинку кину, не удержусь )) _http://gyazo.com/54d014febe1f0ddf8b8c4aac2c918f2d

    Вы не можете благодарить!

  3. #3
    Теоретик
    Регистрация
    03.04.2013
    Сообщений
    475
    Promo (¢)
    690
    Благодарности
    Получено: 148
    Отправлено: 79
    Алексей Волчанский, да не то, чтобы слишком много, просто есть две задачи, которые хотелось бы решить: 1. установить на VPS побольше советников, 2. уменьшить время на оптимизацию параметров. Просто я программист-самоучка, думал может есть какие-то тонкости или наблюдения. К примеру, в функции ArrayResize 3 параметр каким лучше ставить?

    Вы не можете благодарить!

  4. #4
    Banned
    Регистрация
    22.10.2012
    Адрес
    Питер
    Сообщений
    603
    Promo (¢)
    0
    Благодарности
    Получено: 254
    Отправлено: 48
    Цитата Сообщение от KLoAF Посмотреть сообщение
    Алексей Волчанский, да не то, чтобы слишком много, просто есть две задачи, которые хотелось бы решить: 1. установить на VPS побольше советников, 2. уменьшить время на оптимизацию параметров. Просто я программист-самоучка, думал может есть какие-то тонкости или наблюдения. К примеру, в функции ArrayResize 3 параметр каким лучше ставить?
    Ясно, мой предыдущий совет касается именно прогона на тестере и оптимизации. Но это только в том случае, если параметры индикатора в этой оптимизации не участвуют. На бесплатный VPS от Робофорекса я ставил 7 терминалов с разными счетами, на каждом по советнику, вполне нормально все крутилось. Там памяти маловато дают, 512 Мб, это основное ограничение. Для уменьшения потребления памяти надо в свойствах терминала поставить по минимуму количество баров в окне и истории, это очень сильно уменьшает расход памяти.

    Насчет ArrayResize - надо самому смотреть. Смысл в том, что если поставить ноль, то при каждом увеличении массива терминал будет просить у винды новый блок памяти, равный этому увеличенному размеру, потом копировать туда старые значения, а это тормоза. Если сразу указать резерв, этого происходить не будет. Размер резерва надо оценить самому. Вообще, во многих библиотеках на С++/С# резерв сразу делается по умолчанию, можно не задавать вручную. Память нынче дешева ))

    Ну что еще... Стараться пореже делать new/delete, ведь при этом происходит выделение памяти из "кучи" и последующее ее освобождение. Как следствие, "куча" постепенно фрагментируется и выделять большие блоки памяти становиться все труднее. За дефрагментацию отвечает терминал, а насколько хорошо там это реализовано, неизвестно. Лучше делать глобальные объекты, которые постоянно сидят в памяти, чем постоянно их создавать-уничтожать при вызове функции.

    Я тоже самоучка))) Именно поэтому уже 4.5 года работаю, когда и где хочу, а не в офисе штаны протираю))

    Вы не можете благодарить!

  5. #5
    Banned
    Регистрация
    22.10.2012
    Адрес
    Питер
    Сообщений
    603
    Promo (¢)
    0
    Благодарности
    Получено: 254
    Отправлено: 48
    Совсем забыл про самый радикальный способ оптимизации! Это вынос ресурсоемких частей кода во внешнюю DLL на С++, скомпилированную компилятором от Intel. При использовании процессоров Intel дает потрясающий скачок в производительности, так как компилятор использует все самые последние расширения команд проца + автоматически распараллеливает код на уровне циклов и прочих примитивов. Как известно, код MQL4 советника выполняется в отдельном потоке и не распараллеливается ни автоматом, ни в ручную (в MQL5 можно ручками).

    А с компилятором Intel можно вручную использовать все известные технологии параллелизации или задать ему такую опцию для автоматического параллелизма. Тогда, при наличии, скажем, 4-х ядерного камня с гипертрейдингом можно получить очень значительное ускорение, зависит от алгоритма.

    Для использования нужна установленая Visual Studio (не Express!!) и сам пакет Intel Parallel Studio XE 2015, это последняя версия, недавно вышла. Копмилятор и все примочки встраиваются в студию, для использования надо в опциях проекта DLL проставить галочки в нужных местах, все просто ))

    Вы не можете благодарить!

  6. #6
    Теоретик
    Регистрация
    21.07.2013
    Адрес
    Одесса
    Сообщений
    876
    Promo (¢)
    0
    Благодарности
    Получено: 170
    Отправлено: 17
    Дело явно не только в процессоре Интел, у Амди есть свои технологии и от использования DLL по скорости не будет выгоды. Будет тратится время на загрузку самой библиотеки и на поиск её в таблице.

    Вы не можете благодарить!

  7. #7
    Banned
    Регистрация
    22.10.2012
    Адрес
    Питер
    Сообщений
    603
    Promo (¢)
    0
    Благодарности
    Получено: 254
    Отправлено: 48
    Цитата Сообщение от arfina2003 Посмотреть сообщение
    Дело явно не только в процессоре Интел, у Амди есть свои технологии и от использования DLL по скорости не будет выгоды. Будет тратится время на загрузку самой библиотеки и на поиск её в таблице.
    У Вас так и не получилось написать Длл http://forum.roboforex.ru/showthread...l=1#post536127 и Вы на эти непослушные Длл обиделись? )) Ответьте по пунктам плз, только конкретно.

    1.Какие такие технологии есть у АМД? Вы про ACML, что ли? Так это как трехколесный велосипед с мерсом сравнивать.
    2. Почему при использовании ДЛЛ не будет выгоды, если компилятор Интела в десятки раз быстрее компиляторов MQL4/5 и использует все наборы расширений инструкций проца типа SIMD, AVX и т.д.?
    3. Длл загружается один-единственный раз при первом запуске советника, чем эти десятки миллисекунд тормозят программу?
    4. Что еще за загадочные таблицы, в которых что-то ищется. Может с таблицами виртуальных функций попутали? При загрузке запоминается адрес Длл в памяти процесса, потом настраиваются адреса вызова ее функций в процессе по известным смещениям функций (берутся из таблицы импорта Длл, все делается один раз при загрузке). Так написано у Рихтера, а он знает, о чем пишет ))

    Кстати, есть еще свободная библиотека Yeppp!, автор уверяет, что на некоторых задачах обходит интеловские библиотеки, я еще не проверял, там в SDK есть примеры. _http://www.yeppp.info/
    Естественно, для выигрыша Длл должна выполнять что-то сложнее, чем два + два.

    Вы не можете благодарить!
    Последний раз редактировалось Алексей Волчанский; 11.10.2014 в 03:23.

  8. #8
    Теоретик
    Регистрация
    21.07.2013
    Адрес
    Одесса
    Сообщений
    876
    Promo (¢)
    0
    Благодарности
    Получено: 170
    Отправлено: 17
    Цитата Сообщение от KLoAF Посмотреть сообщение
    Алексей Волчанский, да не то, чтобы слишком много, просто есть две задачи, которые хотелось бы решить: 1. установить на VPS побольше советников, 2. уменьшить время на оптимизацию параметров. Просто я программист-самоучка, думал может есть какие-то тонкости или наблюдения. К примеру, в функции ArrayResize 3 параметр каким лучше ставить?
    У меня тоже была идея экономии и чтобы устанавливать в одном микроинстансе на сервисе эмейзон несколько терминалов. Но опять таки сколько торговой терминал метатрейдер будет использовать памяти зависит числа используемых финансовых инструментов. Никогда не знаешь по каким парам захочешь в будущем торговать. Вот если бы метатрейдер мог запускаться как консольное приложение без графической оболочки, тогда была бы экономия ресурсов существенная. А если учитывать, что микроистанс в эмейзоне стоит чуть больше одного цента в час, то нет смысла экономить и ставить на один сервер все терминалы.

    Вы не можете благодарить!

Похожие темы

  1. Все о VPS, управление, оптимизация.
    от g1f3 в разделе Софт для автоматизации торговли
    Ответов: 40
    Последнее сообщение: 03.10.2017, 16:11
  2. Тестирование кода кода
    от arfina2003 в разделе Программирование на MQL
    Ответов: 1
    Последнее сообщение: 18.04.2017, 01:10
  3. Тестирование и оптимизация советника Experiment
    от Starker в разделе Скомпилированные советники (ex4)
    Ответов: 38
    Последнее сообщение: 24.08.2015, 22:27
  4. Ответов: 13
    Последнее сообщение: 01.11.2014, 19:12
  5. Оптимизация алгоритма по индикаторам объема
    от ilezar в разделе Разговоры о трейдинге
    Ответов: 4
    Последнее сообщение: 03.02.2014, 21:34

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •