Перестают отображаться графики после многократного вызова CreateDataSource() - ds:Close()

Страницы: 1
RSS
Перестают отображаться графики после многократного вызова CreateDataSource() - ds:Close()
 
Тестовый скрипт создает 1-минутные DataSource-ы по нескольким десяткам бумаг. Ждет 1 секунду. Выводит количество свечек в каждом источнике данных, после чего закрывает его.
При первом вызове скрипта все источники открываются корректно, везде около 3000 свечек.
При повторных вызовах скрипта появляются "битые" источники, в которых 0 свечей. График по таким инструментам перестает отображаться (пустой черный экран).

Избавиться от такого "битого" графика можно только путем удаления соответствующего файла в папке archive при выключенном QUIK-е.
Простой перезапуск терминала не помогает, график все равно остается пустым.
Повреждение графика инструмента происходит случайным образом. Если перезапустить скрипт 10-20 раз, то битыми окажутся почти все графики.

В некоторых случаях (не всегда!) при закрытии терминала появляется ошибка приложения.

Пример отчета по ошибке из журнала Windows:
Код
Имя сбойного приложения: info.exe, версия: 6.16.1.15, отметка времени: 0x54a24cf3
Имя сбойного модуля: ntdll.dll, версия: 6.1.7601.18247, отметка времени 0x521ea8e7
Код исключения: 0xc0000374
Смещение ошибки: 0x000ce753
Идентификатор сбойного процесса: 0x4b0
Время запуска сбойного приложения: 0x01d15e4c7e48ab69
Путь сбойного приложения: C:\QUIK_VTB24_sao\info.exe
Путь сбойного модуля: C:\Windows\SysWOW64\ntdll.dll
Код отчета: dc491653-ca4e-11e5-aa20-50465d4d62f1

Код тестового скрипта:
Код
function main()
   message("_________________________________")

   sec_code={"AFKS","AFLT","ALRS","CHMF","GAZP","GMKN","FEES","HYDR","LKOH","MAGN","MGNT","MOEX","MTSS","NLMK","NVTK","ROSN","RTKM","SBER","SBERP","SNGS"}
   hm=#sec_code

   ds={}
   for h=1,hm do
      ds[h],error=CreateDataSource(class_code0,sec_code[h],INTERVAL_M1)

      if ds[h] then
         text=string.format("%-2d %-5s  created",h,sec_code[h])
      else
         text=string.format("%-2d %-5s  error: %s",h,sec_code[h],error)
      end
      message(text)
   end

   message("---------------------------------")
   sleep(1000)

   for h=1,hm do
      if ds[h] then
         text=string.format("%-2d %-5s  size: %d",h,sec_code[h],ds[h]:Size())

         if ds[h]:Close() then
            text=text.."  closed"
         else
            text=text.."  error"
         end
      else
         text=string.format("%-2d %-5s  empty",h,sec_code[h])
      end

      message(text)
   end

   message("=================================")
end

Пример результатов выполнения скрипта:
При втором прогоне источники по NVTK и ROSN оказываются битыми, хотя при первом прогоне все было нормально.
Код
Тип   Дата   Время   Сообщение
1.000000   1.000000   20160203.000000   113055.000000   Соединение установлено
2.000000   1.000000   20160203.000000   113101.000000   _________________________________
3.000000   1.000000   20160203.000000   113101.000000   1  AFKS   created
4.000000   1.000000   20160203.000000   113101.000000   2  AFLT   created
5.000000   1.000000   20160203.000000   113101.000000   3  ALRS   created
6.000000   1.000000   20160203.000000   113101.000000   4  CHMF   created
7.000000   1.000000   20160203.000000   113101.000000   5  GAZP   created
8.000000   1.000000   20160203.000000   113101.000000   6  GMKN   created
9.000000   1.000000   20160203.000000   113101.000000   7  FEES   created
10.000000   1.000000   20160203.000000   113101.000000   8  HYDR   created
11.000000   1.000000   20160203.000000   113101.000000   9  LKOH   created
12.000000   1.000000   20160203.000000   113101.000000   10 MAGN   created
13.000000   1.000000   20160203.000000   113101.000000   11 MGNT   created
14.000000   1.000000   20160203.000000   113101.000000   12 MOEX   created
15.000000   1.000000   20160203.000000   113101.000000   13 MTSS   created
16.000000   1.000000   20160203.000000   113101.000000   14 NLMK   created
17.000000   1.000000   20160203.000000   113101.000000   15 NVTK   created
18.000000   1.000000   20160203.000000   113101.000000   16 ROSN   created
19.000000   1.000000   20160203.000000   113101.000000   17 RTKM   created
20.000000   1.000000   20160203.000000   113101.000000   18 SBER   created
21.000000   1.000000   20160203.000000   113101.000000   19 SBERP  created
22.000000   1.000000   20160203.000000   113101.000000   20 SNGS   created
23.000000   1.000000   20160203.000000   113101.000000   ---------------------------------
24.000000   1.000000   20160203.000000   113102.000000   1  AFKS   size: 3072  closed
25.000000   1.000000   20160203.000000   113102.000000   2  AFLT   size: 3092  closed
26.000000   1.000000   20160203.000000   113102.000000   3  ALRS   size: 3093  closed
27.000000   1.000000   20160203.000000   113102.000000   4  CHMF   size: 3090  closed
28.000000   1.000000   20160203.000000   113102.000000   5  GAZP   size: 3092  closed
29.000000   1.000000   20160203.000000   113102.000000   6  GMKN   size: 3092  closed
30.000000   1.000000   20160203.000000   113102.000000   7  FEES   size: 3071  closed
31.000000   1.000000   20160203.000000   113102.000000   8  HYDR   size: 3087  closed
32.000000   1.000000   20160203.000000   113102.000000   9  LKOH   size: 3092  closed
33.000000   1.000000   20160203.000000   113102.000000   10 MAGN   size: 3084  closed
34.000000   1.000000   20160203.000000   113102.000000   11 MGNT   size: 3091  closed
35.000000   1.000000   20160203.000000   113102.000000   12 MOEX   size: 3090  closed
36.000000   1.000000   20160203.000000   113102.000000   13 MTSS   size: 3087  closed
37.000000   1.000000   20160203.000000   113102.000000   14 NLMK   size: 3092  closed
38.000000   1.000000   20160203.000000   113102.000000   15 NVTK   size: 3083  closed
39.000000   1.000000   20160203.000000   113102.000000   16 ROSN   size: 3093  closed
40.000000   1.000000   20160203.000000   113102.000000   17 RTKM   size: 3082  closed
41.000000   1.000000   20160203.000000   113102.000000   18 SBER   size: 3093  closed
42.000000   1.000000   20160203.000000   113102.000000   19 SBERP  size: 3090  closed
43.000000   1.000000   20160203.000000   113102.000000   20 SNGS   size: 3088  closed
44.000000   1.000000   20160203.000000   113102.000000   =================================
45.000000   1.000000   20160203.000000   113106.000000   _________________________________
46.000000   1.000000   20160203.000000   113106.000000   1  AFKS   created
47.000000   1.000000   20160203.000000   113106.000000   2  AFLT   created
48.000000   1.000000   20160203.000000   113106.000000   3  ALRS   created
49.000000   1.000000   20160203.000000   113106.000000   4  CHMF   created
50.000000   1.000000   20160203.000000   113106.000000   5  GAZP   created
51.000000   1.000000   20160203.000000   113106.000000   6  GMKN   created
52.000000   1.000000   20160203.000000   113106.000000   7  FEES   created
53.000000   1.000000   20160203.000000   113106.000000   8  HYDR   created
54.000000   1.000000   20160203.000000   113106.000000   9  LKOH   created
55.000000   1.000000   20160203.000000   113106.000000   10 MAGN   created
56.000000   1.000000   20160203.000000   113106.000000   11 MGNT   created
57.000000   1.000000   20160203.000000   113106.000000   12 MOEX   created
58.000000   1.000000   20160203.000000   113106.000000   13 MTSS   created
59.000000   1.000000   20160203.000000   113106.000000   14 NLMK   created
60.000000   1.000000   20160203.000000   113106.000000   15 NVTK   created
61.000000   1.000000   20160203.000000   113106.000000   16 ROSN   created
62.000000   1.000000   20160203.000000   113106.000000   17 RTKM   created
63.000000   1.000000   20160203.000000   113106.000000   18 SBER   created
64.000000   1.000000   20160203.000000   113106.000000   19 SBERP  created
65.000000   1.000000   20160203.000000   113106.000000   20 SNGS   created
66.000000   1.000000   20160203.000000   113106.000000   ---------------------------------
67.000000   1.000000   20160203.000000   113107.000000   1  AFKS   size: 3072  closed
68.000000   1.000000   20160203.000000   113107.000000   2  AFLT   size: 3092  closed
69.000000   1.000000   20160203.000000   113107.000000   3  ALRS   size: 3093  closed
70.000000   1.000000   20160203.000000   113107.000000   4  CHMF   size: 3090  closed
71.000000   1.000000   20160203.000000   113107.000000   5  GAZP   size: 3093  closed
72.000000   1.000000   20160203.000000   113107.000000   6  GMKN   size: 3093  closed
73.000000   1.000000   20160203.000000   113107.000000   7  FEES   size: 3071  closed
74.000000   1.000000   20160203.000000   113107.000000   8  HYDR   size: 3087  closed
75.000000   1.000000   20160203.000000   113107.000000   9  LKOH   size: 3092  closed
76.000000   1.000000   20160203.000000   113107.000000   10 MAGN   size: 3084  closed
77.000000   1.000000   20160203.000000   113107.000000   11 MGNT   size: 3091  closed
78.000000   1.000000   20160203.000000   113107.000000   12 MOEX   size: 3090  closed
79.000000   1.000000   20160203.000000   113107.000000   13 MTSS   size: 3088  closed
80.000000   1.000000   20160203.000000   113107.000000   14 NLMK   size: 3092  closed
81.000000   1.000000   20160203.000000   113107.000000   15 NVTK   size: 0  closed
82.000000   1.000000   20160203.000000   113107.000000   16 ROSN   size: 0  closed
83.000000   1.000000   20160203.000000   113107.000000   17 RTKM   size: 3082  closed
84.000000   1.000000   20160203.000000   113107.000000   18 SBER   size: 3093  closed
85.000000   1.000000   20160203.000000   113107.000000   19 SBERP  size: 3091  closed
86.000000   1.000000   20160203.000000   113107.000000   20 SNGS   size: 3088  closed
87.000000   1.000000   20160203.000000   113107.000000   =================================


Windows 7 SP1 64-bit, 16Gb памяти.
QUIK 6.16.1.15, брокер ВТБ24, сервер 81.177.147.66.
 
Пропустил одну строчку в коде.

Правильная версия скрипта:
Код
function main()
   message("_________________________________")

   class_code0="TQBR"
   sec_code={"AFKS","AFLT","ALRS","CHMF","GAZP","GMKN","FEES","HYDR","LKOH","MAGN","MGNT","MOEX","MTSS","NLMK","NVTK","ROSN","RTKM","SBER","SBERP","SNGS"}
   hm=#sec_code

   ds={}
   for h=1,hm do
      ds[h],error=CreateDataSource(class_code0,sec_code[h],INTERVAL_M1)

      if ds[h] then
         text=string.format("%-2d %-5s  created",h,sec_code[h])
      else
         text=string.format("%-2d %-5s  error: %s",h,sec_code[h],error)
      end
      message(text)
   end

   message("---------------------------------")
   sleep(1000)

   for h=1,hm do
      if ds[h] then
         text=string.format("%-2d %-5s  size: %d",h,sec_code[h],ds[h]:Size())

         if ds[h]:Close() then
            text=text.."  closed"
         else
            text=text.."  error"
         end
      else
         text=string.format("%-2d %-5s  empty",h,sec_code[h])
      end

      message(text)
   end

   message("=================================")
end
 
Здравствуйте,
Версия 6.16 уже сильно устарела, рекомендуем выполнить обновление до актуальной версии, на текущий момент это 7.0
 
В версии 7.0.4.10 проблемы не наблюдаю.
В одном из последних релизов 6-й версии (6.17.3.6) проблема была.

Скажите, исчезновение проблемы в 7-й версии это осознанное изменение в коде (т.е. уже были замечания со схожими симптомами)? или фикс получился случайно и непонятно как?

Честно говоря пока боязно переводить боевые торговые терминалы на свежую 7-ю версию. Мало ли где вылезут непредвиденные баги...
 
Здравствуйте,
Да в каком-то из промежуточных обновлений правилась похожая проблема.
Касаемо багов. Если Вы встречаете проблему в древней версии то с вероятностью 99% эта проблема уже устранена в актуальной версии.
Если же нет, то чиниться она в любом случае будет в более новой версии, а не в старой.
Старые версии чиниться не будут ни при каких обстоятельствах
Поэтому Вам в любом случае придется обновиться.
 
Спасибо за ответы!
 
чтобы не было указанной проблемы надо сделать примерно так:

Скрытый текст
 
 
пардон, опечатка
надо сделать так:
Скрытый текст
 
а закрытие источников перенести в закрытие скрипта
 
1) У Вас в коде какая-то белеберда
if ds~=true then ...
if ds[h]~=true then ....
Зачем? ds и ds[h] только что созданы.

Мой код - тестовый, кроме него в скрипте ничего нет. Сделан чтобы продемонстрировать проявление ошибки.

2) В общем случае, закрытие источников вовсе не обязано производиться в конце скрипта.
Например один из моих скриптов ежедневно в полночь сохраняет таблицу изменений параметров по группе инструментов. Делается это через вызов CreateDataSource(). Если сразу после обработки не закрывать источники, то получим переполнение памяти.

3) Представитель разработчиков подтвердил что проблема типа "график с пустым черным окном" уже встречалась и в актуальной версии терминала уже решена.
В 7-й версии проблема мною не замечена. Т.е. тему можно закрывать.
Страницы: 1
Читают тему
Наверх