← Back

Урок 7. Сохранение и накопление данных

Видео-уроки: Hydra (S#.Data) основные моменты

[vk]http://vk.com/video_ext.php?oid=-66650972&id=167470414&hash=b23e64182732032e&hd=3[/vk]

Темы занятия:

      1. Работа с Гидрой (S#.Data)
  1. Получение данных через Гидру
  2. Использование полученных данных в своем проекте

Полезные ссылки: Документация по S#.Data Создание своего источника для S#.Data,

Вложения: Скачать проекты

Comments (31)

Login or Create account, Log in or register to leave a comment

Prival
Prival

Осталась куча вопросов.

  1. Почему в видео шаг RIM3 установлен 1, и автора это устраивает …. а меня нет, не устраивает шаг вроде бы 10. Почему для лектора это нормально ? За что отвечает этот параметр ? если я введу туда 5134675912, это тоже устроит ?
  2. Если качать с финама склеенный фьючерс РТС, какой шаг устанавливать ? до сентября 2012 был 5, сейчас 10
  3. Есть куча источников. Поясните все равно откуда качать или есть разница ? К примеру фьючерс РТС (могу качать через Quik, финам, RTS и плазу). Через что лучше это делать ?
  4. Как правильно настроить серверный режим….(что куда писать, прописывать и т.д.) + как потом этим пользоваться ?
  5. Что такое Анонимно – что за настройка ? что она делает ? анонимно деньги тырит с моего счета или еще что-то ?
  6. Как правильно склеивать фьючерс, покажите пример. Их склеивать можно по разному, как сделано это в программе ?
  7. В настройке источника финама есть игнорировать ошибки ? что это за ошибки ? их целая куча там идет, зачем Вы все время приводите финам…неужели FTP сервер биржи еще хуже ?
  8. В хелпе http://stocksharp.com/doc/?topic=html/a720a275-440a-44ce-86e2-bcec2e0bc55f.htm где склеивание есть столбец (…. Ласты) что это такое (мы не экстрасенсы… )? чем они отличаются от сделок ? откуда они качаются ? как выглядят и т.д.
  9. Что за источник S#.Data Server ?
  10. Есть ли сервер который уже давно собирает эти данные (не вериться что никто это не делает), где есть ордер лог, стаканы и т.д. Обязательно всем нужно собирать самим ?
  11. У меня есть знакомый который торгует через плазу. Могу ли я настроить гидру у него (как это сделать)? Будет ли она (гидра) мешать его работе ? как мне подключаться к его компьютеру для получения скачанных данных ?
Самунджян Артем

Prival: Осталась куча вопросов. Спасибо за Ваши вопросы! Пишите, мы только за то, чтобы убрать все пробелы.

Prival:

  1. Почему в видео шаг RIM3 установлен 1, и автора это устраивает …. а меня нет, не устраивает шаг вроде бы 10. Почему для лектора это нормально ? За что отвечает этот параметр ? если я введу туда 5134675912, это тоже устроит ?

Дело в том, что данный шаг никак не повлияет на корректность использования данных этого инструмента. В дальнейшем, если мы будем использовать эти данные в коде программы мы легко сможем поменять шаг . Поэтому автор не делает на этом акцент. Как это в принципе и делается в проекте по этому уроку. Вот скриншот (из проекта):

проект данных

Когда мы качаем данные с финама, то финам не предоставляет данных о минимальном шаге, поэтому автоматически подставляется единица.

Prival: 2. Если качать с финама склеенный фьючерс РТС, какой шаг устанавливать ? до сентября 2012 был 5, сейчас 10

Да, тут нужно очень осторожно подходить к решению этого вопроса. Можно поставить шаг 10 и пожертвовать результатами тестирования, хотя если система долгосрочная, то это не так сильно повлияет на её результаты. Второй вариант - разделить склеенный фьюч на два 1) Где шаг равен 5 и 2) где шаг равен 10. В дальнейшем делать раздельный тестинг

Prival: 3. Есть куча источников. Поясните все равно откуда качать или есть разница ? К примеру фьючерс РТС (могу качать через Quik, финам, RTS и плазу). Через что лучше это делать ? Дело в том, что качать легче всего через самый простой и надежный источник. Таковым является финам. Я рассмотрю здесь нюансы каждого источника: 1)Quik -> Если сохранять стаканы, в таком случае гидра должна работать постоянно + не получиться запустить робота, потому что Quik поддерживает только одно подключение (особенности DDE сервера). Если сохранять сделки, то гидру (S#.Data) нужно будет запускать один раз в день (в конце дня), так как квик сам сохраняет сделки на один день. Не очень удобно, потому что постоянно должно что-то работать.

2)Финам -> Можно качать сделки, когда угодно. То есть один раз включили, она ни с кем не конфликтует. Не хранит стаканы, можно закачивать готовые свечки. По сути самый удобный источник. РТС источник также работает, но там, чтобы получить список инструментов придется скачивать по каждой сделки с каждого инструмента (опять же не совсем удобно, а данные точно такие же).

3)Плаза-> Неплохой вариант, не конфликтует с роботом. Может одновременно и то и то работать. Плазу имеет смысл использовать, только если Вы собираетесь сохранять то, чего нет у финама (Ордер лог, стаканы к примеру).

Prival: 4. Как правильно настроить серверный режим….(что куда писать, прописывать и т.д.) + как потом этим пользоваться ?

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

Меню Дополнительно -> Настройки… здесь выставить галочку Серверный режим. Это будет Сервер.

Запускаем на другом ПК гидру и настраиваем ее как клиент, для этого находим источник S#.Data Server, переходим в его настройки и там указываем параметры для подключения к серверной Гидре: адрес к серверу, при необходимости логин и пароль.

Это основные настройки, необходимые для создания схемы Сервер-Клиент на Гидре.

Prival: 5. Что такое Анонимно – что за настройка ? что она делает ? анонимно деньги тырит с моего счета или еще что-то ? Если бы...(деньги тырит) 😀

Если выставлена опция Анонимно, то к этому серверу для доступа не нужно указывать логин/пароль, в противном случае, необходимо указывать логин/пароль учетной записи Windows, где запущен Сервер Гидры.

Prival: 6. Как правильно склеивать фьючерс, покажите пример. Их склеивать можно по разному, как сделано это в программе ? Тут нам можем помочь документация

Prival: 7. В настройке источника финама есть игнорировать ошибки ? что это за ошибки ? их целая куча там идет, зачем Вы все время приводите финам…неужели FTP сервер биржи еще хуже ? В третьем вопросе пояснил. В сохранении данных должен признаться, что финам лучше всех. Поэтому его все и используют.

В логах отображаются не только ошибки, но и предупреждения, информационные сообщения. Опция Игнорировать ошибки заставляет Гидру не обращать внимание на ошибки и выполнять следующие действия.

Prival: 8. В хелпе http://stocksharp.com/doc/?topic=html/a720a275-440a-44ce-86e2-bcec2e0bc55f.htm где склеивание есть столбец (…. Ласты) что это такое (мы не экстрасенсы… )? чем они отличаются от сделок ? откуда они качаются ? как выглядят и т.д. Ласты – это Top of book, т.е. лучшие цены (bestask и bestbid стакана). Это совсем не сделки. Скачиваются из источника данных. Prival: 9. Что за источник S#.Data Server ? Источник – серверный вариант гидры на другом ПК.

Prival: 10. Есть ли сервер который уже давно собирает эти данные (не вериться что никто это не делает), где есть ордер лог, стаканы и т.д. Обязательно всем нужно собирать самим ? Есть, но он предоставляет только демо данные. Сервер, который будет сохранять данные планируем настроить (ол, стаканы, сделки). Prival: 11. У меня есть знакомый который торгует через плазу. Могу ли я настроить гидру у него (как это сделать)? Будет ли она (гидра) мешать его работе ? как мне подключаться к его компьютеру для получения скачанных данных ?

Да, все верно. Можно поставить её, она совсем не будет конфликтовать с роботом.

Но для этого необходимо иметь соответствующие технические возможности, как минимум надо чтобы у ПК где стоит Гидра-сервер был белый IP адрес, а также настроены сетефой экран и т.п. Вы же хотите через интернет подключаться, если я правильно понял.

Prival
Prival

Поясните тогда эти ошибки (приведены на скринах). Поясняю свои действия

  1. Дата начала скачивания во всех случаях одинакова 17.09.2012
  2. Начинаю скачивать с Финам дает ошибки и останавливается рис.1
  3. Начинаю качать с RTS работает без ошибок (лог чистый) рис.2. Что требует пояснения. Исхожу из вашего заявления что все одинаково, разницы нет....
  4. Что означает ошибка не соответствие шагу цены ? Неужели сделки по RIH3 могут быть не кратны 10…
  5. Почему при скачивании РТС этих ошибок нету ? (Варианты - либо разные данные, либо Гидра их обрабатывает по разному(надеюсь одинаково)). Оба варианта плохи, первый это как в Форексе у каждой кухни свои котировки, что на бирже вроде не возможно ( я до сего момента был уверен в этом ^-)) либо одно из двух…либо стог сена, либо вилы … ^-)
  6. Количество сделок к одному и тому же моменту времени (12/14/2012 последняя сделка) отличается в разы. Финам 600 тыс (рис.1), RTS 5 мил (рис.2). Это как ? Поясните что означает последняя сделка, то что все до этого момента закачано…или еще что то ?
  7. А это как и почему рис.2

RIH3-3.13 сделок 5 323 тыс. RIU3-9.13 сделок 10 949 тыс – это что по ближнему контракту сделок в 2 раза меньше чем по дальнему ? Это как ….так не бывает

З.Ы. Заранее спасибо за ответы. Прежде чем тестировать всегда нужно решить вопрос данных. Вы великолепно постарались решить этот вопрос, хранить самые подробные данные. Но есть еще вопрос качества этих данных, зашумленная синусойда, реальные данные в которых есть шпильки по 10 000 пунктов (или как в MetaTrader 5 (минутки,а внутри минутки все имитируется ( моделируются)) и т.д. и т.п.

Самунджян Артем

Prival: Поясните тогда эти ошибки (приведены на скринах).

  1. Что означает ошибка не соответствие шагу цены ? Неужели сделки по RIH3 могут быть не кратны 10… Скорее всего там что-то напутали с различными инструментами. То есть одни скачаны с ртс, другие с финама и Вы не заметили с каким именно Вы работаете. Поэтому я советую сделать так
  1. Скопировать скачанные Вами данные (забекапить их)
  2. Почистить папку Мои документы/StockSharp/Hydra (там все настройки лежат)
  3. Запустить гидру и поработать только с одним источником
  4. Проверить все ли нормально -> если нет, то пришлите нам логи, мы уже по ним более подробно разберемся

Prival: 2. Почему при скачивании РТС этих ошибок нету ? (Варианты - либо разные данные, либо Гидра их обрабатывает по разному(надеюсь одинаково)). Оба варианта плохи, первый это как в Форексе у каждой кухни свои котировки, что на бирже вроде не возможно ( я до сего момента был уверен в этом ^-)) либо одно из двух…либо стог сена, либо вилы … ^-)

Разных данных там точно нет. За исключением только того, как оба эти источника сохраняют рыночные данные. К примеру, в одном источнике могут быть внебиржевые сделки, а в другом нет.

Prival: 3.Количество сделок к одному и тому же моменту времени (12/14/2012 последняя сделка) отличается в разы. Финам 600 тыс (рис.1), RTS 5 мил (рис.2). Это как ? Поясните что означает последняя сделка, то что все до этого момента закачано…или еще что то ? «Последняя сделка», содержит дату последней полученной сделки, не гарантируется, что данные поступают последовательно по значению времени.

Prival: RIH3-3.13 сделок 5 323 тыс. RIU3-9.13 сделок 10 949 тыс – это что по ближнему контракту сделок в 2 раза меньше чем по дальнему ? Это как ….так не бывает В Вашем случае, по RIH3 не все данные загружены.

В любом случае я советую разобраться с одним источником.

Moadip
Moadip

Prival: Поясните тогда эти ошибки (приведены на скринах). Поясняю свои действия

  1. Дата начала скачивания во всех случаях одинакова 17.09.2012
  2. Начинаю скачивать с Финам дает ошибки и останавливается рис.1
  3. Начинаю качать с RTS работает без ошибок (лог чистый) рис.2. Что требует пояснения. Исхожу из вашего заявления что все одинаково, разницы нет....
  4. Что означает ошибка не соответствие шагу цены ? Неужели сделки по RIH3 могут быть не кратны 10…
  5. Почему при скачивании РТС этих ошибок нету ? (Варианты - либо разные данные, либо Гидра их обрабатывает по разному(надеюсь одинаково)). Оба варианта плохи, первый это как в Форексе у каждой кухни свои котировки, что на бирже вроде не возможно ( я до сего момента был уверен в этом ^-)) либо одно из двух…либо стог сена, либо вилы … ^-)
  6. Количество сделок к одному и тому же моменту времени (12/14/2012 последняя сделка) отличается в разы. Финам 600 тыс (рис.1), RTS 5 мил (рис.2). Это как ? Поясните что означает последняя сделка, то что все до этого момента закачано…или еще что то ?
  7. А это как и почему рис.2

RIH3-3.13 сделок 5 323 тыс. RIU3-9.13 сделок 10 949 тыс – это что по ближнему контракту сделок в 2 раза меньше чем по дальнему ? Это как ….так не бывает

З.Ы. Заранее спасибо за ответы. Прежде чем тестировать всегда нужно решить вопрос данных. Вы великолепно постарались решить этот вопрос, хранить самые подробные данные. Но есть еще вопрос качества этих данных, зашумленная синусойда, реальные данные в которых есть шпильки по 10 000 пунктов (или как в MetaTrader 5 (минутки,а внутри минутки все имитируется ( моделируются)) и т.д. и т.п.

  1. То и значит, может и не быть, все зависит от того какие данные пришли. Нормальные или кривые. Финам это не эталон, и бывает приходят битые данные.
  2. Не факт, может и на РТС такая же ошибка быть. Почему? п.1. Данные от любого источника обрабатываются одинаково.
  3. По финаму выкачивается конкретный инструмент. Соответственно и цифра выкачанных сделок будет соответствующая. С РТС нет возможности выкачать конкретный инструмент. Выкачиваются все данные за день. Поэтому и цифры в разы больше. Последняя сделка(как и последний стакан, последнее изменение и т.д.) это последнее значение которое сохранено. Допустим включал гидру неделю назад, включил сегодня, и сразу видно, до какого числа(времени) есть данные. 4.> Это как ….так не бывает Бывает. Цифры, это не сколько сохранено, а сколько выкачено. Допустим по какому то инструменту было выкачано 100к сделок. Они сохранились. Потом опять выкачиваются эти данные. Так вот цифры будут показывать сколько было выкачено, но сохранено будет по прежнему 100к сделок, дублей не будет.
pft_man
pft_man

Добрый день. Я хочу, чтобы при следующем запуске приложения (например, на следующий день) в стратегию загрузились все сделки, совершённые раньше, и рассчиталась текущая позиция по стратегии. В связи с этим возникли два вопроса.

  1. Это можно сделать через метод стратегии ProcessNewOrders, но в него подаются ордера. Можно ли сделать хранилище ордеров? Я нашёл GetOrderTraceStorage, но он сохраняет историю изменений по ордеру. Можно ли как-то потом эту историю изменений превратить в ордера, которые потом передать в метод ProcessNewOrders?

  2. Попробовал реализовать это через хранилище сделок, в которое я сохраняю только свои сделки. Но возникает ошибка.


Connection.SafeConnection.Trader.NewMyTrades += mytrades => this.GuiAsync(() =>
                                            _storageRegistry.GetTradeStorage(Connection.SelectedSecurity).Save(mytrades)); 

IvanB
IvanB Author

pft_man: Добрый день. Я хочу, чтобы при следующем запуске приложения (например, на следующий день) в стратегию загрузились все сделки, совершённые раньше, и рассчиталась текущая позиция по стратегии. В связи с этим возникли два вопроса.

  1. Это можно сделать через метод стратегии ProcessNewOrders, но в него подаются ордера. Можно ли сделать хранилище ордеров? Я нашёл GetOrderTraceStorage, но он сохраняет историю изменений по ордеру. Можно ли как-то потом эту историю изменений превратить в ордера, которые потом передать в метод ProcessNewOrders? Те ордера, которые Вы сохраняете через метод Save, будут доступны через метод Load. Вы пишите, что Вам надо сохранять сделки, то, думаю, этот вариант Вам не подходит, в данном случае следует воспользоваться хранилищем сделок, которое возвращается по методу GetTradeStorage(), что Вы и делали в пункте 2. pft_man:
  2. Попробовал реализовать это через хранилище сделок, в которое я сохраняю только свои сделки. Но возникает ошибка.

Connection.SafeConnection.Trader.NewMyTrades += mytrades => this.GuiAsync(() => _storageRegistry.GetTradeStorage(Connection.SelectedSecurity).Save(mytrades));

Массив mytrades надо привести к интерфейсу IEnumerable, этот интерфейс реализовывается в классе List<>, поэтому можно через метод ToList() преобразовать массив в список List<>. В результате будет выглядеть так:
```csharp

Connection.SafeConnection.Trader.NewMyTrades += mytrades => this.GuiAsync(() =>
                                            _storageRegistry.GetTradeStorage(Connection.SelectedSecurity).Save(mytrades.ToList())); 

pft_man
pft_man

IvanB: Массив mytrades надо привести к интерфейсу IEnumerable, этот интерфейс реализовывается в классе List<>, поэтому можно через метод ToList() преобразовать массив в список List<>. В результате будет выглядеть так:

Connection.SafeConnection.Trader.NewMyTrades += mytrades => this.GuiAsync(() => _storageRegistry.GetTradeStorage(Connection.SelectedSecurity).Save(mytrades.ToList()));


На самом деле, MyTrades содержит Order и Trade, а метод Save принимает только Trade. Правильнее будет вот так.

```csharp

Connection.SafeConnection.Trader.NewMyTrades += mytrades => this.GuiAsync(() =>
                    {
                        _storageRegistry.GetTradeStorage(Connection.SelectedSecurity).Save(mytrades.Select(t => t.Trade).ToList());
                    });

Но теперь возникает вот такая ошибка. Не понимаю, почему, путь я указываю выше в коде.


((LocalMarketDataDrive)_storageRegistry.DefaultDrive).Path = @"С:\History"; // изменяем путь, используемый по умолчанию
((LocalMarketDataDrive)_storageRegistry.DefaultDrive).UseAlphabeticPath = true; // используем алфавитное хранилище

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

IvanB
IvanB Author

pft_man: ...

Connection.SafeConnection.Trader.NewMyTrades += mytrades => this.GuiAsync(() => { _storageRegistry.GetTradeStorage(Connection.SelectedSecurity).Save(mytrades.Select(t => t.Trade).ToList()); });

> 
> Но теперь возникает вот такая ошибка. Не понимаю, почему, путь я указываю выше в коде.
> 
> ```csharp

((LocalMarketDataDrive)_storageRegistry.DefaultDrive).Path = @"С:\History"; // изменяем путь, используемый по умолчанию
((LocalMarketDataDrive)_storageRegistry.DefaultDrive).UseAlphabeticPath = true; // используем алфавитное хранилище

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

pft_man
pft_man

Спасибо. На самом деле задача - сделать так, чтобы при запуске приложения стратегия знала своё состояние на момент последней работы (например, при выключении на ночь). То есть, чтобы текущая позиция, сделки, PnL попали в запускаемую стратегию. В документации я нашёл метод ProcessNewOrders, который и показался мне оптимальным для этой цели - загружаем в стратегию ордера, а всё остальное рассчитывается автоматически. Но этот метод принимает на вход ордера, а хранилище можно сделать только из OrderTraceItem. Можно ли как-то потом OrderTraceItem превратить в Order? Или всё-же как-то можно сделать хранилище ордеров Order?


protected virtual IEnumerable<Order> ProcessNewOrders(
	IEnumerable<Order> newOrders,
	bool isStopOrders


IMarketDataStorage<OrderTraceItem> GetOrderTraceStorage(
	Security security
)

pft_man
pft_man

А, кажется, нашёл. У класса OrderTraceItem есть свойство Order. Попробую вечером.

pft_man
pft_man

Вроде путь присваивается до обращения по нему. Пробовал указывать путь @"С:\History\S\SBER@QJSIM", но всё-равно не работает. Зато если закомментировать строку, в которой сохраняется путь, то всё работает, с ней не хочет.


        private StorageRegistry _storageRegistry = new StorageRegistry();

        public MainWindow()
        {
            InitializeComponent();
            Connection.SafeConnection = new SafeConnection(new QuikTrader(QuikTerminal.GetDefaultPath()));
            _logManager.Sources.Add(Connection.SafeConnection.Trader);
            _logManager.Listeners.Add(new FileLogListener("log.txt"));
            _logManager.Listeners.Add(new GuiLogListener(_monitorWindow));
            _monitorWindow.MakeHideable();
            _myTradesWindow.MakeHideable();

            ((LocalMarketDataDrive)_storageRegistry.DefaultDrive).Path = @"С:\History"; // изменяем путь, используемый по умолчанию
            ((LocalMarketDataDrive)_storageRegistry.DefaultDrive).UseAlphabeticPath = true; // используем алфавитное хранилище

            Connection.SafeConnection.Trader.NewMyTrades += mytrades => this.GuiAsync(() =>
                    {
                        _storageRegistry.GetTradeStorage(Connection.SelectedSecurity).Save(mytrades.Select(t => t.Trade).ToList());
                    });
        }

IvanB
IvanB Author

pft_man: Вроде путь присваивается до обращения по нему. Пробовал указывать путь @"С:\History\S\SBER@QJSIM", но всё-равно не работает. Зато если закомментировать строку, в которой сохраняется путь, то всё работает, с ней не хочет.

    private StorageRegistry _storageRegistry = new StorageRegistry();

    public MainWindow()
    {
        InitializeComponent();
        Connection.SafeConnection = new SafeConnection(new QuikTrader(QuikTerminal.GetDefaultPath()));
        _logManager.Sources.Add(Connection.SafeConnection.Trader);
        _logManager.Listeners.Add(new FileLogListener("log.txt"));
        _logManager.Listeners.Add(new GuiLogListener(_monitorWindow));
        _monitorWindow.MakeHideable();
        _myTradesWindow.MakeHideable();

        ((LocalMarketDataDrive)_storageRegistry.DefaultDrive).Path = @"С:\History"; // изменяем путь, используемый по умолчанию
        ((LocalMarketDataDrive)_storageRegistry.DefaultDrive).UseAlphabeticPath = true; // используем алфавитное хранилище

        Connection.SafeConnection.Trader.NewMyTrades += mytrades => this.GuiAsync(() =>
                {
                    _storageRegistry.GetTradeStorage(Connection.SelectedSecurity).Save(mytrades.Select(t => t.Trade).ToList());
                });
    }
Попробуйте перепечатать путь в строке
```csharp
((LocalMarketDataDrive)_storageRegistry.DefaultDrive).Path = @"С:\History"; // изменяем путь, используемый по умолчанию

может быть какой-то символ не латинский, и имя самой директории. Если это не поможет, то надо смотреть проект, можете прислать на почту iv_qul@list.ru

JaguarFX
JaguarFX

В API 4.2.1.7 у класса EmulationTrader уже нет свойства UseCandlesTimeFrame. При этом возникает ошибка (может быть из-за отсутствия свойства, может еще что-то изменилось) - трейдер не берет имеющиеся в папке готовые свечки как ранее, а лезит сразу за сделками! Это видно по логам: Вместо FileAccess: C:\Users\lsa\Documents\StockSharp\Hydra\R\RIM3@FORTS\2013_04_01\candles_TimeFrameCandle_00-05-00.bin получаю: FileAccess: C:\Users\lsa\Documents\StockSharp\Hydra\R\RIM3@FORTS\2013_04_30\trades.bin.

Пытался решить проблему установив "UseExternalCandleSource= true", но не помогло, похоже это не то свойство что надо.

Прошу пояснить как с учетом версии API 4.2.1.7 настроить работу трейдера с сохраненными свечами?

IvanB
IvanB Author

lebedevsrg: В API 4.2.1.7 у класса EmulationTrader уже нет свойства UseCandlesTimeFrame. При этом возникает ошибка (может быть из-за отсутствия свойства, может еще что-то изменилось) - трейдер не берет имеющиеся в папке готовые свечки как ранее, а лезит сразу за сделками! Это видно по логам: Вместо FileAccess: C:\Users\lsa\Documents\StockSharp\Hydra\R\RIM3@FORTS\2013_04_01\candles_TimeFrameCandle_00-05-00.bin получаю: FileAccess: C:\Users\lsa\Documents\StockSharp\Hydra\R\RIM3@FORTS\2013_04_30\trades.bin.

Пытался решить проблему установив "UseExternalCandleSource= true", но не помогло, похоже это не то свойство что надо.

Прошу пояснить как с учетом версии API 4.2.1.7 настроить работу трейдера с сохраненными свечами?

Из примера к 4.2.2.2


				// создаем подключение для эмуляции
				// инициализируем настройки (инструмент в истории обновляется раз в секунду)
				var connector = new HistoryEmulationConnector(
					new[] { security },
					new[] { portfolio })
				{
					StorageRegistry = storageRegistry,

					MarketEmulator =
					{
						Settings =
						{
							// использовать стаканы
							UseMarketDepth = emulationInfo.UseMarketDepth,

							// использовать свечки
							UseCandlesTimeFrame = emulationInfo.UseCandleTimeFrame,

							// проверка что стаканы соответствуют сделкам. Улучшает реалистичность тестирования.
							SyncDepthToTrades = true,

							// сведение сделки в эмуляторе если цена коснулась нашей лимитной заявки. 
							// Если выключено - требуется "прохождение цены сквозь уровень"
							// (более "суровый" режим тестирования.)
							FillOnTouch = false,
						}
					}
				};

JaguarFX
JaguarFX

Иван, благодарю - помогло. Версию я правда пока менять не стал, но нашел свойство MarketEmulator и списал туда

        trader.MarketEmulator.Settings.UseMarketDepth = true;
        trader.MarketEmulator.Settings.UseCandlesTimeFrame = timeFarame;
        trader.MarketEmulator.Settings.SyncDepthToTrades = true;
        trader.MarketEmulator.Settings.FillOnTouch = true;

Появился еще такой вопрос - при экспорте данных есть параметр "sql", использование которого как заявлено должно приводить к экспорту данных в sql-сервер. Но где прописать настройки mssql сервера и саму дерективу insert?

Aleksey24
IvanB
IvanB Author

lebedevsrg: Иван, благодарю - помогло. Версию я правда пока менять не стал, но нашел свойство MarketEmulator и списал туда

        trader.MarketEmulator.Settings.UseMarketDepth = true;
        trader.MarketEmulator.Settings.UseCandlesTimeFrame = timeFarame;
        trader.MarketEmulator.Settings.SyncDepthToTrades = true;
        trader.MarketEmulator.Settings.FillOnTouch = true;

Появился еще такой вопрос - при экспорте данных есть параметр "sql", использование которого как заявлено должно приводить к экспорту данных в sql-сервер. Но где прописать настройки mssql сервера и саму дерективу insert?

Нужно прописать строку подключения в файле Hydra.exe.config Здесь обсуждали данный вопрос: http://stocksharp.com/forum/3729/Kak-dannyie-s-finama-tiki--zaghnat--v-sql/

Architectus
Architectus

Подскажите, пожалуйста, какие инструменты доступны в источнике GainCapital. Не получается найти ни одного через S#.Data. Версия программы 4.2.2.14.

Mikhail Sukhov
Mikhail Sukhov

Architectus: Подскажите, пожалуйста, какие инструменты доступны в источнике GainCapital. Не получается найти ни одного через S#.Data. Версия программы 4.2.2.14.

Вам стоит обратиться к GainCapital с данным вопросом.

Architectus
Architectus

GainCapital предоставляет исторические данные на своем сайте по ссылке http://ratedata.gaincapital.com/. Могу ли я используя возможности программы S#.Data скачать их оттуда?

Mikhail Sukhov
Mikhail Sukhov

Architectus: GainCapital предоставляет исторические данные на своем сайте по ссылке http://ratedata.gaincapital.com/. Могу ли я используя возможности программы S#.Data скачать их оттуда?

Гидра позволяет качать данные с источников что она предоставляет.

Architectus
Architectus

Михаил Сухов:

Architectus: GainCapital предоставляет исторические данные на своем сайте по ссылке http://ratedata.gaincapital.com/. Могу ли я используя возможности программы S#.Data скачать их оттуда?

Гидра позволяет качать данные с источников что она предоставляет.

Это логично. Вопрос в следующем. S#.Data предоставляет источник под названием GainCapital. Я хочу понять, откуда качаются данные при помощи этого источника. Это вот эти данные http://ratedata.gaincapital.com/, или какие-то другие? Если какие-то другие, то какие? Можно ссылку на сайт GainCapital? Если про это где-то написано, то дайте, пожалуйста, ссылку. Если мой вопрос недостаточно правилен, то извиняюсь. Я просто пытаюсь получить некоторую поддержку на форуме в соответствующем разделе и теме, как слушатель курсов. Не более того)

Mikhail Sukhov
Mikhail Sukhov

Architectus: Я хочу понять, откуда качаются данные при помощи этого источника.

Мы не раскрываем внутренности работы S#. Если у вас вопрос относительно откуда качает источник GainCapital, то он качает с данной площадки. Как и что - это уже внутренние вещи. Без разглашения.

Architectus
Architectus

Михаил Сухов: Мы не раскрываем внутренности работы S#. Если у вас вопрос относительно откуда качает источник GainCapital, то он качает с данной площадки. Как и что - это уже внутренние вещи. Без разглашения.

Спасибо за ответы, Михаил. Я думал, что не раскрывается только как качаются данные. Впрочем понять что качается не так трудно, так что тут не должно быть проблемы.

Также более конкретный вопрос. Как я понял, поиск инструментов в источнике GainCapital не работает. Добавил в источник инструмент вручную. Код и название - AUD/CAD. Шаг цены - 0,00001 (также пробовал 0,000001) Размер лота - 1 Источник - GAIN

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

17:51:39.314|       |GainCapital|Инициализируется.
17:51:39.327|       |GainCapital|Перешел в состояние Starting.
17:51:39.336|       |GainCapital|Перешел в состояние Started.
17:51:48.228|       |GainCapital|Старт загрузки сделок за 10.03.2014 для AUD/CAD@GAIN.
17:51:48.724|Error  |GainCapital|System.ArgumentOutOfRangeException: Неправильный объем котировки.
Имя параметра: quotes
Фактическое значение было 0.
   в #=qse0cgvd_pSBKEpetwsAXA_q37ayAU9YJivjCVkLrLq5nLLe9aTnAhfB_O6WIg$pe.#=qe0Hro9k8BWNaregXJofnX$CC1JslmMOr64Jqc5L9RZ8=(List`1 #=qdLM2IloTu3DOdybh3pPsVw==, Quote[] #=qDHbTLJhWUiQvwqm6zr9WcA==, #=qHb_pQVAN6PVfOF77YAaCP91TjPCivLKsDi_gyHNlCZu5W_sxdL6o0K84XeMebX8n #=qFc$q4i_MnAFoFJqAF5cB6g==, Boolean #=qmUTHHgtKZ2FvPlVKEEgVEA==)
   в #=qse0cgvd_pSBKEpetwsAXA_q37ayAU9YJivjCVkLrLq5nLLe9aTnAhfB_O6WIg$pe.#=q8GFLMQ6UlM_1p9KuzjhfTQ==(List`1 #=q2cQNsRhsImEgVXVksZBjSw==, IEnumerable`1 #=q4N0Zy52lh9HH7lQBs0fa1Q==, #=qHb_pQVAN6PVfOF77YAaCP91TjPCivLKsDi_gyHNlCZu5W_sxdL6o0K84XeMebX8n #=qiERIZ6FKNo0gIXPvubBduQ==)
   в #=qaEY6XdcItoIZhrbE_JQwk79n5ukCAO_sjZvAb0t8i2vkaE7ig2hk$yyPHNyuU52Kmf4WU7fxhJxNApxzE$$HlA==.#=qbq0GlpDm9Du1tYNQqDLyLcwlrYf92e9hqWZY_5u7TF7_c5TuFUc$1g0f5vASC3LZhssJy3ecQR8sgw3Ht1mi1PFYP3aK0nhPDt1KK69n$90=(IEnumerable`1 #=qmX8TsCrQVD04zroWg91zTA==, #=qp8rQX2QPJ6wNukXN9LxH57ab0794mCT9b4w47SttPEAvIcj1lmk9kNxTx23VFTIq #=qKXm0QWxOuvyR7BRqiGox9A==)
   в #=qr64Jp_hB72e5YReYfCP3U4THGQhoHPYx057WuZKBM6rmXKO4QQNrEFfwfmgdyR_M.#=q$dWmRKsZiq2LCQmRZNgsMw==(DateTime #=qYp46MXuvijsJXSt_li3Iww==, #=qyVesYeIXbEPPIVbjNJBh8w==[] #=qQwPwY3D8rEDO$KsGK96r9g==, Boolean #=qPOQ1mOwWPLrJOeWddLAEvA==)
   в #=qr64Jp_hB72e5YReYfCP3U4THGQhoHPYx057WuZKBM6rmXKO4QQNrEFfwfmgdyR_M.Save(IEnumerable`1 #=qm_zQ1zwlvG4QWitUhD7uJQ==)
   в StockSharp.Hydra.Core.BaseHydraTask.SafeSave[T](Security security, IEnumerable`1 values, Func`2 getTime, IEnumerable`1 errorChecks, Func`3 getStorage)
17:51:48.725|       |GainCapital|Для AUD/CAD@GAIN загружено 182355 MarketDepth.

Все в итоге застопорилось на

17:52:04.847|       |GainCapital|Окончание итерации.

Сам процесс не заканчивается. В указанной директории с данными чисто.

Mikhail Sukhov
Mikhail Sukhov

Architectus: Также более конкретный вопрос. Как я понял, поиск инструментов в источнике GainCapital не работает.

Его физически нет.

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

17:51:48.724|Error |GainCapital|System.ArgumentOutOfRangeException: Неправильный объем котировки. Имя параметра: quotes Фактическое значение было 0.


Собственно, ошибка говорит сама за себя.

> **[Architectus](@message(30021)):**
> Все в итоге застопорилось на
> ```csharp
17:52:04.847|       |GainCapital|Окончание итерации.

Это не застопорилось, а закончило работу. Выше в логе у вас написано про скачивание 182355 стаканов.

Architectus
Architectus

Михаил Сухов:

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

17:51:48.724|Error |GainCapital|System.ArgumentOutOfRangeException: Неправильный объем котировки. Имя параметра: quotes Фактическое значение было 0.

> 
> Собственно, ошибка говорит сама за себя.
> 
> > **[Architectus](@message(30021)):**
> > Все в итоге застопорилось на
> > ```csharp
17:52:04.847|       |GainCapital|Окончание итерации.

Это не застопорилось, а закончило работу. Выше в логе у вас написано про скачивание 182355 стаканов. Понятно. Подумал по аналогии со Stopped и Stopping, что окончание это процесс)

Исходные данные скачались, но в формат S# они не переведены. Как я понимаю проблема в ошибке.

Текст ошибки я прочитал. Но в чем причина? Что нужно исправить?

Mikhail Sukhov
Mikhail Sukhov

Architectus: Исходные данные скачались, но в формат S# они не переведены. Как я понимаю проблема в ошибке.

Текст ошибки я прочитал. Но в чем причина? Что нужно исправить?

Как видно по логу - переведены. Ошибка простая - нулевая цена.

Architectus
Architectus

Михаил Сухов:

Architectus: Исходные данные скачались, но в формат S# они не переведены. Как я понимаю проблема в ошибке.

Текст ошибки я прочитал. Но в чем причина? Что нужно исправить?

Как видно по логу - переведены. Ошибка простая - нулевая цена.

В том-то и проблема, что данных нет. Да, написано в Гидре что есть стаканы. Но при попытке просмотра - данные отсутствуют. При нажатии ПКМ на инструменте - "Открыть папку с данными" ошибка "Невозможно открыть директорию хранения данных". Папка с именем "AUD_CAD@GAIN" не создается. В указанной в настройках папке с данными файлов по Gain нет. В подпапке TemporaryFiles чисто. А raw файлы с данными лежат вместе с Hydra.exe. В то же время при скачке с Финама проблем нет. Только что проверял. Версия - 4.2.2.19.

Architectus
Architectus

Должен ли я сообщить куда-либо о баге?

Mikhail Sukhov
Mikhail Sukhov

Architectus: Должен ли я сообщить куда-либо о баге?

Вы уже сообщили на форуме. Этого достаточно. Мы обновили Гидру.

Architectus
Architectus

Михаил Сухов:

Architectus: Должен ли я сообщить куда-либо о баге?

Вы уже сообщили на форуме. Этого достаточно. Мы обновили Гидру.

Здорово, спасибо! Обновил Гидру. Заработал источник GainCapital. Также заработал TrueFX. С ним тоже были проблемы.