Смотрим документацию к функции 3.10.4. CreateDataSource:
Описание результата выполнения функции:
Несложный скрипт для проверки этого утверждения, показывает что это не так.
То есть имеется ошибка в реализации данной функции!
Прошу исправить.
Код скрипта:
При выполнении этого скрипта я бы хотел получить 3 ошибки из четырех.
Потому что делаю подписку на два фьючерса, которые давно истекли.
+ подписываюсь на полнейший треш (тикера GARB в секции SPBFUT нет и надеюсь не будет)
Но на самом деле мне создаю 4 датасорса ( ds ~= nil ) и конечно нет никаких указаний на ошибку ( error_descr == nil ).
Это очень сильно мешает жить!
Сценариев вижу 3 и в каждом из них хотелось бы получить внятное сообщение об ошибке СРАЗУ после завершения функции CreateDataSource.
что бары придут (или должны приходить) быстрее.
То есть грубо говоря выполняется подписка на инструмент, я проверяю ему ds:Size() > 0 и если вдруг датасорс пуст, нет возможности сразу понять
это я ошибся в указании тикера, инструмент уже истек или это полный шлак с которым и разговаривать вообще не о чем.
Цитата |
---|
TABLE data_source, STRING error_desc CreateDataSource (STRING class_code, STRING sec_code, NUMBER interval, [, STRING param]) |
Цитата |
---|
Функция возвращает таблицу data_source в случае успешного завершения. Если указан неверный код класса или параметр, то возвращается «nil». При этом error_desc содержит описание ошибки. |
То есть имеется ошибка в реализации данной функции!
Прошу исправить.
Код скрипта:
Код |
---|
function main() local class = "SPBFUT" local sec = "SiU6" local interval = 0 local is_error = false local ds, error_descr = CreateDataSource(class, sec, interval) if (error_descr ~= nil) then is_error = true error_descr = "Can't create data source for " .. class .. ", " .. sec .. ", " .. tostring(interval) .. " Error: " .. error_descr end if (ds == nil) then error_descr = "Can't create data source for " .. class .. ", " .. sec .. ", " .. tostring(interval) is_error = true end if is_error then message(sec .. ": Error subscription. Message: " .. tostring(error_descr)) else message(sec .. ": Subscription OK. ds:Size()==" .. tostring(ds:Size())) end sec = "SiH5" ds, error_descr = CreateDataSource(class, sec, interval) if (error_descr ~= nil) then is_error = true error_descr = "Can't create data source for " .. class .. ", " .. sec .. ", " .. tostring(interval) .. " Error: " .. error_descr end if (ds == nil) then error_descr = "Can't create data source for " .. class .. ", " .. sec .. ", " .. tostring(interval) is_error = true end if is_error then message(sec .. ": Error subscription. Message: " .. tostring(error_descr)) else message(sec .. ": Subscription OK. ds:Size()==" .. tostring(ds:Size())) end sec = "GARB" ds, error_descr = CreateDataSource(class, sec, interval) if (error_descr ~= nil) then is_error = true error_descr = "Can't create data source for " .. class .. ", " .. sec .. ", " .. tostring(interval) .. " Error: " .. error_descr end if (ds == nil) then error_descr = "Can't create data source for " .. class .. ", " .. sec .. ", " .. tostring(interval) is_error = true end if is_error then message(sec .. ": Error subscription. Message: " .. tostring(error_descr)) else message(sec .. ": Subscription OK. ds:Size()==" .. tostring(ds:Size())) end sec = "SiM7" ds, error_descr = CreateDataSource(class, sec, interval) if (error_descr ~= nil) then is_error = true error_descr = "Can't create data source for " .. class .. ", " .. sec .. ", " .. tostring(interval) .. " Error: " .. error_descr end if (ds == nil) then error_descr = "Can't create data source for " .. class .. ", " .. sec .. ", " .. tostring(interval) is_error = true end if is_error then message(sec .. ": Error subscription. Message: " .. tostring(error_descr)) else message(sec .. ": Subscription OK. ds:Size()==" .. tostring(ds:Size())) end end |
При выполнении этого скрипта я бы хотел получить 3 ошибки из четырех.
Потому что делаю подписку на два фьючерса, которые давно истекли.
+ подписываюсь на полнейший треш (тикера GARB в секции SPBFUT нет и надеюсь не будет)
Но на самом деле мне создаю 4 датасорса ( ds ~= nil ) и конечно нет никаких указаний на ошибку ( error_descr == nil ).
Это очень сильно мешает жить!
Сценариев вижу 3 и в каждом из них хотелось бы получить внятное сообщение об ошибке СРАЗУ после завершения функции CreateDataSource.
- Идет подписка на всякий шлак (невалидная секция или тикер). В ответ сразу нажно вернуть nil, "Unknown security" независимо от интервала запроса
- Идет подписка на истекший фьючерс или облигацию. В ответ сразу вернуть nil, "Expired security". Для тикового интервала точно.
Но для остальных интервалов тоже лучше сразу вернуть ошибку. Это будет логично и консистентно. - Если по инструменту нет ни одной единицы данных (например, по фьючерсу ALSI-3.17 или по дальним опционам),
то хотелось бы тоже получить сообщение об ошибке. nil, "There is no data in the security". По крайней мере для дневных,
недельных и месячных интервалов нет никакой проблемы сразу определить, что инструмент -- шлак -- и не морочить людям голову с попытками выкачать из него бары.
что бары придут (или должны приходить) быстрее.
То есть грубо говоря выполняется подписка на инструмент, я проверяю ему ds:Size() > 0 и если вдруг датасорс пуст, нет возможности сразу понять
это я ошибся в указании тикера, инструмент уже истек или это полный шлак с которым и разговаривать вообще не о чем.