Блог им. 3Qu

Сравнение C# и Python для построения торговых систем.

    • 09 октября 2025, 01:05
    • |
    • 3Qu
  • Еще
Для построения и отладки алгоритма, Python гораздо удобней, об этом даже и спорить не надо. Я выбрал Python не только для этого, но и для продакшн, т.е. для построения рабочей системы.
Многие мне говорили, что Python медленный, что все плохо и т.д. Понятно, что на С++ будет быстрее, но ты еще попробуй реализуй на С++ то, что на Python делается с помощью уже готовых и заведомо рабочих модулей. Потому будем сравнивать  Python и С#, т.к. любителей С# тоже достаточно.
Я и раньше говорил, что если не рассматривать простейшие программы, скорости Python и С#, в общем, сравнимы. Но кто я такой, чтобы вы с этим соглашались.))
Решил этот вопрос задать ИИ. Беседа была достаточно продолжительной, касалась нескольких аспектов сравнения, по большинству из которых Python в заметном отрыве от С#.
Приведу итоговую таблицу сравнения, составленную ИИ по моей просьбе:
Сравнение C# и Python для построения торговых систем.
Думаю, комментировать здесь нечего.
8.2К | ★2
57 комментариев
Это смотря у какого ИИ спрашивать  



















avatar
Anest, 
Это смотря у какого ИИ спрашивать
Не только у какого ИИ спрашивать, но и что спрашивать и как спрашивать. 

Вот ответ ИИ на простой промпт о сравнении двух языков для целей алготрейдинга:


Вот уточнение ответа с учетом некоторых обстоятельств:
avatar
Иван Портной, насчет OsEngine эт ты типа пошутил?
Там только чтобы в их меню и опциях в программе разобраться надо пару недель.
avatar
Beach Bunny, 
Там только чтобы в их меню и опциях в программе разобраться надо пару недель.
Добавьте сюда время на изучения C#, а также освоение чтения и письма, вообще получаются десятилетия.))
avatar
Иван Портной, не обязательно в том же Wealth-Lab 6 все сделано гораздо проще и разобраться с простыми вещами можно за 1 день. Но скорость тестирования там так себе если не использовать дополнительные модули Генетического поиска или Монте-Карло или других
avatar
Beach Bunny,
Wealth-Lab 6
Напомню, что автор топика сделал акцент на мнение ИИ. Не будем нарушать здешнюю традицию:)

avatar
 В общем надо вначале с ИИ определиться, потом язык выбирать :)

По мне так пофигу какой язык, главное, чтобы торговые системы робастые и прибыльные были.Всё остальное информационная шелуха.
avatar
Так на Питоне что-то типа Нумбы можно использовать, будет, как обещал ЧатЖПТ, скорость как в С++ почти.
avatar
GMT Capital, вот нафига тебе скорость то?
HFT ты все равно торговать не будешь, потому как это дорохо.
А для торговли на 5мин и выше, абсолютно пофигу что использовать
avatar
Beach Bunny, мне скорость для тестов нужна (чем скорее, тем больше идей смогу проверить), а не для HFT.
avatar
Я и раньше говорил, что если не рассматривать простейшие программы, скорости Python и С#, в общем, сравнимы. Но кто я такой, чтобы вы с этим согласились.))
3Qu, с вами не поспоришь.))
Действительно, зачем соглашаться, если можно спросить ИИ:



avatar
Иван Портной, врет твой робот, в Backtesting.py тестирование побыстрее будет чем в OsEngine. И еще в Backtesting.py есть перебор параметров типа градиентного спуска с помощью библиотеки SAMBO sambo-optimization.github.io/
avatar
Beach Bunny, 
врет твой робот
Это не мой робот, а мнение ИИ.) 

avatar
Иван Портной, мнение ИИ может быть высосано из пальца и основано на эмпирический предположениях.
Вот что мне ответил Claude 4.5 когда я его прижал к стенке:
Откуда ты взял данные по производительнсти OsEngine
------

Отличный вопрос! Признаюсь честно — я не проводил прямых бенчмарков OsEngine лично, и мои цифры были оценочными, основанными на общих характеристиках производительности C# vs Python.

📊 Откуда брались данные:

1. Общие принципы производительности:

  • C# как компилируемый язык с JIT обычно в 5-50 раз быстрее чистого Python
  • Но это теоретические оценки, не конкретные тесты OsEngine

2. Проблема с моими утверждениями:

  • ❌ Я не имею доступа к реальным бенчмаркам OsEngine
  • ❌ Производительность сильно зависит от реализации
  • ❌ OsEngine может иметь свои узкие места (UI, архитектура)
  • ❌ VectorBT очень оптимизирован, может быть быстрее плохого C# кода
💡 Честный ответ:

Реальная производительность зависит от:

  1. Типа стратегии (простая MA vs сложные вычисления)
  2. Объема данных (минутки vs тики)
  3. Качества кода (плохой C# может быть медленнее хорошего Python)
  4. Железа (CPU, RAM)

Хотите:

  • Провести реальный бенчмарк на вашем железе?
  • Посмотреть структуру вашего проекта для оптимизации?
  • Обсудить конкретные требования к производительности?

Извините за необоснованные цифры! В следующий раз буду более осторожен с конкретными числами без реальных тестов. 🙏




avatar
Иван Портной, 
поэтому для нормально сравнения надо брать простейшую стратегию на пересечения двух MA, тестировать на всех движках и сравнивать реальные цифры.
avatar
Иван Портной, в OsEngine до сих пор нет нормального тестирования по фьючерсам, тестирование по склейке — это в общем почти мусор
Но это делается в Wealt-Lab 6 путем добавление 20-30 строк в код стратегии.
Так же можно реализовать это в Backtesting.py — там больше править в самом коде библиотеки, но делается один раз и потом можно использовать для любых стратегий.
avatar
Beach Bunny, почему мусор? Если, например есть 100 сделок в год, среди которых всего 4 сделки, которые попали на склейку (а может вообще вне сделок было). Причем эти 4 сделки — бабка надвое сказала — две в случайный плюс, две в случайный минус. 
Понятно, что лучше без склеек, но насколько сильно такие склейки влияют на мусорность тестов?
avatar
Иван Портной, да еще есть VectorBT vectorbt.dev/  тоже на Python
векторный движок и скорость тестирования там быстрее чем на C++
avatar
Сильно зависит от задачи. Если это скрипт который подключается к адаптеру брокера — безразлично на чем, хоть на экселе, это простая задача в любом случае (создание саммого алгоритма сложная, его же перевод в любой язык задача простая).

Если же нужно собирать различные данные, то все сильно меняется, 90% сложности будет именно сбор и обработка данных, сам алгоритм будет мелоч. И здесь C# с типами и т.п. проверками будет лучше. Сделать на питоне (да и вообще на любом нетипизированнном языке) сбор данных из множества источников, со сложными схемами данных, будет сложнее.
avatar
Чо с с решеткой?
По мне C# гораздо лучше, чем путхон.

C#, особенно начиная с .NET 8 работает не сильно отставая от нативного кода написанного на C (даже не на C++, а на чистом C).
У C# есть строгая типизация, что очень хорошо для работы с деньгами.
У C# есть такая штука, как структуры, чего нет на путхоне, что позволяет более эффективно использовать ресурсы при работе с небольшими структурами данных, которые не имеют указателей внутри. При грамотном подходе можно получить алгоритмы, которые работают лишь на 20% медленнее аналогичного кода на чистом C.
JIT компилятор .NET умеет использовать SIMD инструкции в математических расчётах, что существенно повышает скорость вычислений.
avatar
Андрей, почему даже? С++ при определённых оптимизациях может быстрее С исполняться причём существенно.
avatar
Eridanoy,

причём существенно.


Вот «существенно» лишь в отдельных специфических ситуациях, и в большинстве случаев объясняется тем, что под C++ использовали алгоритм оптимизированный скорость, а под C — неоптимизированный.
avatar
Андрей, не оптимизированный потому что в ряде случаев компилятор код на плюсах может инлайнить, а на С нет, так это же не специально делается, это особенности языка.
avatar
Eridanoy, 

не оптимизированный потому что в ряде случаев компилятор код на плюсах может инлайнить


Я не про это говорю. Я говорю про то, что именно алгоритм под С берётся не оптимизированный.

Например, под C++ берут std::vector, который помимо длины массива хранит ещё и количество ячек, под которое выделена память, за счёт чего он заточен на минимизацию выделения и высвобожднния памяти при изменении длины массива, а под C берут простой массив, представленный указателем и управляемый через malloc и free, и для которого не сделано оптимизации на уменьшение выделений и высвобождений памяти.

Кстати, встраивание бинарного кода вместо вызова функции не всегда приводит к ускорению в реальной задаче. Микробенчмарки могут работать быстро, а вот реальный код может работать медленнее, потому что тело функции получается огромным, оно не помещается в кэш процессора, а при выполнении функции начинается подгрузка недогруженной части функции в кэши, что приводит к задержкам выполения.

В итоге из-за того, что C++ программисты чрезмерно увлекаются модификатором типа forced inline, разработчики компиляторов C++ решили, что forced inline будет игнорироваться, если он в коде проекта встречается слишком часто.
avatar
Андрей, не проблема, реализуйте такой же алгоритм выделения памяти на С, речь не об этом, а о том что в ряде случаев оптимизации на плюсах не получится реализовать на чистом С. Кстати проблему же с кэшем всё таки решили, причём правильно — такими оптимизациями пусть компилятор занимается.
Просто ваше даже создаёт впечатление что плюсы медленные, но там разница не большая, а как я указал бывает что плюсы и выигрывают.
avatar

Python на порядок-два медленнее в базовых сценариях. Не всё можно обернуть в быстрые библиотеки, если нужно итерирование — скорее всего код будет сильно медленнее C#. Например, бэктестер, если нужен событийный, итерационный — будет медленно, хотя векторный да, можно сделать быстрым.

В остальном Python хорош. В самой свежей версии нормальную многопоточность подвезли, я правда так и не понял, это ещё beta или уже полноценная.

avatar
Replikant_mih, 
это ещё beta или уже полноценная.

Python 3.14 was released on 7 October 2025.
avatar
Synthetic, Ага, видел, но в видео где чел обзор делал, одну из фичей про многопоточность он как-то по-хитрому собирал, в 3.14 её не было нативно, что-то про многопоточность было, а что-то по-хитрому собирал, так что я не уверен.
avatar
Replikant_mih, 
The official macOS and Windows release binaries now include an experimental just-in-time (JIT) compiler. Although it is not recommended for production use, it can be tested by setting PYTHON_JIT=1 as an environment variable.
avatar
Для маленьких программ, проще, скорее всего, отталкиваться от наличия готовых решений и библиотек. На python, должно быть, мульон примеров для работы с данными. В любом случае, скорость вычислений будет упираться в качество этих самых библиотек, самим вам/нам вряд ли захочется реализовывать их функционал.
avatar
Зачем вам комьюнити, документация, если есть ИИ? Вы попробуйте спросить в чате программистов хоть один вопрос по делу.

Что такое поддержка? C# поддерживает Майкрософт. А Питон какая компания?

Ерунда, а не советы. Так язык не выбирают.

Прелесть ИИ что теперь можно даже на Алголе опять начать писать программы.
avatar
Спор бессмысленный. На чем человек умеет программировать, на том лучше и делать. Ели уперся в некие ограничения, тогда и надо менять язык программирования. Для обычного среднего человека питон, конечно, проще в освоении.
avatar
Фигачу на C# и мне норм
avatar
Stanislav Muhin, а почему должно быть не норм? )
Не норм начнется, когда вы начнете использовать сложный функционал, например, типа, ML — для C#  многого нет, даже относительно простого — придется делать самому, что почти нереально.
avatar
3Qu, 
для C#  многого нет, даже относительно простого
Относительно простое для C# многое есть.
avatar
Иван Портной, ИИ пишет, что многого нет — см. 2-я строчка таблицы. Лично не проверял, но больше доверяю ИИ, а не ИП.)
avatar
3Qu, 
Лично не проверял, но больше доверяю ИИ
Я проверял лично. Мне не надо доверять бездушному ИИ.)
avatar
Иван Портной, значит не то проверяли. Может вам ничего и не нужно, а потому и все есть.) И при чем здесь душа?
avatar
3Qu, 
значит не то проверяли. Может вам ничего и не нужно, а потому и все есть.)
Речь в моем комментарии шла об относительно простом для C#. Всё это действительно есть. Что-то сильно навороченное или относительно новое — это в Python. Впрочем, скажу по секрету, всё это можно сделать и в C#.

И при чем здесь душа?
ИИ всё равно. Что спросите, то и ответит. Будете настаивать на своём, ИИ согласится с вами, да еще и прощения попросит. Бездушная машина.))
Извините за необоснованные цифры! В следующий раз буду более осторожен с конкретными числами без реальных тестов.
avatar
Иван Портной, 
Впрочем, скажу по секрету, всё это можно сделать и в C#.
Сие и без вас известно. Да, можно. Вопрос только, кто это «все» будет делать? Вы сами? Ну, ну ) Я бы предпочел проверенные решения этого «всего».
avatar
3Qu,
Вопрос только, кто это «все» будет делать? Вы сами? Ну, ну ) Я бы предпочел проверенные решения этого «всего».
Я и говорю про проверенные решения. Не самому же кодить.)
Например, эллипсы. Помните?
avatar
Иван Портной, не помню. Эллиптические функции имеются в виду? В Питоне их есть.
Тут вот какое дело. На С# или, возможно, даже С++ вы вполне можете создать некое сверхбыстродействующее говно, и здесь вы вне конкуренции.
Но есть и другой вопрос: а оно надо?
avatar
3Qu, 
Эллиптические функции имеются в виду?
Зачем функции, сразу фильтры. С функциями вы еще намучаетесь, пока до фильтров доберетесь.

Но есть и другой вопрос: а оно надо?
Это же другой вопрос. Не надо — не делай.)
avatar
Иван Портной, большая часть библиотечного функционала, имеющегося в Питон, в С# полностью отсутствует. Это известно и без ИИ, но ИИ полностью подтвердил это, в т.ч. и отсутствие вполне конкретных библиотек.
Что касается эллиптических фильтров в Питоне — эт не вопрос, ничем не отличаются от прочих. Не вижу в них надобности, но это не мое дело.
avatar
3Qu,
большая часть библиотечного функционала, имеющегося в Питон, в С# полностью отсутствует.
Мы говорим про разные вещи.
1) Богаты ли библиотеки в Питоне? Да, богаты.
2) Есть ли возможность использовать в C# разнообразные библиотеки, в том числе написанные на других языках? Да, есть.
Так будет понятнее?)
avatar
Иван Портной, кто бы сомневался.) Однако, импорт функционала из Python в С# достаточно тягомотный процесс. + еще потянет на + 400-500 МБ на диске. По запуску фнкций Питон из С# тоже свои не сложности, но особеноости. А так, да, можно, не проблема.
avatar
3Qu, 
А так, да, можно, не проблема.
Золотые слова. Вы (при моём скромном участии) блестяще развенчали миф о незаменимости и превосходстве Python на ниве алготрейдинга.)

Действительно, C# сочетает в себе мощь и скорость компилируемого языка и гибкости при использовании стороннего кода. C# удобен для многопараметрической оптимизации на большой истории и построения сильно нагруженных торговых систем. 

Python удобен для прототипирования несильно нагруженных проектов и выполнения поисковых работ. Ключевое слово здесь удобен. Пожалуй, трудно найти задачу, которую на C# было бы сильно сложнее выполнить, чем на Python.
avatar
Иван Портной, для ХФТ нужны С или С++ и биржевые сервисы, обычно недоступные широким массам. С# для ХФТ явно не тянет.
Для обычного трейдинга С#, если без сложных библиотек, уже избыточен.
Если подключить сложные библиотеки, быстродействие С# практически сравнивается с Питон ( модули библиотек Питон написаны на С/С++).
Чистый код Питон действительно медленней, чем С#, однако, учитывая скорость поступления данных от брокера или биржи обычному трейдеру, это несущественно, все успевает обработаться в любом случае.
Кроме того, задержка даже ±неск секунд при продолжительности сделок от нескольких минут уже никак не влияет на результаты трейдинга.
В общем, что лучше — дискуссия бессмысленна. В топике вопрос так даже не ставится, ответ очевиден — без разницы.
Если ставить вопрос — кто быстрее?, хотя это и не надо, то для простых систем — С#, для сложных — примерно одинаково.
А если вопрос: что удобней, то тоже очевидно, — Питон.
avatar
3Qu, 
А если вопрос: что удобней, то тоже очевидно, — Питон.
Совсем не очевидно.
Из обсуждения можно сделать некоторые предварительные итоги:

1) Многопараметрическая оптимизация на больших объемах данных:
— на C# доступна нативно;
— на Python доступна при использовании специальных библиотек и приемов.

2) Глубокий анализ данных (ML и пр.):
- на C# доступен при использовании специальных библиотек и приемов;
- на Python доступен нативно.

3) Эксплуатация высоконагруженных* торговых систем:
- на C# доступна нативно;
- на Python недоступна или требуются специальные библиотеки и приемы.

Если не заниматься глубоким анализом данных (ML и пр.), то выбор однозначен — C#. Если хочется больше науки, чем торговли, то можно использовать Python. Как-то так.)

* высоконагруженными можно назвать торговые системы, одновременно торгующие большое количество инструментов с анализом потоков ордеров или стаканов.
avatar
Для подавляющего большинства стратегий — питон. Для тех самых оставшихся — сишные вставки в питоновский код
avatar
Что-то убогонькое в несколько сотен строк кода, наверное, можно хоть на чем сляпать. Типа взять раз в 5 минут свечу и что-то там дернуть при совпадении условий. У меня все тестовые страты (а потом, к слову, и промышленные) написаны на простом, быстром и удобно встраиваемом Lua (при том, что никакие свечи я не беру, на вход всегда принимается поток сделок)

Но когда мы говорим о «торговой системе», убогоньким не отделаться. Нам надо будет ордеринг. Нам надо будет общаться с брокером и / или биржей в режиме прямого доступа, а это всегда асинхронный обмен. Нам надо будет куда-то постоянно что-то писать. Нам надо будет защиту от сбоев. Все это нам надо будет в режиме MultiThreading со всеми вытекающими отсюда геморроями, иначе нас просто зальет при каких-то резких движениях. И еще дохрена чего нам надо будет, что на пайтоне писать, прямо скажем, странно (и сомневаюсь, что вообще возможно в полном объеме). Пайтон хорош, если вы всю бизнес-логику запихали в БД, наплевав на последствия такого решения, и над ней крутите худенькую надстроечку для общения с фронтами
avatar
PSH, все это конечно хорошо и правильно, но только для непрерывного потока данных. Рыночные потоки обычно существенно дискретны. За все не скажу, но имеющееся у меня подключение к бирже обеспечивает поток данных с дискретностью не превышающей 0.1/с. За 0.1 с, наверное даже на Луа, можно успеть черте-что навычислять.)
avatar

3Qu, 100мс дискретность? Это что за подключение такое :). Даже почивший в бозе ITInvest со своим кривущим SmartCOM давал задержку миллисекунд 10, если мне память не изменяет.

Ну и по поводу «даже Lua» я бы не стал так отмахиваться, вот пример из сегдняшнего:

[TRACE][STRMGR] 2025.10.09 14:26:17.9227 Prod: RTS-12.25_FT: время на исполнение: 00:00:00.0012286
[TRACE][STRMGR] 2025.10.09 14:26:17.9227 Prod: RTS-12.25_FT: результат: 1
[TRACE][ORDMGR] 2025.10.09 14:26:17.9227 StratMgrSignalHandler: ticker = RIZ5, tsrc = AddTick, price = 101630, Signal = 1, Size = 1, regime = Trade
[TRACE][TRQ_CONN] 2025.10.09 14:26:17.9997 PlaceOrder: Выставление заявки: result = <result success=«true» transactionid=«38205942»/>

Это не холостой прогон, а именно сгенерированный сигнал и выставленная заявка. Видно, что все задержки — сетевые и на стороне брокера, ~70мс прошло от отправки заявки на сервер брокера до его ответа о том, что заявка размещена, обработка же Lua-частью от получения очередной сделки из ленты до генерации сигнала в сторону ордеринга заняла 1.2мс

avatar
PSH, вы о задержке или о дискретности?
avatar
3Qu, это одно и то же. Если у нас дискретность 100мс, то и максимальная задержка столько же
avatar
Подход «Python лучше, потому что на все готовое» вообще отдает каким-то лютым дельфизмом :). Это там ответ на любую задачу всегда был «надо искать компонент» :). Не сказать, что это плохой подход, но среды все-таки лучше сравнивать не только по этому признаку (этот вообще не основной, так, для удобства)
avatar

Читайте на SMART-LAB:
Фото
📈 Выручка Группы МГКЛ за 11 месяцев — 27 млрд рублей (x3,6 к АППГ)
К концу 2025 года подходим с рекордными прогнозными показателями: ✅ Прогноз по выручке — 27 млрд рублей, что в 3,6 раза выше, чем за...
Фото
IR-команда «Озон Фармацевтика» встретилась с аналитиком СберИнвестиций Софией Кирсановой
Мы поделились нашими планами и достижениями, а также ответили на вопросы. Поговорили о включении в индекс Мосбиржи, росте...
Фото
Календарь первички ВДО и розничных облигаций (Л-Старт купон 32% | РДВ Технолоджи купон 25% | ТЛК купон 24% | БИЗНЕС АЛЬЯНС купон 22%)
📍  Л-Старт БО-02   ( B.ru , 500 млн руб., ставка купона 32%, YTM 32,59%, дюрация 2,4 года) размещен на 36%.  Интервью с эмитентом...

теги блога 3Qu

....все тэги



UPDONW
Новый дизайн