Подключение к Zen-Fire API

untitled

Многие слышали о Zen-Fire, так же как о бесплатном API, который реализован на трех языках: С++, Java и .NET(Vb, C# etc.). Несмотря на то, что есть подробная документация, в этом посте рассмотрим подключение к данным Zen-Fire пошагово.

Для реализации необходимо иметь опыт работы с C# (будет рассматривать пример именно на нем), хотя бы на начальном уровне. Скачать API можно с официального форума.
После создания .net приложения, для подключения к Zen-Fire, необходимо создать соединение, наподобии того как это делает NinjaTrader или MarketDelta.

Создание соединения:

//папка cert идет вместе с API.
ZenFire.Connection connection = new ZenFire.Connection("cert");
//указываем на то, что хотим получать тиковые данные.
connection.SetOption("intraday_tick", 1);
//установка соединения.
connection.Login(login, pass, "Live");
//функция conn_TickEvent будет обрабатывать поступающие данные.
connection.TickEvent += new ZenFire.Connection.TickEventHandler(conn_TickEvent);
//функция connection_status будет отслеживать состояние соединения
//и автоматически его восстанавливать в случае потери
connection.AlertEvent += new ZenFire.Connection.AlertEventHandler(connection_status);

Запуск потока данных:

//создаем экземпляр инструмента(например S&P)
ZenFire.IProduct product = conn.GetProduct("ESU1", "CME");

//st - вчерашнее число, end - сегодняшнее.
DateTime st = DateTime.Now.AddDays(-1);
DateTime end = DateTime.Now;

//Подгружаем историю для созданного инструмента.
//Zen-Fire дает подкачивать историю только за текущий день.
conn.ReplayTicks(product, st, end);

//Запускаем реал-тайм поток данных для созданного инструмента.
conn.Subscribe(product, ZenFire.TickEventFlags.Trade);

Готово! Теперь осталось обработать данные в ранее указанной функции conn_TickEvent():

private void conn_TickEvent(object sender, ZenFire.TickEventArgs e)
{
//получаем точное время входящего тика
DateTime tick_date = new DateTime(e.TimeStamp.Year,
e.TimeStamp.Month, e.TimeStamp.Day, e.TimeStamp.Hour,
e.TimeStamp.Minute, e.TimeStamp.Second);

//получаем цену тика
double tick_price = e.Price;

//получаем объем тика
int tick_volume = e.Volume;
}

Очень простая схема — далее тики можно записывать в базу данных, и обрабатывать как угодно.

копипастинг VisualVolume.NET