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

C# Bibliothèque Scripts C#

Tâche terminée

Temps d'exécution 28 jours
Commentaires du client
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!

Spécifications

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

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


Répondu

1
Développeur 1
Évaluation
(336)
Projets
620
38%
Arbitrage
39
23% / 64%
En retard
93
15%
Gratuit
2
Développeur 2
Évaluation
(5)
Projets
6
17%
Arbitrage
0
En retard
1
17%
Gratuit
3
Développeur 3
Évaluation
(21)
Projets
35
54%
Arbitrage
8
63% / 38%
En retard
1
3%
Gratuit
4
Développeur 4
Évaluation
(251)
Projets
402
38%
Arbitrage
82
41% / 20%
En retard
70
17%
Travail
Commandes similaires
Требуется сделать модуль для расчета процента от заработанной прибыли и снятие суммы со счета трейдера через MT4/MT5 Manager API. Ищем разработчика с большим опытом работы на C# и опытом работы с торговыми платформами MT4/MT5
Пример индикатора берем с прикрепленного файла, исходника к сожалению нет, есть входные параметры и собственно сам индикатор для сравнения работы. Индикатор должен определять как дивергенции так и конвергенции , иметь изменяемые входные параметры. Результатом работы будет исходный код + скомпилированный файл Выслушаю все варианты разработки
1) Необходимо полностью изучить алгоритм работы индикатора. У индикатора есть логика каким образом видит свечи на графике и принимает решения отправлять уведомления или нет. На основании этого и нужна отталкиваться, чтобы решить Т3. 2) НЕОБХОДИМО СДЕЛАТЬ ТАКИМ ОБРАЗОМ, ЧТОБЫ СУЩЕСТВУЮЩИЙ ИНДИКАТОР ВЫДАВАЛ СИГНАЛ НА 3 СВЕЧУ КАК В ОРИГИНАЛЕ, ЕДИНСТВЕННОЕ НУЖНА ИЗМЕНИТЬ ИНДИКАТОР ТАКИМ ОБРАЗОМ, ЧТОБЫ ИНДИКАТОР ОПЕРЕДИЛ
У меня не сложная задача! Мне нужна исправить ошибку в индикаторе, чтобы после появления стрелки индикатора в терминале мт4 приходило уведомление Алерта в направления стрелки до начала открытие новой свечи за 10 секунд. Ошибку этого индикатора надо исправить таким образом, чтобы приходила уведомления не на открытие третьей свечи, а-на открытие второй свечи за 10 секунд до открытия

Informations sur le projet

Budget
150 - 200 USD
TVA (25%): 37.5 - 50 USD
Total: 187.5 - 250 USD
Pour le développeur
135 - 180 USD