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

 
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:

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

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

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

 
Sergey Dzyublik:

Дефект в работе отладчика ME(build 2370) - после срабатывания breakpoint вместо продолжения выполнения кода при нажатии (F5), в действительности повторно срабатывает тот же breakpoint без выполнения какого-либо кода.

Шаги по воспроизведению:
1) Вручную установить 
breakpoint для обоих строк " arr.Add()";
2) Запустить отладку (F5);
3) С помощью ПКМ открыть вложенный файл <Generic\ArrayList.mqh> в новой вкладке.
4) Найти строку "if(m_size==ArraySize(m_items))" в функции "bool CArrayList::Add(T item)" и установить вручную breakpoint.
5) Находясь во вкладке "
ArrayList.mqh" продолжить выполнение кода (F5).

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

 

Спасибо за сообщение.

Исправлено

 
fxsaber:

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

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

Ничего принципиально не меняя, проще сделать (что по факту так и есть), чтобы запись:

SymbolInfoTick( NULL, tick ); //1

означала бы

SymbolInfoTick( Symbol(), tick ); //2

по крайней мере вопрос о копировании строк отпадает

 
A100:

Ничего принципиально не меняя, проще сделать (что по факту так и есть), чтобы запись:

означала бы

по крайней мере вопрос о копировании строк отпадает

он другое в итоге просит, нужен максимально быстрый доступ к структуре MqlTick на каждом тике

тут как бы парадокс, что есть доступ к _Symbol .... но нет такого доступа к 

const MqlTick _Tick; // Текущий _Symbol-тик.

хотя язык MQL позиционируется как язык разработки торговый стратегий.... я не знаю какие бывают ТС если не знать на текущем тике текущие цены

 
Igor Makanu:

он другое в итоге просит, нужен максимально быстрый доступ к структуре MqlTick на каждом тике

А чем вариант

SymbolInfoTick( NULL, tick ); //1

не устраивает? Покажите где здесь узкое место? Если и это медленно, то у Разработчиков есть возможность заинлайнить\оптимизировать такой вызов - без принципиальных изменений

 
A100:

А чем вариант

не устраивает? Если и это медленно, то у Разработчиков есть возможность заинлайнить\оптимизировать такой вызов

да это медленно, по крайней мере в тестере, я так в тестере пишу https://www.mql5.com/ru/forum/1111/page2749#comment_16487642

при большом количестве проходов оптимизатора появляется выигрыш


не знаю как обьяснить, не умею элементарные вещи обьяснять.. 

ну как пишутся ЕА? - собираешь себе библиотеку, в процедурном или ООП стиле, каждая функция полностью переносима в другой проект, и чтобы это обеспечить пишешь везде  Bid, Ask  - мой пример. Потом собираешь из заготовок торговую стратегию. То что сейчас предлагают разработчики - пишешь везде SymbolInfoDouble()

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