Замедление работы при тестировании - страница 2

 
Ihor Herasko:
Есть еще один момент. Тоже связан с количеством ордеров, но отработавших. При старте у вас нет истории и обращение к ней происходит очень быстро. Впоследствии же история накапливается и, если у вас есть цикл, проверяющий историю закрытых ордеров, то именно он может стать причиной замедления. Я эту проблему решал, вводя переменную, которая запоминает количество проверенных в истории ордеров и при следующем обращении к истории начинал только с нового номера. Но этот финт можно использовать только при тестировании. В онлайне все же лучше проверять всю историю.

Я замедление тоже всегда связывал с этой историей, и особо не заморачивался никогда. Но тут потребовалось значительно ускорить тестирование, т.к. в историю попадало большое количество ордеров. Сначала я ограничил проверку истории в цикле, сделав выход после нахождения нужного ордера. Это заметно ускорило процесс тестирования, но всё равно постепенное замедление к концу теста присутствовало. Первые полгода идут ещё более менее, но потом постепенно всё переходит на черепаший шаг.

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

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

Может кто то уже решал такую проблему в своих программах.

 
Andrey Kaunov:

Я замедление тоже всегда связывал с этой историей, и особо не заморачивался никогда. Но тут потребовалось значительно ускорить тестирование, т.к. в историю попадало большое количество ордеров. Сначала я ограничил проверку истории в цикле, сделав выход после нахождения нужного ордера. Это заметно ускорило процесс тестирования, но всё равно постепенное замедление к концу теста присутствовало. Первые полгода идут ещё более менее, но потом постепенно всё переходит на черепаший шаг.

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

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

Может кто то уже решал такую проблему в своих программах.

Графические элементы при открытии/закрытии позиций отображаются на графике?

Если да, то по мере их появления удаляйте CTRL+B, это ускорит тест.

 
Ну так я без визуализации тестирую.
 
Andrey Kaunov:
Ну так я без визуализации тестирую.

Тем не менее: выводит ли эксперт какие-либо графические объекты? Дело в том, что я также недавно столкнулся с такой неприятностью. Оказалось, что вывод графических объектов в режиме быстрого тестирования существенно замедляет тестирование. Поэтому пришлось сделать такую надстройку:

bool g_bIsShowGUI;

void OnInit()
{
...

   g_bIsShowGUI = !IsTesting() || IsVisualMode();

...
}

void OnTick()
{
...

   if (g_bIsShowGUI)
      ShowGUI();
...
}

 

Ммм, есть там четыре линии. Думаете, они могут замедлить. И почему тогда к концу замедляется?

Возможно такое, что значки открытия/закрытия сделок тоже как то оказывают влияние на скорость в таком случае?

 
Ihor Herasko:

Тем не менее: выводит ли эксперт какие-либо графические объекты? Дело в том, что я также недавно столкнулся с такой неприятностью. Оказалось, что вывод графических объектов в режиме быстрого тестирования существенно замедляет тестирование. Поэтому пришлось сделать такую надстройку:

У меня раза в 3 или 5 медленнее с граф. объектами, месяц от 10 минут до получаса. Без визуализации ускоряет, но не в разы точно. Только когда вообще ничего не создаешь, тогда скорость приемлема, лет пять за ночь можно посмотреть. вин7, i3, 8гб, медленный винт. 

 
Andrey Kaunov:

Ммм, есть там четыре линии. Думаете, они могут замедлить. И почему тогда к концу замедляется?

Возможно такое, что значки открытия/закрытия сделок тоже как то оказывают влияние на скорость в таком случае?

Тестер, когда долго работает, почему то забирает на себя память, заметил. Этим многие программы грешат.

 
Andrey Kaunov:

Ммм, есть там четыре линии. Думаете, они могут замедлить. И почему тогда к концу замедляется?

Возможно такое, что значки открытия/закрытия сделок тоже как то оказывают влияние на скорость в таком случае?

Дело не в количестве объектов. Достаточно будет и одного. Тормозит само обращение к графическим объектам, которое невозможно выполнить в среде с отсутствием устройства для отображения.

Попробуйте отключить все обращения к GUI при быстром тестировании. Если не поможет, то копайте в направлении обращения к истории счета и списку рабочих ордеров. Сначала отключите блок работы с ордерами и сравните скорость. Если и там не обнаружится проблем, то это уже специфика алгоритма советника. Тогда эту проблему решать только Вам самому.

 
Всю графику отключил, в том числе поставил clrNONE на значки открытия/закрытия ордеров. В рынке всегда один ордер, тут навряд ли тормоза будут сильные. Блок работы с историей отключил ещё вчера, об этом писал выше. Пробую таким образом прогнать.
 
Andrey Kaunov:
Всю графику отключил, в том числе поставил clrNONE на значки открытия/закрытия ордеров. В рынке всегда один ордер, тут навряд ли тормоза будут сильные. Блок работы с историей отключил ещё вчера, об этом писал выше. Пробую таким образом прогнать.

Баг встречал и понял причину. Она столь смехотворна, что озвучивать опасно - скептики засмеют. Проявление такое: в режиме ВСЕ ТИКИ по мере течения модельного времени растет загрузка дисковой системы. Одно из выражений - лампочка индикации обращений с винчестеру.

Как бороться? Конечно же уменьшением временного интервала тестирования. Характер рынка быстро меняется. Поэтому тестировать стоит максимум за последний 2020 год. Да и то где-то с апреля или мая. Если уж хочется тестировать за прошлые годы, то каждый год по отдельности. Но помните: наша задача = профит, в противовес игре в тестер. Или Вы иначе считаете?