Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Октября 12, 2024, 08:36:56 am
Начало Помощь Поиск Войти Регистрация
Новости:

Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Сборка 336.22 « предыдущая тема следующая тема »
Страниц: 1 [2] Печать
Автор Тема: Сборка 336.22  (Прочитано 11765 раз)
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #15 : Апреля 08, 2014, 01:24:17 pm »

Такой дополнительный вопрос. Я нашёл проблему, связанную с тем, что сборщик мусора работает только для индикатора, непосредственно добавленного на график. То есть если индикатор использует IndRef для пользовательских индикаторов, активно использующих память, то сборщик мусора для этих внешних индикаторов не будет запускаться, а это поправлю. Посмотрите в своём коде, не тот ли это случай?

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

Таким образом если во время расчета индикатора во время каждой свечи происходит примерно одинаковое количество сделок и на каждую сделку выделяется примерно одинаковое количество объектов, память постепенно будет очищаться (примерная формула x_{n+1} = (x_n+D)/2, легко увидеть, что предел по затратам памяти всегда D).

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

Но в любом случае пока кажется, что проблема в вашем скрипте. Не исключено, конечно, что ошибка всё же у нас, а ваш скрипт на неё всё же нарывается, но пока я никак не могу ничего подобного воспроизвести. Если пришлёте ваш скрипт, то вероятно я что-то найду.
Записан
alexejshevchenko
Jr. Member
**
Сообщений: 68



Просмотр профиля WWW Email
« Ответ #16 : Апреля 08, 2014, 02:17:04 pm »

Я не использую IndRef. В скрипте просчитывается свой индикатор и выводится на график.
Мне кажется дело не в этом...
Сегодня на демо счёте тестировал новую стратегию на 4 бумагах. Функция getActiveOrderIDs() не работает, т.е. при активной отложенной заявке возвращает 0. Поэтому у меня на каждом тике проверяется наличие заявки:

var ids = getAllOrderIDs();
      var z_id;
   
      while(ids.size()>0){
         z_id=ids.shift();
         var z=getOrder(z_id);
         if(z["secid"]!=ins["secid"]){continue;}
         if(z["status"]==OS_WATCHING || z["status"]==OS_FORWARDING || z["status"]==OS_ACTIVE){
            return;
         }
}

Всё работает нормально, память уходит медленно, но я допустил ошибку и у меня выставилось по несколько сотен заявок сразу по 4 бумагам, т.е. в сумме около 1000 заявок. Я их сразу же удалил, исправил и память стала улетать десятками Мб в секунду.

Я уже вынес все переменные в глобальную область видимости, но всё равно. Такое ощущение, что переменная при каждом проходе цикла записывается в новую ячейку памяти.
Записан
ddd323
Sr. Member
****
Сообщений: 257


Просмотр профиля Email
« Ответ #17 : Апреля 08, 2014, 02:35:05 pm »

а может просто переменную z сделать глобальной типа static? будет всего одна постоянно перезаписываемая (вместо сотен или тысяч вновь созданных за одну свечу - до следующей уборки мусора).
кстати, а зачем на каждом тике запрашивать массив ВСЕХ заявок - может стоит запоминать id только нужных (требующих отслеживания) заявок и проверять периодически их статус. Даже если их 100 одновременно и статус их нужно знать на каждом тике - с точки зрения памяти это может быть более экономным.
« Последнее редактирование: Апреля 08, 2014, 02:40:54 pm от ddd323 » Записан
alexejshevchenko
Jr. Member
**
Сообщений: 68



Просмотр профиля WWW Email
« Ответ #18 : Апреля 08, 2014, 03:01:09 pm »

Я уже делал глобальные static переменные.
Конечно можно и так сделать. Но надо же ошибки ATF исправлять ))
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #19 : Апреля 16, 2014, 03:25:50 pm »

Попробуйте вот это обновление:

http://transaq.ru/cl_files/v508/508Trader.336.25.zip
Записан
Страниц: 1 [2] Печать 
Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Сборка 336.22 « предыдущая тема следующая тема »
Перейти в:  


Войти

Powered by MySQL Powered by PHP Powered by SMF 2.0.10 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!