← Zurück

Как выгрузить историю по инструменту

Добрый день.

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


  var depthStorage = storage.GetMarketDepthStorage(security);
  var dates = depthStorage.Dates;

            foreach (var dt in dates)
            {
                var depths = depthStorage.Load(dt);

                foreach (var d in depths)
                {
                ...
                }

но выгруженные данные сильно отличаться от того что видно в гидре. Время одно и тоже Безымянный.png

Может есть способ выгрузить из Гидры?

Kommentare (43)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Support
Support

Добрый день,

Да, из Гидры можно делать экспорт в различные форматы. Например, для стаканов как в вашем случае http://doc.stocksharp.ru/html/6126cb15-de8b-4bcc-8b81-7354e8894239.htm (внизу страницы). Для текстового формата будет показано окно Предпосмотра, где можно задавать шаблон экспорта, а так же добавить заголовок в создаваемый файл.

Георгий
Георгий Autor

Оказывается в гидре предпросмотр не работает (отдельную тему завел). Можно ли стаканы выгрузить из гидры в формате как у меня на скриншоте (Ticker,Date,Time,BestAsk,BestBid)? Как сделать выгрузку через API?

Георгий
Георгий Autor

В текстовик выгружается не правильно: инструмент SiU7. Сначала цена идет нормально, а потом начинает расти. depth.PNG

Support
Support

Пришлите, пожалуйста, за указанную дату файл со стаканами.

Георгий
Георгий Autor

К сообщению прикрепить файл не получилось. Выжил сюда

Георгий
Георгий Autor

Как-то можно удалить из ветки лишние сообщения? А то случайно три раза одно и то же написал. :)

Support
Support

Сегодня выложена версия 4.4.1. Посмотрите её, работает ли корректно теперь preview. Выгрузка стакана Гидрой из вашего файла никаких проблем не показала. Выгружается все нормально.

Георгий
Георгий Autor

Проверил на 4.4.1. Предпросмотр работает.

Георгий
Георгий Autor

Выгрузка стакана Гидрой из вашего файла никаких проблем не показала. Выгружается все нормально. В чем может быть проблема?

Георгий
Георгий Autor

Вчера попробовал выгрузить на другой машине. Та же самая проблема. Сначала цена идет нормально, а потом начинает расти. При запуске утилиты конвертации в гидре в csv формат после конвертации получаются такие же значения как при ручной выгрузке в txt формат.

Support
Support

Георгий: Вчера попробовал выгрузить на другой машине. Та же самая проблема. Сначала цена идет нормально, а потом начинает расти. При запуске утилиты конвертации в гидре в csv формат после конвертации получаются такие же значения как при ручной выгрузке в txt формат.

Выгрузка происходит через Гидру или еще каким-то способом?

Георгий
Георгий Autor

Через Гидру.

Support
Support
Support

Георгий: Через Гидру.

Приведите пожалуйста шаблон для экспорта и результирующий файл?

Георгий
Георгий Autor

То что было по дефолту написано, так и оставил:

{ServerTime:yyyyMMdd};{ServerTime:HHmmssffffff zzz};{Price};{Volume};{Side}
Георгий
Георгий Autor

Результирующий файл

Support
Support

Выгрузив данные программно:

var si = new Security { Id = "SiU7@FORTS" };
var siQs = new StorageRegistry().GetQuoteMessageStorage(si, new LocalMarketDataDrive(@"путь"));

foreach (var q in siQs.Load())
{
	Console.WriteLine("B={0}	A={1}", q.Bids.FirstOrDefault()?.Price, q.Asks.FirstOrDefault()?.Price);
}

получилось возрастание плавное до 200. Каким источником получены данные стаканы?

Георгий
Георгий Autor

Support: Выгрузив данные программно:

var si = new Security ; var siQs = new StorageRegistry().GetQuoteMessageStorage(si, new LocalMarketDataDrive(@"путь"));

foreach (var q in siQs.Load()) { Console.WriteLine("B={0} A={1}", q.Bids.FirstOrDefault()?.Price, q.Asks.FirstOrDefault()?.Price); }

> 
> получилось возрастание плавное до 200. Каким источником получены данные стаканы?

Попробовал Ваш код. Вывод одинаковый, что мой вариант кода, что Ваш.
Георгий
Георгий Autor

Данные записывались из Квика.

получилось возрастание плавное до 200

это и был оригинальный вопрос (см. скрин в первом сообщении). Это косяк программной выгрузки или данных? Если данных, то почему Гидра на ту же дату и время показывает другие значения?

Support
Support
Support

Георгий: это и был оригинальный вопрос (см. скрин в первом сообщении). Это косяк программной выгрузки или данных? Если данных, то почему Гидра на ту же дату и время показывает другие значения?

Можете уточнить последнее предложение?

Георгий
Георгий Autor

Это по картинке из первого поста (ниже чуть расширенный скриншот):

depth2.PNG

Слева это данные которые видны в Гидре на 10 утра 17.07.2017, а справа это то что программно выгрузилось. Видно что на одну у ту же дату и одно и тоже время значения разные.

Support
Support

Георгий: Это по картинке из первого поста (ниже чуть расширенный скриншот):

depth2.PNG

Слева это данные которые видны в Гидре на 10 утра 17.07.2017, а справа это то что программно выгрузилось. Видно что на одну у ту же дату и одно и тоже время значения разные.

Приведите пожалуйста ваш код выгрузки.

Георгий
Георгий Autor

// Получаем хранилище стаканов
var depthStorage = storage.GetMarketDepthStorage(security);

// Загружаем стаканы
var dates = depthStorage.Dates;

wr = new StreamWriter(Directory.GetCurrentDirectory().ToString() + "/Data/" + fileName);
wr.WriteLine("Ticker,Date,Time,BestAsk,BestBid");

foreach (var dt in dates)
{
    var depths = depthStorage.Load(dt);
    
    string _time = "1:00:00";
    var _sTime = new TimeSpan(10, 0, 0); //Время начала выгрузки. До этого времени данные игнорим.

    foreach (var d in depths)
    {
        if (d.BestAsk != null && d.BestBid != null )
        {
            if (d.LocalTime.DateTime.TimeOfDay > _sTime) 
            {
                if (d.LocalTime.DateTime.ToLongTimeString() != _time) // нужно для фильтра повторяющихся дат (из-за мс)
                {
                    wr.WriteLine("{0},{1},{2},{3},{4}", security.Code.ToString(), dt.ToShortDateString(), d.LocalTime.DateTime.ToLongTimeString(), 
                        d.BestAsk.Price.ToString(), d.BestBid.Price.ToString()); 

                    _time = d.LocalTime.DateTime.ToLongTimeString();
                }
            }
        }
    }
}

wr.Close();

Support
Support

Выводит такое:

10:00:00 AM,61959,62069
10:00:01 AM,61647,62069
10:00:02 AM,61425,61556
10:00:03 AM,61245,61347
10:00:04 AM,61189,61347
10:00:05 AM,60907,61035
10:00:06 AM,60654,61035
10:00:07 AM,60380,61035
10:00:08 AM,60273,60371
10:00:09 AM,60201,60371
10:00:10 AM,60122,60242
Георгий
Георгий Autor

Support: Выводит такое:

10:00:00 AM,61959,62069 10:00:01 AM,61647,62069 10:00:02 AM,61425,61556 10:00:03 AM,61245,61347 10:00:04 AM,61189,61347 10:00:05 AM,60907,61035 10:00:06 AM,60654,61035 10:00:07 AM,60380,61035 10:00:08 AM,60273,60371 10:00:09 AM,60201,60371 10:00:10 AM,60122,60242


На 10:00:00 видно, что Ask отличается, от того что в Гидре видно.
Support
Support

Георгий: На 10:00:00 видно, что Ask отличается, от того что в Гидре видно.

У вас в коде стоит фильтр ввиде шага по секундам. Если его убрать, то будет как в Гидре.

Георгий
Георгий Autor

С одной ошибкой выгрузки разобрался. Обновил версию библиотеки и теперь на начало выгрузка идет нормально. Данные такие же как в Гидре. Остался вопрос с тем, что через какое-то время цена куда-то в космос улетает.

depth3.PNG

Пробовал выгружать как своим кодом, так Вашим. Данные одинаковые. В обоих случаях к концу каждого дня цена добегает до млн., а с начала следующего дня опять нормальная.

Георгий
Георгий Autor

Попробовал выгрузить txt файлом из Гидры. Получаются такие же значения как при программной выгрузке.

Support
Support

Георгий: Попробовал выгрузить txt файлом из Гидры. Получаются такие же значения как при программной выгрузке.

Да, именно сам файл такой. Вы можете прислать еще несколько дней для проверки?

Георгий
Георгий Autor

Выложил в облако

Support
Support

Георгий: Выложил в облако

Можете прислать скриншот настроек панели Квика в гидре?

Георгий
Георгий Autor

Lau скрипт запускается из папки с Гидрой (..\Hydra\Plugins), параллельно для робота запускается другой lau скрипт из другой папки.

settings.png

Support
Support

Георгий: Lau скрипт запускается из папки с Гидрой (..\Hydra\Plugins), параллельно для робота запускается другой lau скрипт из другой папки.

settings.png

Имелась ввиду панель, где добавляются инструменты.

Георгий
Георгий Autor

settings2.png

Alexander
Support
Support

Георгий:

settings2.png

Сегодня записали по SIZ7 стаканы, подобного не наблюдалось. Ваш скрипт Луа настроен так, что он используется из папки где установлена Гидра? Или где распаковано API?

Георгий
Георгий Autor

И так и так

lau.PNG

Для гидры и для робота в настройках скриптов указаны разные порты.

Support
Support

Георгий: И так и так

lau.PNG

Для гидры и для робота в настройках скриптов указаны разные порты.

Попробуйте оставить только один скрипт (удалить для API из настроек) и записать последней версией Гидры стакан за сегодня. И прислать его нам.

Георгий
Георгий Autor

Выложил Запись только одним скриптом шла с 16:30 вчера

Support
Support

Добрый день,

Стаканы все корректные. Но они начинаются с утра и почти весь день.

Георгий
Георгий
Георгий Autor

Добрый день.

Да, запись шла весь день, но одним скриптом только после 16:30. Проверил все данные по стаканам по SiZ начиная с сентября. Корректная запись началась с даты обновления гидры до версии 4.4.1. При обновлении гидра в какой-то лог пишет, что прошло обновление или нет? Интересно посмотреть запись сломалась при переходе на какую-то конкретную версию или причина где-то в другом месте.

Support
Support

Причина почти вероятно в двух одновременно скриптах. Скрипт предполагает использование 1 сервера множества клиентов.

Георгий
Георгий Autor

Если это так, то как тогда корректно сделать, чтобы одновременно и робот работал и Гидра данные собирала?

Support
Support

По схеме 1 сервер множество клиентов. А у вас сейчас столько серверов, сколько клиентов. Это непроверенный вариант.

Георгий
Георгий Autor

Попробую. Раньше такая схема выдавала ошибку (где-то год назад), поэтому перешел к варианту количество клиентов=количеству серверов.