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

C# Bibliotecas Sripts C#

Trabajo finalizado

Plazo de ejecución 28 días
Comentario del Cliente
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!

Tarea técnica

Создать следующую консольную программу на 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), это важное поле

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


Han respondido

1
Desarrollador 1
Evaluación
(336)
Proyectos
620
38%
Arbitraje
39
23% / 64%
Caducado
93
15%
Libre
2
Desarrollador 2
Evaluación
(5)
Proyectos
6
17%
Arbitraje
0
Caducado
1
17%
Libre
3
Desarrollador 3
Evaluación
(21)
Proyectos
35
54%
Arbitraje
8
63% / 38%
Caducado
1
3%
Libre
4
Desarrollador 4
Evaluación
(251)
Proyectos
402
38%
Arbitraje
82
41% / 20%
Caducado
70
17%
Trabaja
Solicitudes similares
1) Необходимо полностью изучить алгоритм работы индикатора. У индикатора есть логика каким образом видит свечи на графике и принимает решения отправлять уведомления или нет. На основании этого и нужна отталкиваться, чтобы решить Т3. 2) НЕОБХОДИМО СДЕЛАТЬ ТАКИМ ОБРАЗОМ, ЧТОБЫ СУЩЕСТВУЮЩИЙ ИНДИКАТОР ВЫДАВАЛ СИГНАЛ НА 3 СВЕЧУ КАК В ОРИГИНАЛЕ, ЕДИНСТВЕННОЕ НУЖНА ИЗМЕНИТЬ ИНДИКАТОР ТАКИМ ОБРАЗОМ, ЧТОБЫ ИНДИКАТОР ОПЕРЕДИЛ
У меня не сложная задача! Мне нужна исправить ошибку в индикаторе, чтобы после появления стрелки индикатора в терминале мт4 приходило уведомление Алерта в направления стрелки до начала открытие новой свечи за 10 секунд. Ошибку этого индикатора надо исправить таким образом, чтобы приходила уведомления не на открытие третьей свечи, а-на открытие второй свечи за 10 секунд до открытия
Всем привет. Нужен бот по сеточной торговле на бинанс. Шаги должны быть в процентах. Нужен множитель и макс просадка. Также нужен удобный интерфейс. Лонги должны быть выше открытия дня и шорты ниже

Información sobre el proyecto

Presupuesto
150 - 200 USD
IVA (25%): 37.5 - 50 USD
Total: 187.5 - 250 USD
Para el ejecutor
135 - 180 USD