Вы считаете, что если даже параметром Symbol передать _Symbol, то в функцию SymbolInfoTick() будет передана строка?
Не думаю, что нет проверок внутри стандартных функций на равенство строки текущему символу, и при таких явных параметрах начинаются проверки "по полной программе" при наличии под рукой кэша для текущего символа.
Ускорение происходит на этапе компиляции, а не во время выполнения.
Компилятор делает такую замену:
Во всех остальных случаях замена не делается.
Ну. О чём я и говорил - ваш код НЕ ускорит штатную функцию для НЕ текущего символа. Равно, как и НЕ ускорит для текущего.
И мой не ускорит. И не ускорял никогда. Я и не питал иллюзий на этот счёт. Но всегда подставляю Symbol() или NULL при обращении к штатным функциям, если в мою функцию передан NULL или "". Это вызывает быстрый код штатной функции - где берутся данные из кэша для текущего символа. Если при вызове моей функции используется Symbol() или _Symbol - разве НЕ проверяется внутри штатной функции его совпадение с текущим символом? Неужели будет исполняться код с проверками текущего символа по полной программе? Вот не верится как-то...
Возможно, Вам кто-то более доходчиво объяснит. У меня не получилось.
Что вы колдовством ускоряете штатные функции?
Вы используете подстановку значения текущего символа при передаче его в штатную функцию для того, чтобы она использовала данные для текущего символа из кэша. Это НЕ ускоряет штатную функцию, а использует её скорость для текущего символа.
Вы НЕ можете ускорить то, к исходнику чего вы не имеете доступа. Вы используете стандартный приём для правильного вызова функции. Но я не уверен, что если Symbol будет указан строкой как "EURUSD" при работе на EURUSD, т.е., это использование текущего символа, то штатная функция не проверит равенство строки "EURUSD" значению Symbol() и не будет использовать данные из кэша, а начнёт проверять символ по полной программе.
Так всё-таки, где ускорение штатной функции? Если оно есть, то это более чем интересно и полезно.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Одного достаточно.
Дополнительно проверяю на "". Сам же всегда при вызове методов для текущего символа использую NULL.
Ваш код не даст ускорение.
Мне сложно объяснять очевидные вещи. В этом коде возможно ускорить GetMarketWatchTick.
Вы считаете, что если даже параметром Symbol передать _Symbol, то в функцию SymbolInfoTick() будет передана строка?
Не думаю, что нет проверок внутри стандартных функций на равенство строки текущему символу, и при таких явных параметрах начинаются проверки "по полной программе" при наличии под рукой кэша для текущего символа.
Ускорение происходит на этапе компиляции, а не во время выполнения.
Компилятор делает такую замену:
Во всех остальных случаях замена не делается.
Ускорение происходит на этапе компиляции, а не во время выполнения.
Компилятор делает такую замену:
Во всех остальных случаях замена не делается.
Ну. О чём я и говорил - ваш код НЕ ускорит штатную функцию для НЕ текущего символа. Равно, как и НЕ ускорит для текущего.
И мой не ускорит. И не ускорял никогда. Я и не питал иллюзий на этот счёт. Но всегда подставляю Symbol() или NULL при обращении к штатным функциям, если в мою функцию передан NULL или "". Это вызывает быстрый код штатной функции - где берутся данные из кэша для текущего символа.
Если при вызове моей функции используется Symbol() или _Symbol - разве НЕ проверяется внутри штатной функции его совпадение с текущим символом? Неужели будет исполняться код с проверками текущего символа по полной программе? Вот не верится как-то...
Ну. О чём я и говорил - ваш код НЕ ускорит штатную функцию для НЕ текущего символа. Равно, как и НЕ ускорит для текущего.
Возможно, Вам кто-то более доходчиво объяснит. У меня не получилось.
Возможно, Вам кто-то более доходчиво объяснит. У меня не получилось.
Что вы колдовством ускоряете штатные функции?
Вы используете подстановку значения текущего символа при передаче его в штатную функцию для того, чтобы она использовала данные для текущего символа из кэша. Это НЕ ускоряет штатную функцию, а использует её скорость для текущего символа.
Вы НЕ можете ускорить то, к исходнику чего вы не имеете доступа. Вы используете стандартный приём для правильного вызова функции. Но я не уверен, что если Symbol будет указан строкой как "EURUSD" при работе на EURUSD, т.е., это использование текущего символа, то штатная функция не проверит равенство строки "EURUSD" значению Symbol() и не будет использовать данные из кэша, а начнёт проверять символ по полной программе.
Так всё-таки, где ускорение штатной функции? Если оно есть, то это более чем интересно и полезно.
В MT4 аналогично? И в MT5-Тестере как с этим?
С CopyTicks аналогично?
Возможно, Вам кто-то более доходчиво объяснит. У меня не получилось.
Скорее всего, у вас не получилось понять мой вопрос. Я его повторял несколько раз (и этот вопрос был НЕ про "ускорение штатной функции").
если указан обычный строковый параметр вместо Symbol(), _Symbol или NULL, то производятся проверки по полной программе и ещё запрос свойств
В этом объяснении по какой-то причине не написано, что если строковый параметр равен текущему символу, то проверки по полной не делаются.