Логгер котировок с Финам через Transaq Connector на C#

Работа завершена

Время выполнения 28 дней
Отзыв от заказчика
If I could give Andriy 20 starts out of 5, I would do it. Very thoughtful work, done in time, high quality, modular code, functionality works as epxected by the spec or better. Highly recommend!

Техническое задание

Создать следующую консольную программу на C# .NET 6.0 в виде Solution Visual Studio (Community) 2022:

1) Подключается к Финам по логину-паролю-серверу-порту, зашитым в код

2) Использует Transaq Connector DLL (https://www.finam.ru/howtotrade/soft/tconnector/), можно начать с приложенного там демо-примера на C#

3) Единократно подписывается на актуальные обратные вызовы (callback-и) для получения **всех** данных всех котировок, сделок, тиков и глубины рынка (полный набор полей согласно "4.9 Котировки по инструменту(ам)", "4.10 Сделки по инструменту(ам)", "4.11 Глубина рынка по инструменту(ам)" и "4.17 Тиковые данные" в терминах TXmlConnector.pdf), по определённому набору инструментов (см. далее п.4), и накапливает их полное содержимое по мере получения данных от Финам внутрь callback-ов в конкурентную очередь; также сохраняет полную информацию обо всех этих инструментах (согласно "4.7 Информация по инструменту" по TXmlConnector.pdf) из набора в момент начала очередного цикла наполнения пустой очереди (см. далее)

4) Набор инструментов (по "4.6 Список инструментов" и "4.7 Информация по инструменту" в терминах TXmlConnector.pdf) определяется в начале каждого нового цикла наполнения пустой очереди как полный список инструментов одного из типов (BOND, FUT, OPT, GKO, FOB), полученный через "4.6 Список инструментов", значение типа по умолчанию зашито в коде как "GKO". Так предлагается сделать потому, что список инструментов по указанному типу вообще говоря может меняться с течением времени

5) В начале каждой новой календарной минуты асинхронно записывает всё текущее содержимое очереди в пять файлов с именами вида "2024.07.06-14.55.00.178-{тип}.csv" (формат "ГГГГ.ММ.ДД-чч.мм.сс.млс-{тип}.csv") в виде CSV, соответствующему содержимому оригинальных XML, полученных в callback-ах (подробнее о трансформации XML в CSV см. п.6). {тип} — это, соответственно, одно из пяти значений: "instruments" (для данных инструментов), "quotes" (для котировок), "depth" (для глубины рынка), "trades" (для сделок) и "ticks" (для тиков). Дата и время (с миллисекундами) в имени файла соответствует моменту ровно перед тем, как текущее содержимое очереди отправлено на запись. В момент, когда очередь отправляется на запись по (еже)минутному таймеру, в соответствующий асинхронный обработчик передаётся копия этой очереди, тогда как оригинальная очередь тут же атомарно и синхронно очищается, после чего асинхронный обработчик сохранения очереди оказывается запущен, и мы попадаем в состояние начала очредного цикла наполнения пустой очереди: очищенная исходная очередь вновь продолжит асинхронно накапливать получаемые в callback-ах данные

6) Раскладка XML-лей на CSV — по здравому смыслу в плоские таблицы, например, для сделок (см. "4.10 Сделки по инструменту(ам)"): каждая сделка будет представлять собой строку таблицы CSV вида datetime, secid, seccode, tradeno, time, board, price, quantity, quantity, openinterest, period; здесь datetime добавляется нами как тот момент времени в виде строки "ГГГГ.ММ.ДД-чч.мм.сс.млс", когда мы только что получили вход в наш callback, а все остальные поля имеются "как есть" в получаемом XML. Соответственно, мы всегда сможем идентифицировать "блоки" изменившейся структуры данных (например, стакана), как группу с одним и тем же значением поля datetime "ГГГГ.ММ.ДД-чч.мм.сс.млс" — момента входа в соответствующий callback.

7) программа работает бесконечным циклом

8) максимально должна использоваться асинхронная обработка и корректная обработка конкуррентности (вероятно, необходимо зайдействовать ConcurrentQueue): таким образом, например, конвертация очередного полученного XML в табличные данные и дамп наполненной очереди(ей) в файлы не будут блокировать слушателей callback-ов и не будут блокировать друг друга. Не могу сказать, лучше ли иметь одну очередь для всех пяти типов потоков данных (заявки, данные инструметнов, котировки, тики и глубина рынка), или же пять разных, это на ваше усмотрение. Главное, чтобы всё асинхронно и конкурентно развязывалось и не создавалось deadlocks. Важно, чтобы коллбеки не блокировались, поскольку в них мы сохраняем наиболее возможно точный момент возникновения новых данных (время входа в callback), это важное поле

Разработанная программа передаётся заказчику полностью в виде исходного кода без каких-либо дополнительных собственных сторонних библиотек с закрытым кодом.


Откликнулись

1
Разработчик 1
Оценка
(336)
Проекты
620
38%
Арбитраж
39
23% / 64%
Просрочено
93
15%
Свободен
2
Разработчик 2
Оценка
(2)
Проекты
5
0%
Арбитраж
0
Просрочено
1
20%
Свободен
3
Разработчик 3
Оценка
(21)
Проекты
35
54%
Арбитраж
8
63% / 38%
Просрочено
1
3%
Свободен
4
Разработчик 4
Оценка
(250)
Проекты
400
38%
Арбитраж
82
41% / 20%
Просрочено
69
17%
Загружен
Похожие заказы
У меня не сложная задача! Мне нужна исправить ошибку в индикаторе, чтобы после появления стрелки индикатора в терминале мт4 приходило уведомление Алерта в направления стрелки до начала открытие новой свечи за 10 секунд. Ошибку этого индикатора надо исправить таким образом, чтобы приходила уведомления не на открытие третьей свечи, а-на открытие второй свечи за 10 секунд до открытия
Всем привет. Нужен бот по сеточной торговле на бинанс. Шаги должны быть в процентах. Нужен множитель и макс просадка. Также нужен удобный интерфейс. Лонги должны быть выше открытия дня и шорты ниже
we seach software coder for long term work in project salary start from 1500$ per month Need develop web trading terminal for forex and crypto trading. FIX Protocol, c#, crypto API learning
Требуется сделать модуль для расчета процента от заработанной прибыли и снятие суммы со счета трейдера через MT4/MT5 Manager API. Ищем разработчика с большим опытом работы на C# и опытом работы с торговыми платформами MT4/MT5
Доработать стандартный индикатор динамического Volume/Delta/Trades Profile для платформы ATAS. POC - максимальный обьем прошедший за опреленный период времени. MPOC - максимальный обьем который чуть меньше POC(Пример скрин"POC MPOC" Необходимо чтобы индикатор мог автоматически выделять эти обьемы для Volume/Delta/ Profile Так как обьем по Delta имеет определенную специфику, и из-за того что bid/ask может меняться в
Торговый робот (стратегия) разработан для терминала Quantower. Бот скачивает историю трейдов API ключа через терминал. Язык C# Сейчас бот работает с Binance Spot и Huobi Global. Необходимо 1) отдебажить робота под новую версию терминала 2) добавить (прописать) новые коннекторы (VendorName) для работы с новыми биржами Байбит Гейт Битфайнекс Койнбейз Кракен Окх Кукойн Тоесть необходимо найти в коде
Торговый робот (стратегия) разработан для терминала Quantower. Бот скачивает историю трейдов API ключа через терминал. Язык C# Сейчас бот работает с Binance Spot и Huobi Global. Необходимо 1) отдебажить робота под новую версию терминала 2) добавить (прописать) новые коннекторы (VendorName) для работы с новыми биржами Байбит Гейт Битфайнекс Койнбейз Кракен Окх Кукойн Тоесть необходимо найти в коде

Информация о проекте

Бюджет
150 - 200 USD
VAT (25%): 37.5 - 50 USD
Итого: 187.5 - 250 USD
Исполнителю
135 - 180 USD