CreateDataSource

Страницы: Пред. 1 2
RSS
CreateDataSource, не грузятся данные при формир. через CreateDataSource
 
Nikolay,

Попробуйте убрать условие if.
 
Логика ожидания полученных данных из ds (объект datasource, для которого был успешен вызов CreateDataSource), но не более timeout секунд, может быть примерно такая:
Код
local function init(ds, timeout)
  local deadline = os.time() + timeout
  while os.time() < deadline do
    if ds:Size() > 0 then
      return true
    end
    sleep(100)
  end
  return false
end
Если функция вернула false, значит что-то пошло не так. Таймаут устанавливается пользователем. Я обычно ставлю 15 секунд.
 
Если я уберу if, то у меня будет задержка на каждой бумге. У меня код перебирает бумаги в цикле.
Также и ожидание до 15 секунд несколько неприемлимо, т.к. все зависнет.

Хотелось бы при инициализации скрипта проверить на наличие данных, поставить заказ оных, если нет и уже идти по данным.
 
можно попробовать так.
=============================
в main ставите однократную подписку на данные:
if DS==nil then    DS = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL) end
==============================
там, где используете эти данные ставите условие:
if DS and DS:Size() ~= 0 then
-- обработка данных
end
------------------------
При этом нет надобности в каких-либо задержках, все будет работать без тормозов.
 
Цитата
Николай Камынин написал:
можно попробовать так.
=============================
в main ставите однократную подписку на данные:
if DS==nil then    DS = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL) end
==============================
там, где используете эти данные ставите условие:
if DS and DS:Size() ~= 0 then
-- обработка данных
end
------------------------
При этом нет надобности в каких-либо задержках, все будет работать без тормозов.

У меня при инициализации происходит проверка на количество. Если пусто, то идет заказ данных.

А у уже в main идет обработка данных. Там я тоже поставил на проверку, но уже без задержек, т.к. данные не приходят, сразу. Возможно перезаказывать бессмысленно, а надо просто ждать.
 
ds = CreateDataSource("SPBFUT", "SIZ0", INTERVAL_M1)
ds:SetEmptyCallback()

В скрипте больше ничего нет. Выдает ошибку attempt to index a nil value (local 'ds')
Почему так? Что-то изменилось в терминале?
 
Цитата
Виктор написал:
ds = CreateDataSource("SPBFUT", "SIZ0", INTERVAL_M1)
ds:SetEmptyCallback()

В скрипте больше ничего нет. Выдает ошибку attempt to index a nil value (local 'ds')
Почему так? Что-то изменилось в терминале?
так работает, но выдает 0
Скрытый текст
 
Цитата
Виктор написал:
Цитата
Виктор написал:
ds = CreateDataSource("SPBFUT", "SIZ0", INTERVAL_M1)
ds:SetEmptyCallback()

В скрипте больше ничего нет. Выдает ошибку attempt to index a nil value (local 'ds')
Почему так? Что-то изменилось в терминале?
так работает, но выдает 0     Скрытый текст            Скрытый текст            Скрытый текст       function main()     Скрытый текст       ds, Error = CreateDataSource("SPBFUT", "SIZ0", INTERVAL_M1,"bid")     Скрытый текст       if ds == nil then     Скрытый текст       message('Ошибка подключения: '..Error)     Скрытый текст       end     Скрытый текст       ds:SetEmptyCallback()     Скрытый текст       sleep(60000)     Скрытый текст       message(tostring(ds:Size()))     Скрытый текст       end
Уважаемая Администрация. Скажите пожалуйста, как отредактировать свое сообщение?  
 
Виктор, добрый день!

К сожалению ядро форума не предусматривает подобного функционала.
 
Виктор,

Что касается самого вопроса
Цитата
Виктор написал:
так работает, но выдает 0
Запустили описанный вами скрипт у себя, все работает корректно.

Во-первых, для работы CreateDataSource по параметру (bid в Вашем случае), необходимо, чтобы были включены следующие настройки в пункте меню Система/Настройки/Основные настройки/Программа/Сохранение данных:
- "Данные, отражающие текущее состояние и всю историю изменений"
- "Получать пропущенные данные"

Также, заметим, что 0 это все еще результат, а не ошибка. Рекомендуем построить график по данному параметру и проверить, есть ли на нем свечи.
 
Цитата
Roman Azarov написал:
Виктор,

Что касается самого вопроса
Цитата
Виктор написал:
так работает, но выдает 0
Запустили описанный вами скрипт у себя, все работает корректно.

Во-первых, для работы CreateDataSource по параметру (bid в Вашем случае), необходимо, чтобы были включены следующие настройки в пункте меню Система/Настройки/Основные настройки/Программа/Сохранение данных:
- "Данные, отражающие текущее состояние и всю историю изменений"
- "Получать пропущенные данные"

Также, заметим, что 0 это все еще результат, а не ошибка. Рекомендуем построить график по данному параметру и проверить, есть ли на нем свечи.
Эти настройки включены. График по параметру "лучшая цена спроса" построил, есть там свечи. Но скрипт не работает. На другом форуме подсказали, неправильно прописан инструмент. Надо строго соблюдать регистр. Теперь все работает.
 
Roman Azarov, подскажите пожалуйста, а можно ли получать больше свечек этой функцией, или какой-либо еще? Встала проблема получения минутных свечей за месяц, а CreateDataSource возвращает от силы 500 минуток
 
Цитата
Виктор написал:
На другом форуме подсказали
Можете написать что за форум?
 
Цитата
Дмитрий написал:
Цитата
Виктор написал:
На другом форуме подсказали
Можете написать что за форум?
https://quikluacsharp.ru/quik-qlua/poluchenie-v-qlua-lua-dannyh-iz-grafikov-i-indikatorov/
 
Виктор, добрый день!

CreateDataSource может получить ровно столько же свечек, сколько и сам терминал (сколько даст брокер).
Судя по описанному Вами количеству (500 свечей), данные получаются только за текущую торговую сессию. На графике (по тому же параметру) ситуация такая же?

Рекомендуем обратиться с данным вопросом к брокеру, услугами которого Вы пользуетесь. Вероятно, на сервере просто не включена архивация интересующих вас интервалов.
 
Виктор, Архивы торгов ведутся во многих местах - например, вот архив акций, торгующихся на СПб - отсюда я качал минутные свечи за полгода чуть не по тысяче тикеров (когда отлаживал свой алгоритм): http://mfd.ru/export/?groupId=33

А сейчас я и вообще свечи считаю сам (в прерываниях по таймеру), на небольших временных интервалах (до часовых, кажется), но мне больше и не требуется.
Страницы: Пред. 1 2
Читают тему
Наверх