Постов с тегом "C#": 139

C#


Изучение TRANSAQ или QLua

Есть желание изучить TXmlConnector и QLua библиотеки для создания около рыночного проекта. Кто так же только думает об этом, но не нашел единомышленников, как говорится велком )) а т.к. перехожу на новый (для себя) язык программирования C#, то приветствуются к участию так же новички в программировании и желающие изучить тему кодинга и алготрейдинга на C# ))

Мост NinjaTrader -> OEC Trader 2

По мотивам прошлого поста.

Выбрал два пути для реализации: TCP/IP и RabbitMQ. Сейчас в процессе выбора между, но пока что флоп в пользу первого решения. От хелоуворлда текстовиков я отказался, хотя ninjatrader оказывается напрямую предлагает часть функционала реализовывать через файлы. (0_о)

Почему TCP/IP — потому что коллега пообещал на пальцах показать как это работает.
Почему RabbitMQ — ну уж ооооочень хорошо описан, для филологов.

Есть еще масса массовых масс решений. Именно в такой формулировке. Но… или задротные, или оверкил, или недоступные пока что моему левелу. Но судя по отзывам коллег, для моей реализации оба решения подходят идеально.

Кстати, похвалили за код. Типа опрятный, обложенный тестами, описанный, задокументированный… Прям аж приятно. ) Стоит напомнить, что я всерьез взялся за вожжи мягко говоря недавно. )

Вот еще бы кто подсказал простой путь к сердцу OEC API (надо при получении ответа на GET открывать/закрывать ордера, вся математика в NT). ))) Коннектор там запилить я смог, а вот ордерпостилка не получается, не смотря на примеры…

Мост NinjaTrader -> OEC Trader

Господа кодеры, прошу идейного совета, но с практическими направлениями. Есть задача портировать генерируемые стратегией в NT трейды на OEC Trader. Т.к. я сишарплю, а парни за стенкой ноудджиесят, получить у них качественный совет не получилось.

Текущее решение сделано в режиме хелоуворлда — пишем генерируемые трейды StreamWriter'ом в ТХТ, потом слушаем ТХТ файл FileSystemWatcher'ом и торгуем в ОЕС.

Когда работает одна стратежка, то все выглядит чин-чин, но ессно когда одновременно работают 2+ стратежки, то при вызове StreamWriter по концу часа несколькими идеями код матерится (файл блаблабла занят другим процессом). Делать многопоточный кастыль для передачи трейдов через ТХТ? Мне кажется это некошерно… Смотрю в сторону WCF… Но там не нашел применимых примеров. Там только калькуляторы, которые я не могу в мозгу перевернуть в то, что мне нужно.

Так вот вопрос — абстрагируясь от NT и ОЕС (они умеют обычный C# без проблем), что лучше выбрать для решения задачи? Если аргументы в пользу ТХТ+Thread, то я готов подвинуться религией. Если в сторону WCF, то пните в нормальный пример. Не калькулятор, а где через службу одна прога отправляет что-то как команду, а вторая прога глотает как команду.

( Читать дальше )

Кодинг

#region History
Первый подход к коду я совершил в 9-м классе, когда были такие черные YAMAHA в домах Юного техника (кто в курсе о чем я — плюсуем). Это был Бейсик и Турбо Паскаль. Но тогда я понял что «это не мое», и забыл.

Второй подход был в 2010-м году, когда я с коллегой решил запилить первого робота. Он пилил, я придумывал. ) Ессно, всё ничего не получилось. ) Хотя был получен бесценный опыт, пройдены поля граблей и на лбу появилась титановая пластина. Тогда я научился более менее читать код, но попытки что-то закодить приводили к тому, что я не мог толком понять даже как появляется этот долбанный Hello World.

Потом был 2012-й, тогда я всерьёз сошел с ума, и написал целых три программулины. Одна умела парсить тики в нужные ТФ, вторая — это знаменитый All Prices, третья была… Уж и не вспомню. Сказать что этот код тогда написал я — нет. Меня пытался выучить этому ремеслу один очень хороший человек, и я буквально под диктовку писал код. Естественно, без его сопровождения I could barely make it to Hello World. Зато научился делать кнопочки в

( Читать дальше )

Производительность роботов на C# (NinjaTrader).

    • 23 марта 2017, 00:26
    • |
    • Dzam
  • Еще

Производительность роботов на C# (NinjaTrader).

 Производительность роботов на C# (NinjaTrader).
Перед тем, как использовать в своем роботе переменные типа Dictionary или List, если у вас производится частое обращение к ним, обязательно проведите анализ на производительность. Вот мой кусочек анализа.

Для примера описываем переменные:

private List<KeyValuePair<int, string>> listArray;
private Dictionary<int, string> dictArray;

По сути будем иметь набор связок Integer и String. Содержание в данном случае не особо важно. Важно то, что это содержание одинаково в обеих переменных.
А теперь просто заполним эти переменные одинаковыми записями:

// Переменные для замера времени выполнения
sw1 = new Stopwatch();
sw2 = new Stopwatch();

// Инициализация переменных
listArray = new List<KeyValuePair<int, string>>();
dictArray = new Dictionary<int, string>();

// Стартуем замер производительности
sw1.Start();
for (int i = 0; i < 1000000; i++)
{
//Добавляем переменную в массив
    listArray.Add(new KeyValuePair<int, string>(i, "test"));
}

// Останавливаем замер производительности
sw1.Stop();
// Выводим результат
Print("List: " + sw1.ElapsedMilliseconds);
// Очищаем список
listArray.Clear();


// Стартуем второй счетчик производительности
sw2.Start();
// Запускаем второй цикл
for (int i = 0; i < 1000000; i++)
{
    dictArray.Add(i, "test");
}

// Останавливаем счетчик
sw2.Stop();
// Выводим результат
Print("Dictionary: " + sw2.ElapsedMilliseconds);


( Читать дальше )

C# Plaza2 вопрос по ошибкам

Всем привет.

Дописал в плазовский коннектор получение данных с фондового рынка.
Но начала появляться мистика...
Вечером биржа отключает потоки фондового рынка.
После отключения потоков фондового рынка, я пытаюсь их восстановить, а вдруг ошибка в слушателе.
Если приложение работало долго, например, сутки, то иногда(!) при восстановлении слушателей,
возникает блокировка основного потока, на несколько секунд. Что приводит к еще массе проблем.

Сталкивался кто с подобной ситуацией ?
Подскажите, а то голову уже сломал…

Предновогоднее обновление QuikSharp

Хочу поделиться новостью о предновогоднем обновлении библиотеки QuikSharp.

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

Берем тут: https://github.com/finsight/QuikSharp

QuikSharp — это динамически подключаемая библиотека, для обеспечения связи ваших роботов, написанных на C#, с терминалом Quik.

QuikSharp — это «Open source-проект», который развивается благодаря участию других пользователей. Отдельный «респект» хочу выразить автору проекта, т.к. это именно то, что я долго искал когда понял, что уперся в некоторые существенные ограничения QLua.
Легче всего с этой библиотекой будет освоиться тем, что уже пробовал реализовать свои торговые стратегии на QLua, т.к. большинство функций взяты именно из QLua. Но по сравнению с QLua, мы получаем значительно большие возможности, в том числе по производительности. Когда у меня количество одновременно запущенных роботов на QLua превысило десяток, то я столкнулся с очень большими проблемами производительности. Квик стал жрать память в каких-то неимоверных объемах, а загрузка ЦП выросла до 80% (в спокойное время). Перейдя на QuikSharp (правда, перед этим пришлось заняться изучением C#) я одномоментно решил большинство проблем производительности, получил удобный инструмент для создания пользовательских интерфейсов, а также более удобное средство разработки самих роботов. Сейчас у меня одновременно крутятся в реальном времени более 4-х десятков роботов (если считать отдельным роботом сочетание ТС и конкретного инструмента), и при этом я не испытываю НИКАКИХ проблем с производительностью (терминал и роботы крутятся на ноутбуке).

( Читать дальше )

....все тэги
UPDONW
Новый дизайн