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

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

Страницы: 1
CreateDataSource
 
Цитата
Николай Камынин пишет:
Полагаю, что речь идет о реальном времени.
Нет, речь не всегда идёт о реальном времени. Поэтому и все ваши остальные выкладки не всегда верны.
Мне необязательно знать данные за последние полчаса, чтобы принять решение на основании данных за предыдующую неделю.
CreateDataSource
 
Дмитрий, спасибо за поддержку, именно это, я и имел ввиду, когда предлагал функцию getDataCount в сообщении #84
CreateDataSource
 
Цитата
Sergey Gorokhov пишет:
а как отличить что это не одно и тоже?
Э... что значит как отличить?...
Size() показывает размер таблицы данных, уже полученных с сервера.
Идея функции getDataCount, которую я предложил, в том, чтобы делать запрос на сервер и возвращать количество строк из серверной таблицы.
Разница кардинальная, как я понимаю клиент-серверные операции.
Цитата
Sergey Gorokhov пишет:
На графике есть
Так кажется идея функции CreateDataSource отчасти и состояла изначально в том, чтобы избавиться от графика, если он не нужен...
CreateDataSource
 
Цитата
Sergey Gorokhov пишет:
Вы не совсем понимаете. Дело в том, что нет такого критерия который позволил бы отличить ситуацию "продолжения ожидания" от "отсутствия данных", а значит и решить эту проблему нельзя.
Хорошо, я допускаю, что интерфейс клиент-сервер не позволяет сделать в этом месте элегантное решение.
Но ситуация на мой взгляд требует улучшения, поэтому следующие возможные предложения:
1) Можно ли добавить функцию
NUMBER  getDataCount(STRING class_code, STRING sec_code, NUMBER interval, [, STRING param])
которая бы сообщала сколько на данный момент есть данных на сервере для данного инструмента? (подозреваю, что отличие будет только COUNT в SQL запросе, но повысит нагрузку на сервер...)
2) Или же добавить функции getSecurityInfo() ещё один возвращаемый параметр. По хорошему конечно дату-время последней известной серверу сделки. Но думаю это не впишется в архитектуру клиент-серверных вызовов. Поэтому может не очень элегантно, но зато просто и надёжно - true-false параметр указывающий были ли сделки до начала сегодняшней торговой сессии. Выглядит может и не очень красиво, но я уверен, что это решит 99% случаев возникновения моего вопроса.
CreateDataSource
 
Цитата
Sergey Gorokhov пишет:
Здравствуйте,
Вопрос уже многократно поднимался на форуме.
Ответ: никак.
Прошу понять, что прочитать весь форум довольно затруднительно, а поиском не всегда находится нужное.
Поэтому ещё вопрос - а планируется ли добавление срабатывания callback'а в такой ситуации? Ведь это решило бы проблему.
CreateDataSource
 
Но всё-таки возник вопрос - какой метод официально рекомендуется, чтобы узнать, что CreateDataSource загрузила все данные, которые были актуальны на момент её вызова?
Поясню на примере, что именно я имею ввиду. Код такой:
Код
sec=<код бумаги>

function main()
  local function SetLoaded()
    loaded = true
  end
  
  loaded = false
  file = io.open("output.txt", "w+t")

  ds = CreateDataSource("TQBR", sec, INTERVAL_M15)
  ds:SetUpdateCallback(SetLoaded)
  sec_name = getSecurityInfo("TQBR", sec).short_name
  file:write("name: "..sec_name)
  
  repeat sleep(1) until loaded
  s=ds:Size()
  file:write(" size: "..s)
     
  ds:Close()
  file:close()
end
Так вот, если sec равно, например "AFLT", то скрипт отрабатывает, завершается и на выходе я имею в output.txt строчку "name: Аэрофлот size: 3013", что абсолютно понятно, правильно.
А вот если я ставлю sec равной "ERCO", то скрипт подвисает и, после его прерывания, в output.txt я получаю лишь "name: ЭРКО ао".

Очевидно, что не срабатывает callback для бумаги ERCO. Судя по тому, что я вижу в терминале - по бумаге ERCO торгов давно (или вообще) не было. Очевидно с сервера приходит пустой массив данных. Но ведь он приходит (файл TQBR_ERCO_15.dat размером 41 байт в каталоге archives присутствует), поэтому вопросы:
1) почему в данном случае не срабатывает callback? (предполагаю, что потому, что нет данных, но тогда возникает куда более важный вопрос №2)
2) как понять, что уже пора перестать ждать данные, принять size=0 и пойти по жизни дальше? (как отличить ситуацию продолжения ожидания данных с сервера от ситуации отсутствия данных?)
CreateDataSource
 
День добрый.

Зашёл в эту тему, чтобы понять как работает CreateDataSource, т.к. ds:Size() мне ноль всегда возвращал. Спасибо добрым людям, что напомнили про callback (В итоге сделал callback-функцию которая просто выставляет флажок, что данные загружены и всё стало отлично).

Но попутно возникло пожелание. Дело в том, что Quik по умолчанию загружает с сервера ~3000 свечек. Но мне, например, нужны данные всего за неделю (это в пределах 100-200 свечек получается), но зато по многим бумагам (например весь класс TQBR, т.е. около 300 штук). Если бы была возможность указать сколько последних свечек загрузить, то это снизило бы размер передаваемых данных раз в десять (полагаю съэкономилось бы несколько десятков мегабайт)
Поэтому прошу рассмотреть возможность добавить к функции CreateDataSource ещё один параметр, который бы определял сколько свечек истории надо загрузить. (При этом вполне допускаю, что кому-то будет даже удобно ставить его равным 0, чтобы экономить и получать данные лишь с текущего момента).
Страницы: 1
Наверх