Ошибки, баги, вопросы - страница 2749

 
Alexey Navoykov:

то здесь происходит лишь один вызов функции на 100 итераций.  А в первом макросе - вызов на каждой итерации.  Так что ерунда какая-то.

его пример это конкретное использование данных о бид/аск в разных частях MQL-программы, чем чаще обращаешься к SymbolInfoTick() тем меньше производительность тестирования

я по профилировщику у себя нашел спорные участки по производительности TimeCurrent() , по разному пробовал, потом вообще отказался от нее,

редко использую глобальную видимость переменных, но чтобы в тестере все "летало", пишу так:

MqlTick Tick = {0};
#define Ask Tick.ask
#define Bid Tick.bid
#define TimeCurrent_ Tick.time
//+------------------------------------------------------------------+
void OnTick()
{
   SymbolInfoTick(_Symbol,Tick);
  ....
}
 
Alexey Navoykov:
В смысле?  Вы уверяли, что ваша конструкция быстрее работает, а она не работает быстрее.  Просто она в 100 раз реже вызывается в том коде.

Это не моя конструкция, и как я понял из того примера, то макросы вызывались поочерёдно для теста.
А отчет проходов показан вместе, хоть и обрезано но видно время выполнения.

 
Sergey Dzyublik:

Тест, если не придираться к точности, а она тут и не нужна - плюс-минус нормальный.
Сравнивается: вызов 100 раз SymbolInfoTick  VS вызов 1 раз SymbolInfoTick с возвратом 99 раз "ручного" кеша.

Да про кэш то я понял. Просто этот Роман тут чё-то втирал про аллокацию памяти...  Похоже вы были правы насчёт тролля )

 
Alexey Navoykov:

Да про кэш то я понял. Просто этот Роман тут чё-то втирал про аллокацию памяти...  Похоже вы были правы насчёт тролля )

А кэш по вашему где выделяется? Двоечники.

 
Sergey Dzyublik:

Тест, если не придираться к точности, а она тут и не нужна - плюс-минус нормальный.
Сравнивается: вызов 100 раз SymbolInfoTick  VS вызов 1 раз SymbolInfoTick с возвратом 99 раз "ручного" кеша.
Показывается как для текущего символа невыгодно использовать стандартную функцию SymbolInfoTick, когда на одном проходе функция будет вызывается более одного раза.
Как возможный вариант решения проблемы, разработчикам предлагается ввести предопределенную переменную:

Вы поняли меня на 100%.

Просто fxsaber так все разбросал по постам при этом ни чего не объяснив, что черт ногу сломит.

Каюсь, плохо формулирую.

 
fxsaber:

Каюсь, плохо формулирую.

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

если бы тест именно с кэшем функции был сразу, было бы намного понятнее

 
Sergey Dzyublik:

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

А почему два последовательных с интервалом вызова должны дать одинаковый результат?

void f()
{
   MqlTick tick1, tick2; 
   SymbolInfoTick(Symbol(),tick1); //1
   /*вычисления*/
   SymbolInfoTick(Symbol(),tick2); //2
}
const MqlTick _Tick;
void f()
{
   MqlTick tick1, tick2; 
   tick1 = _Tick; //1
   /*вычисления*/
   tick2 = _Tick; //2
}
 
A100:

А почему два последовательных с интервалом вызова должны дать одинаковый результат?

не должны. но для теста на родном символе норм.
 
A100:

А почему два последовательных с интервалом вызова должны дать одинаковый результат?

Потому что речь только о Тестере без использования Sleep - 99% советников.

По произвольным задержкам Тестера не возьмусь утверждать, т.к. никогда не видел этот режим полезным.

 
fxsaber:

По произвольным задержкам Тестера не возьмусь утверждать, т.к. никогда не видел этот режим полезным.

использовал только чтобы отладить функции работы с ордерами

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