Новая версия платформы MetaTrader 5 build 2265: Функции DirectX для 3D-визуализации в MQL5 и настройка инструментов в тестере стратегий - страница 21

 

Долго не мог понять, почему вносимые изменения в код не сказыаются на исполнении. Оказалось вот это.

Редактор не сохраняет исходник и отказывается даже предлагать это. Что это? Перезагрузка не помогает.

Выяснил, что по какой-то причине после правки кода флаг изменения не взводился. Все посносил, работает теперь.

 
fxsaber:

Долго не мог понять, почему вносимые изменения в код не сказыаются на исполнении. Оказалось вот это.

Редактор не сохраняет исходник и отказывается даже предлагать это. Что это?

По заголовку окна видно что файл сохранён. Нет звёздочки * в названии файла.
Нажми к примеру пробел в коде, в названии файла появится звёздочка, перейди на вкладку Файл, и поле Сохранить будет доступно.

Поле из вкладки файл, дублирует кнопку на панели редактора, 
на панели проще отслеживать состояние сохранения, активна или нет.
Но я привык к звёздочке.

  btn

 
Igor Makanu:

запустил профилировщик на таком коде, вызовов/время 1170 / 456 (94.21%)

потом профилировщик на таком коде, вызовов/время 1170 / 464 (89.92%)

//+------------------------------------------------------------------+
double COrder::calcNormVol(const double value) const
{
   const string sym = _Symbol;
   return(NormalizeDouble(fmax(fmin(SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP) * round(value / SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP)),
                                    SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX)),  SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN)), O_DigitsInVolumeStep));
}
//+------------------------------------------------------------------+

по моему разницы особой то и нет

вот по вызовам функций раскидал

А какую разницу вы хотите увидеть? _Symbol - это переменная. Вы просто своей переменной присваиваете значение предопределённой переменной.

Сравните этот ваш код с таким

//+------------------------------------------------------------------+
double COrder::calcNormVol(const double value) const
{
//   const string sym = _Symbol;
   return(
   NormalizeDouble(fmax(fmin(SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_STEP) * round(value / SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_STEP)),
                             SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MAX)),  SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN)), O_DigitsInVolumeStep)
   );
}
 
Roman:

Но я привык к звёздочке.

Аналогично. Привык, что по F7 все изменения сохраняются. Но этого не происходило. Какой-то редкий баг.

Подробнее. Файл на диске без изменений (текст смотрел), этот же файл в редакторе с изменениями (текст отличается от того, что на диске). Но при этом звездочки нет.
 
Alexey Viktorov:

А какую разницу вы хотите увидеть? _Symbol - это переменная. Вы просто своей переменной присваиваете значение предопределённой переменной.

Сравните этот ваш код с таким

протестировал, вот результаты https://www.mql5.com/ru/forum/222141/page20#comment_14199480

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

код от @fxsaber самый быстрый, он правильно указал на глобальную область видимости констант

 
Igor Makanu:

протестировал, вот результаты https://www.mql5.com/ru/forum/222141/page20#comment_14199480

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

код от @fxsaber самый быстрый, он правильно указал на глобальную область видимости констант

Нет, Игорь, я не о сравнении производительности говорил, а исключительно о том, что какую переменную использовать нет никакой разницы. И сравнение скорости выполнения тех ваших кодов могут отличаться исключительно на размер погрешности.

 
Alexey Viktorov:

Нет, Игорь, я не о сравнении производительности говорил, а исключительно о том, что какую переменную использовать нет никакой разницы. И сравнение скорости выполнения тех ваших кодов могут отличаться исключительно на размер погрешности.

подправил тесты https://www.mql5.com/ru/forum/222141/page20#comment_14199480

почему то была уверенность, что компилятор MQL оптимизирует код где были расставлены модификаторы const, но поведение как у обычного С++ компилятора, модификаторы const проверяются только на этапе компиляции, в исполняемый код они уже не попадают

 
Igor Makanu:

протестировал, вот результаты https://www.mql5.com/ru/forum/222141/page20#comment_14199480

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

код от @fxsaber самый быстрый, он правильно указал на глобальную область видимости констант

Только отмахивался как от назойливой мухи, а теперь единственный правильный от сабера. Смешно:

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

Новая версия платформы MetaTrader 5 build 2265: Функции DirectX для 3D-визуализации в MQL5 и настройка инструментов в тестере стратегий

Artyom Trishkin, 2019.12.11 11:49

Что мешает все SymbolInfoDouble() получить в OnInit() в переменные, и использовать только переменные?

В таком же исполнении каждый раз идёт обращение за данными на сервер. А зачем? Можно же один раз их записать в переменные, и пользоваться этими данными - они же статичны.

Триста раз повторил одно и то же, но только рукой махал в ответ.
 
Artyom Trishkin:

Только отмахивался как от назойливой мухи, а теперь единственный правильный от сабера. Смешно:

Триста раз повторил одно и то же, но только рукой махал в ответ.

нет, разговор зашел про то что оверхед возможен, и мне нужно было опять разобраться как работают модификаторы, то что можно для тестера вынести вызовы функций в глобальную область было сразу ясно 

 
fxsaber:

Аналогично. Привык, что по F7 все изменения сохраняются. Но этого не происходило. Какой-то редкий баг.

Подробнее. Файл на диске без изменений (текст смотрел), этот же файл в редакторе с изменениями (текст отличается от того, что на диске). Но при этом звездочки нет.

Это недавно появилось. Рассинхронизация состояния сохраненности файла с реальностью.

Т.е. звездочка на файле, который сохранен, и наоборот — ее отсутствие на измененном файле.

Видимо, это все связано.