Получение свечных данных из сообщений
Atom
16.05.2017


Добрый день.
Храню свечные данные в СУБД MS SQL Server (open/close time, o, h, l, c, V).

До сего момента использовал данные из файлов (Hydra/<первая буква инструмента>/<инструмент>/candles_TimeFrameCandle_1.00-00-00.bin), примерно так:
Код
var storageRegistry = new StorageRegistry { DefaultDrive = new LocalMarketDataDrive(config.history_folder_path) };


Хотел бы, чтобы HistoryEmulationConnector получал данные не из файлов а, например, из сообщений-свечек, полученных после выборки данных из СУБД.

Дайте, по-возможности, совет (лучше пример кода), как реализовать такую логику работы:
-> Загрузили из БД свечные данные по инструменту
-> Сформировали правильно сообщения-свечки из загруженных данных
-> После старта исторического тестирования HistoryEmulationConnector начал получать сообщения-свечки
-> Все работает, словно запустили тестирование из коробки

Спасибо!



Спасибо:




6 Ответов
Support

Фотография
Дата: 16.05.2017
Ответить


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

Support

Фотография
Дата: 16.05.2017
Ответить


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


Спасибо:

gewinn

Фотография
Дата: 16.05.2017
Ответить


Спасибо, попробую
Автор топика
Спасибо:

Support

Фотография
Дата: 17.05.2017
Ответить


..
Спасибо:

gewinn

Фотография
Дата: 23.05.2017
Ответить


Все заработало. Спасибо!

Если кому будет интересно использовать свои свечные данные из своей (или удаленной СУБД), то, основываясь на примере от уважаемого суппорта SS, реализовал так:
1) Получаем свечные данные из БД, формируем свечки, кладем в коллекцию:
Код

....
while (reader.Read())
{
candles_list.Add(new TimeFrameCandle()
{
Security = security,
TimeFrame = TimeSpan.FromMinutes(period),
OpenTime = new DateTimeOffset((DateTime)reader["open_datetime"], ST.timezone_timespan_hours),
CloseTime = new DateTimeOffset((DateTime)reader["open_datetime"] + TimeSpan.FromMinutes(period), ST.timezone_timespan_hours),
OpenPrice = (decimal)(double)reader["o"],
HighPrice = (decimal)(double)reader["h"],
LowPrice = (decimal)(double)reader["l"],
ClosePrice = (decimal)(double)reader["c"],
TotalVolume = (decimal)(double)reader["v"]
});
}
db.closeDbConnection();


2) Пишем ф-цию, которая превращает свечки из коллекции в сообщения:
Код

public IEnumerable<Message> getCandles(DateTimeOffset d)
{
return candles_list.Where(с=> ((с.OpenTime.Date == d.Date) && (с.OpenTime.TimeOfDay == d.TimeOfDay))).Select(t => t.ToMessage());
}


3) Подписываемся на исторические данные из наших сообщений:
Код
...
connector.RegisterHistorySource(security, MarketDataTypes.CandleTimeFrame, typeof(Candle), getCandles);
...


4) Работаем дальше как из "коробки" - создаем экземпляр класса CandleManager, создаем серию свечек:
Код
...
candle_manager = new CandleManager(connector);
...
candle_serie = new CandleSeries(typeof(TimeFrameCandle), security, TimeSpan.FromMinutes(period));
...
candle_manager.Start(candle_serie);


5) Подписываемся на событие появления новых свечей и работаем с ними :)
Код
candle_manager .Processing += (series, candle) =>
{
//TODO
};


Еще раз спасибо!
Автор топика
Спасибо:

Support

Фотография
Дата: 24.05.2017
Ответить


..
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy