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

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

Страницы: 1
Исторические данные торгов spbexchange - какого брокера выбрать, Можно ли получить исторические данные торгов Санкт-Петербургской биржи через CreateDataSource
 
Цитата
Egor Zaytsev написал:

Добрый день.
Можно, по аналогии и с другими режимами. Но не все брокера ведут историю и не у всех есть доступ к Санкт-Петербургской биржи, поэтому Вам нужно этот момент уточнять при выборе брокера.

Egor Zaytsev , так я для этого тему и создал - может кто поделится практическим опытом. Выяснять данный вопрос в офисах наших банков - занятие, прямо скажем, не для слабонервных :)
Исторические данные торгов spbexchange - какого брокера выбрать, Можно ли получить исторические данные торгов Санкт-Петербургской биржи через CreateDataSource
 
Добрый день.
У меня брокер ВТБ, получаю исторические данные с помощью функции CreateDataSource - все прекрасно работает на различных интервалах. Можно ли получать исторические данные торгов с Санкт-Петербургской биржи аналогичным образом - с использованием функции CreateDataSource? Интересуют данные по акциям иностранных компаний. Несмотря на то, что ВТБ аккредитован Санкт-Петербургской биржей, по факту работать на ней через этого брокера нельзя, и неизвестно когда будет можно.
Чтобы не попасть в неловкую ситуацию - заключить брокерский договор, а потом выяснить что такая возможность не поддерживается - буду очень признателен если поделитесь практическим опытом работы через какого-нибудь брокера (Альфа, Открытие и др.), а также значениями параметров функции CreateDataSource.
Заранее большое спасибо.
CreateDataSource возвращает пустой набор данных, Функция CreateDataSource возвращает пустой набор данных, сообщений об ошибках нет
 
Цитата
Егор Масалкин написал:
Методом проб и ошибок понял в чем ошибка.
Проблема была в функции OnInit(), в которой я писал весь код. Как только я поменял на функцию main, что было у товарища  Alexegin , всё сразу заработало.
еще одно добавление (полученное опять же методом проб и ошибок):
Код
tmTac = os.time()
repeat
   sleep( 1000 )
until ( dsData:Size() > 0 ) or ( os.difftime( os.time(), tmTac ) > 15 )
изменилось условие цикла
CreateDataSource возвращает пустой набор данных, Функция CreateDataSource возвращает пустой набор данных, сообщений об ошибках нет
 
Цитата
Егор Масалкин написал:
Ваш код работает.
Но как только меняют параметры, пишу
Код
dsData, strMessage = CreateDataSource( "SPBFUT", "RIU7", INTERVAL_MN1 )

то выдаёт, что размер будет 0. НО как только я делаю график, то он спокойно получает данные... но ведь он с сервера должен брать свечи, а не с графика?
  1. еще раз проверьте коды класса и инструмента - отображается после нажатия в терминале Alt+I при соответствующей выбранной строке в Таблице текущих параметров
  2. попробуйте следующий код - просто скопируйте и сохраните в файле test.lua:
Код
function main()

    dsData, strMessage = CreateDataSource( "SPBFUT", "RIU7", INTERVAL_MN1 )

    if dsData == nil then
        message( "CreateDataSource() error: "..strMessage, 3 )
    else

        tmTac = os.time()
        repeat
            sleep( 1000 )
        until ( dsData:Size() == 0 ) or ( os.difftime( os.time, tmTac ) <= 15 )
        tmTic = os.time()
         
        if dsData:Size() == 0 then
            message( "CreateDataSource() returned empty dataset. Waiting timeout: "..os.difftime( tmTic, tmTac ), 2 )
        else
            message( "CreateDataSource() success. Waiting timeout: "..os.difftime( tmTic, tmTac ) )
        end

        dsData:Close()
    end

end
Цитата
Егор Масалкин написал:
ну серьёзно... может я такой аутист что правильно не могу переписать коды? Но нет... может опять какая-то беда с фьючерами?
скорее всего просто досадная ошибка, которую вы в упор не видите - так бывает
CreateDataSource возвращает пустой набор данных, Функция CreateDataSource возвращает пустой набор данных, сообщений об ошибках нет
 
Цитата
Егор Масалкин написал:
У меня днем выводит, что все источники данных пусты...
у меня приведенный выше код работает. может неправильно указан код класса, бумаги или интервал не знаю ... например для месячных данных по акциям ГАЗПРОМ:
Код
dsData, strMessage = CreateDataSource( "TQBR", "GAZP", INTERVAL_MN1 )
CreateDataSource возвращает пустой набор данных, Функция CreateDataSource возвращает пустой набор данных, сообщений об ошибках нет
 
Цитата
Sergey Gorokhov написал:
Должна работать.
спасибо, значит будем звонить товарищам брокерам :)

Цитата
Sergey Gorokhov написал:
а какая разница, если параметры одни и те же?
ну не знаю ... просто если я при использовании Lua читаю про функцию CreateDataSource в соответствующем разделе соответствующего документа, у меня почему-то не возникает мыслей посмотреть значения параметров другого языка для другой функции другой таблицы - наверное потому что про это ничего не написано?
CreateDataSource возвращает пустой набор данных, Функция CreateDataSource возвращает пустой набор данных, сообщений об ошибках нет
 
Цитата
Sergey Gorokhov написал:

Таблица торгов, меняется в зависимости от рынка. На разных рынках разные параметры. Даже более того, на одном рынке, у разных брокеров, набор может быть разным.
Таким образом, даже если бы в документации были описаны параметры, то не факт что они у Вас есть.
В связи с чем, правильней всего с начала посмотреть что Вам нужно в таблице, а потом узнать какой для этого нужен заголовок. И пути два. Либо через DDE (что надежней), либо через документацию info.chm.
-Раздел 8. Алгоритмический язык QPILE
--Функции для получения значений Таблицы текущих торгов
---Значения параметров функций

через документацию не надежней т.к. как уже говорилось и еще раз, набор параметров в таблице торгов может быть разным. описать вообще все возможные варианты параметров к сожалению не представляется возможным.
большое спасибо, Sergey Gorokhov. я лишь говорю о том, что в соответствующем разделе документации по Lua (а не QPILE) нет никакой информации ни о возможных значениях параметров, ни о том где это можно посмотреть, ни о том о чем вы пишите тем более.

а после закрытия торговой сессии фондовой секции функция CreateDataSource должна работать или нет, не подскажите? или это от брокера зависит и надо у него спрашивать (ВТБ24)?
CreateDataSource возвращает пустой набор данных, Функция CreateDataSource возвращает пустой набор данных, сообщений об ошибках нет
 
Цитата
Nikolay Pavlov написал:
Для определения кода параметра, включите в настройках рабочего места Quik настройку Формальное представление данных (раздел 'Программа->Буфер обмена'), добавьте в Таблицу текущих торгов необходимые параметры, скопируйте ее содержимое в буфер обмена (Ctrl+C) и вставьте, например, в блокнот, и Вы увидите, какие значения нужно передавать в  STRING param.
в документации про возможные значения параметра ничего не написано, упоминается Таблица обезличенных сделок, а не текущих параметров. тайные знания и волшебство какое-то ...
спасибо, Nikolay Pavlov
CreateDataSource возвращает пустой набор данных, Функция CreateDataSource возвращает пустой набор данных, сообщений об ошибках нет
 
Цитата
Andrei2016 написал:
попробуйте после вызова функции CreateDataSource() добавить следующую строку:
Код
if  (not dsData:SetEmptyCallback())  then  message("Server returns no data")  end
Если сообщение у вас появится, вероятнее всего, что проблема на стороне брокера (возможно, "слетели" какие-то настройки либо появились новые ограничения частного характера).
Andrei2016, попробую обязательно, хотя и не понятно почему на основании этого можно делать какие-то выводы.
после закрытия торговой сессии на фондовом рынке все равно должна работать возможность получения данных через CreateDataSource, я правильно понял?
а необязательный параметр STRING param - кто-нибудь знает возможные значения?
CreateDataSource возвращает пустой набор данных, Функция CreateDataSource возвращает пустой набор данных, сообщений об ошибках нет
 
Цитата
Егор Масалкин написал:
Ставлю ожидание на 30 секунд, однако, всё равно возвращает пустые значения. Что-то долго голуби летят, или я чего-то не так делаю?
...
При этом, что характерно - если у меня открыт график с каким-либо инструментом, он без проблем выцепит данные с него ...

у меня работает вот такой код (что в принципе то же самое):
Код
dsData, strMessage = CreateDataSource( "INDX", strTicker, INTERVAL_MN1 );

if dsData == nil then
    message( "CreateDataSource( "..strTicker.." ) error: "..strMessage, 3 );
else
    tmTic = os.time();
    repeat
        sleep( 1000 );
    until ( dsData:Size() == 0 ) or ( os.difftime( os.time, tmTic ) <= 15 );
    tmTac = os.time();

    if dsData:Size() == 0 then
        message( strTicker..", size:"..dsData:Size()..", "..os.difftime( tmTac, tmTic ).." seconds", 2 );
    else
        message( strTicker..", size:"..dsData:Size()..", "..os.difftime( tmTac, tmTic ).." seconds" );
    end;
end;

НО! работает только во время торговой сессии - после 19:00 MSK даже после ожидания 15 секунд набор данных пустой, не знаю нормально ли это ...
CreateDataSource возвращает пустой набор данных, Функция CreateDataSource возвращает пустой набор данных, сообщений об ошибках нет
 
вот так вот нормально будет?
Код
function main()

        strTicker = "MICEXINDEXCF";

        dsData, strMessage = CreateDataSource( "INDX", strTicker, INTERVAL_MN1 )

        if dsData == nil then
            message( "CreateDataSource( "..strTicker.." ) error: "..strMessage, 3 )
        end

        tmTic = os.time()
        while dsData:Size() == 0 do
            sleep( 5000 )
            message( "Waiting for "..os.difftime( os.time(), tmTic ).." seconds so far .." )
        end
        tmTac = os.time()
        message( "Getting data took "..os.difftime( tmTac, tmTic ).." seconds. Data source size: "..dsData:Size() )

        -- Do something with the data ...
        
        dsData:Close()

end
можно не с нулем сравнивать а с каким-либо значением, но в любом случае это по-моему бред, джентльмены, хоть и работает.
вопрос с параметрами все-таки остается открытым - подскажите пожалуйста где можно посмотреть возможные значения
CreateDataSource возвращает пустой набор данных, Функция CreateDataSource возвращает пустой набор данных, сообщений об ошибках нет
 
Цитата
s_mike@rambler.ru написал:
Процедуру можно делать в тот момента когда она вам нужна.
Схематично эта процедура стучится к брокеру с просьбой послать терминалу данные по требуемому вам инструменту.
... сервер после ее получения докушает чай, отошлет назад данные (может снова голубями), потом терминал их рассует по полкам только после этого они станут доступны вам.
сколько времени пройдет на все эти пассы -гетзвестно. Но явно больше, чем выполняется один оператор lua в вашей программе.
логика работы процедуры понятна, большое спасибо.
в документации написано что есть возможность установить для получаемого набора данных функцию обратного вызова - SetUpdateCallback - для обработки изменившихся данных. насколько я понимаю, данная функция будет вызываться столько раз, сколько данных (свечей) есть в наборе (это как минимум), кроме этого она будет вызываться каждый раз по мере изменения последней свечи. если изменения последней свечи можно каким-то образом обработать, то все равно непонятно когда переставать получать данные - я же не знаю сколько данных на сервере брокера (сколько свечей).
также в документации написано, что есть у функции GetDataSource необязательный параметр STRING param, про который написано только что если этот параметр не задан, то заказываются данные на основании Таблицы обезличенных сделок, если задан – данные по этому параметру. однако возможные значения этого параметра не приводятся.
так как все-таки делать-то - через функцию обратного вызова и сравнивать даты свечей с тем, что необходимо получить или использовать какое-то значение этого необязательного параметра?! где тогда взять это значение, непонятно ...
CreateDataSource возвращает пустой набор данных, Функция CreateDataSource возвращает пустой набор данных, сообщений об ошибках нет
 
Цитата
s_mike@rambler.ru написал:
Вода из крана начинает капать с некоторой задержкой после того как вы начали поворачивать вентиль.
здесь то же самое. Данные будут несколько позже.
то есть такую процедуру надо делать в конце дня? после обеда? или когда?
как узнать когда наступило это время?
прошу прощения за вопросы которые может быть имеют очевидные ответы - новичок в этом деле. спасибо за помощь
CreateDataSource возвращает пустой набор данных, Функция CreateDataSource возвращает пустой набор данных, сообщений об ошибках нет
 
добрый день. терминал Quik 7.11.1.5.
пример кода скрипта:
Код
function main()

    arrTickers = {  "MICEXINDEXCF", "MICEX10INDEX", "MICEXBMI", "MICEXCGS", "MICEXCHM", "MICEXFNL",
                    "MICEXM&M", "MICEXMNF", "MICEXO&G","MICEXPWR","MICEXSC", "MICEXTLC", "MICEXTRN",
                    "MICEXINNOV", "MICEXMBICP", "MICEXMBITR" }

    for n = 1, 16, 1 do

        strTicker = arrTickers[ n ]

        dsData, strError = CreateDataSource( "INDX", strTicker, INTERVAL_MN1 )

        if dsData == nil then
            message( "CreateDataSource( "..strTicker.." ) error: "..strError, 3 )
        else

            if dsData:Size() == 0 then
                if strError == nil then
                    message( "CreateDataSource( "..strTicker.." ) is empty", 2 )
                else
                    message( "CreateDataSource( "..strTicker.." ) is empty: "..strError, 2 )
                end
            else
                message( "CreateDataSource( "..strTicker.." ) success "..dsData:Size() )
            end

        end

        sleep( 3000 )
    end
end
в результате работы скрипта все наборы данных пустые - dsData:Size() == 0, ошибок нет - strError == nil. графики необходимых интервалов для соответствующих инструментов в терминале открыты.
что я делаю не так и почему так происходит? самое интересное что две недели назад то же самое работало без проблем ...
заранее большое спасибо за ответы
Страницы: 1
Наверх