sao (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Некорректное отображение номинала у облигаций с амортизацией долга
 
В день частичного погашения облигации неправильно отображается ее номинальная стоимость.

Например:

ОФЗ 48001 облигации федерального займа с амортизацией долга и переменным купоном.
График платежей http://bonds.finam.ru/issue/details0083900002/default.asp
01.11.2017 происходит погашение 20% номинала и выплата купона.

Данные из текущей таблицы Квика по датам.

30.10.2017
Номинал 400.00
НКД 25.46
Купон 25.53
Оборот 79574 руб. / 196 шт. -> средняя цена 405.99 руб.

31.10.2017
Номинал 400.00
НКД 0.00
Купон 25.53
Оборот 63699 руб. / 321 шт. -> средняя цена 198.44 руб.

01.11.2017
Номинал 200.00
НКД 00.02
Купон 7.58
Оборот 286718 руб. / 1451 шт. -> средняя цена 197.60 руб.

Т.к. торги происходят в режиме Т+1, то уже 31 октября сделки происходят исходя из нового номинала 200 руб. и нового купона 7.58 руб.
Но в Квике отображаются устаревшие номинал и купон, ориентируясь на которые клиент купит неправильное количество бумаг.
В моем случае торгует qlua-робот, который вовсе не заметит аномалию при совершении сделок и будет торговать неверным количеством лотов.


Как быть?
OnTransReply, Поле balance при снятии заявки
 
Сервер №2 БКС (91.207.78.204:15200):
Код
2017-08-02 12:31:29.000   KillOrder 27332382162 
2017-08-02 12:31:29.036   OnTransReply
         price               0
         client_code         SPBFUT00l7n
         balance             0
         time                123131
         status              3
         trans_id            1501666286
         exchange_code       
         date_time           table
         uid                 118744
         flags               262145
         result_msg          Заявка 27332382162 снята. Неисполненный остаток: 1.
         brokerref           
         firm_id             NC0058900000
         quantity            0
         order_num           27332382162
         server_trans_id     1328
         account             
Сервер №2 balance=0.
На серверах №1, №3, №4 - аналогично, balance=0.
На VIP-сервере balance=остаток.
(на обычных серверах тестировал с другого uid, но думаю это не критично)
OnTransReply, Поле balance при снятии заявки
 
Здравствуйте.

Отправляю транзакцию на снятие лимитированной заявки. При получении коллбека OnTransReply(t) записываю все поля  таблицы t в лог.
Проблема: при подключении к разным серверам брокера поле balance заполняется по-разному.

Лог-файл при подключении к VIP-серверу БКС (91.209.122.122:15100):
Код
2017-08-01 19:51:41.000   KillOrder 27324422354 
2017-08-01 19:51:41.019   OnTransReply
   price               0
   client_code         SPBFUT00l7n
   balance             1
   time                195138
   status              3
   trans_id            1501606298
   exchange_code       
   date_time           table
   uid                 102133
   flags               262145
   result_msg          Заявка 27324422354 снята. Неисполненный остаток: 1.
   brokerref           
   firm_id             NC0058900000
   quantity            0
   order_num           27324422354
   server_trans_id     1306
   account             
Лог-файл при подключении к основному серверу №2 БКС (91.207.78.204:15200):
Код
2017-08-01 19:52:13.000   KillOrder 27324425902 
2017-08-01 19:52:13.044   OnTransReply
   price               0
   client_code         SPBFUT00xxx
   balance             0
   time                195210
   status              3
   trans_id            1501606330
   exchange_code       
   date_time           table
   uid                 xxxxxx
   flags               262145
   result_msg          Заявка 27324425902 снята. Неисполненный остаток: 1.
   brokerref           
   firm_id             NC0058900000
   quantity            0
   order_num           27324425902
   server_trans_id     1328
   account      
В первом случае приходит balance=1 (равно неисполненному остатку). Во втором случае приходит balance=0.
Один и тот же счет. Один и тот же терминал. Один и тот же тестовый скрипт.

Всегда приходило balance=остаток. На сервере №2 последний раз торговал 27 июня и получал balance=остаток. А теперь почему-то стало balance=0.
На фондовой секции картина аналогичная.
Версия терминала 7.11.1.5 (также тестировал на версии 7.2.1.5 - картина такая же).

Техподдержка брокера БКС заявляет, что версии серверной части QUIK на всех их серверах идентичны и настроены одинаково.

Вопросы:
1) Чему должно быть равно поле balance в данном случае?
2) Были ли какие-либо обновления серверной части QUIK в которых могла поменяться логика формирования поля balance в коллбеке OnTransReply? (допускаю что БКС недавно сделал обновление всех серверов, кроме VIP-сервера)
3) Возможна ли такая разница из-за различий в конфигурации серверов?

Спасибо.
QUIK (версия 7.0.1.5), function OnTrade(trade), трехкратный вызов на одно событие.
 
Прошу разработчиков зарегистрировать пожелание:
Ни в коем случае не делать никаких trans_id=nil !!

В руководстве четко прописано что поле trans_id имеет тип NUMBER. Соответственно программисты (в частности я) в своих скриптах считают что в этом поле может быть только число. В Lua значение nil это отдельный тип переменной, и например выражение t.trans_id>0 приведет к ошибке и вылету скрипта. Почему я должен перелопачивать десятки тысяч строк кода в десятках своих скриптов и вводить множество ненужных проверок, из-за того, что кому-то вдруг приспичило получать nil?

2 Старатель.
Вы упорно не хотите принять положение, что теперь некоторые параметры сделки могут измениться. Нет никакой разницы, что присылать по-умолчанию, 0 или nil. Надо просто понимать, что теперь теоретически возможна ситуация что сначала пришло t.trans_id=12345 а через минуту придет t.trans_id=67890. Разработчики наверное потому и не хотят выкладывать список "неизменяемых" параметров, что теоретически может поменяться любой параметр. Они сделали систему для общего случая для произвольной биржевой площадки. Как с этим общим случаем работать - это уже геморрой программистов.
Перестают отображаться графики после многократного вызова CreateDataSource() - ds:Close()
 
1) У Вас в коде какая-то белеберда
if ds~=true then ...
if ds[h]~=true then ....
Зачем? ds и ds[h] только что созданы.

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

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

3) Представитель разработчиков подтвердил что проблема типа "график с пустым черным окном" уже встречалась и в актуальной версии терминала уже решена.
В 7-й версии проблема мною не замечена. Т.е. тему можно закрывать.
Перестают отображаться графики после многократного вызова CreateDataSource() - ds:Close()
 
Спасибо за ответы!
Перестают отображаться графики после многократного вызова CreateDataSource() - ds:Close()
 
В версии 7.0.4.10 проблемы не наблюдаю.
В одном из последних релизов 6-й версии (6.17.3.6) проблема была.

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

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

Правильная версия скрипта:
Код
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
Перестают отображаться графики после многократного вызова 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.
Страницы: 1
Наверх