На какой язык программирования сделать упор
- 28 октября 2020, 16:03
- |
- А.С.
Добрый день. Меня зовут Алексей, и я разработчик, т.е. будущий разработчик торговых роботов.
Собственно почему я пишу здесь:
Меня интересует какой язык программирования начать изучать углубленно, технологии, фреймворки может быть, чтобы быть востребованным как разработчик торговых алгоритмов в финансовой сфере. Я бы с удовольствием работал в Unitedtraders, потому что знаю точно, они этим занимаются и даже своего робота как то выставляли на ЛЧИ, и делали сумасшедшие проценты прибыли. Но дело не в том, как они это сделали. В том что я хочу развиваться в этой сфере. Я уверен что они не одни, и есть много других фирм, банки да и просто инвестиционные компании, крупные компании проп трейдинга конце концов.
На текущий момент мои навыки таковы: я знаю что такое программирование (база), что такое ООП тоже знаю, да и его принципы могу перечислить наизусть. Но пока не решил куда двигаться в JAVA или С# окончательно. Мне нравиться JAVA за ее гибкость и opensource. плюс можно переметнуться в android разработку(ха-ха, мало ли вдруг все таки, как окажется не рожден для трейдинга — даже алгоритмического).
Но это все для того, чтобы писать какие то платформы торговли. Обобщенные. Ну или платформы для стратегий.
Еще рынку нужны узкоспециализированные крайности. Одна крайность — это C++, вторая крайность — Python, R и тд. Обе краности решают совершенно разные задачи. Вторая крайность больше для квантов.
Тут нужно для себя решить куда шагать.
ЗЫ и у C# есть проблемы с математикой и на это нужно делать поправку
Операции с float определены стандартом.
Предусмотрено несколько вариантов округления — все они правильные. Вариант С# идет в стандарте первым и по ряду причин считается предпочтительным.
В стандарте сказано буквально следующее:
«The roundTiesToEven rounding-direction attribute shall be the default rounding-direction attribute for results in binary formats. The default rounding-direction attribute for results in decimal formats is language-defined, but should be roundTiesToEven.»
Более-менее современные языки стараются придерживаться стандарта.
docs.microsoft.com/ru-ru/dotnet/api/system.math.ceiling?view=netcore-3.1
Math.Round(2.5d, MidpointRounding.AwayFromZero);
Проблема в правильной системе алгоритмов. Т.е прибыльной системе)))
Сам сейчас туда полез разбираться, понадобилось, и теперь реально не понимаю, зачем вообще сейчас какой то доп серверный язык, буквально все можно сделать
1) С++ — зная его, вы без проблем будете программировать на C# и Java.
2) C# + .NetCore + Visual Studio — решите практически любую задачу.
3) Java — 20 лет как потухает. Только серверные приложения для банков.
4) Python — не юзал, но большой спрос на программистов.
5) SQL — это только баз данных.
И в конце концов LUA, не юзал, но как бы большинство роботов и плагин-ов для торговых систем на нем пишут.
умение торговать
и умение программировать
если торговать не умеешь, то никакой робот тебе не поможет...
с другой сторон… если умеешь торговать, то уж прогера как нибудь найдешь
зашел тут ко мне вечерком на бокальчик красненького приятель, СЕО программистской лавки, послушал все мои мытарства с кодом, терминалом и прочим и говорит: так а чего, все же просто, надо же написать нормальное API, а дальше шлите команды купить/продать. Я говорю, так напиши, Саша. Человек задумался.
так там клоуны, как и во всей брокерской и алго индустрии пишут.
А приятель мой, это бывший Oracle Russia :)
так о том и речь, что профессиональным командам эта затея даром не нужна, а тем, кому такая затея нужна, профессиональную команду не собрать в принципе, наберут кодеров по объявлению и выпускают в продакшн лютый треш.
Возможно есть исключения, команды, пишущие для себя что-то узкое и живое, не спорю.
Так у кого топик-стартер собирается работать кодером? И самое главное, какое, черт побери, это отношение имеет к алготрейдингу?
Python, Lua — это скриптовые процедурные языки. На них хорошо конфигурационную логику писать. Ну или опять же недороботов про пересечение МА и прочую галиматью.
Вообще, если чуть-чуть подумать, то вариантов, кроме как C/C++, просто не остается.
Хорошая развернутая статья на эту тему здесь https://smart-lab.ru/blog/571625.php
C/C++ это конечно мощно, а как же платформа stocksharp, мне казалось у нее достаточно богатый функционал. в том числе торговля через коннекторы к бирже
Где-то видел сравнительный тест прог на С++ и Питон — время исполнения практически одинаково.
Если честно, вообще с трудом представляю какой-нибудь бэкенд на python. И уж совсем не представляю, зачем бы это кому-нибудь понадобилось
Массив методом пузырьков можно и на python сортировать, он с этим, разумеется, справится и, возможно, не медленнее C / C++
По поводу «подключается по C-API» — я там писал выше, что на python / Lua хорошо высокоуровневую конфигурационную логику писать, чтобы ядро не перекомпилировать постоянно. Собственно, так их и используют
Человек просто спросил «на чем писать торговых роботов». Я не представляю, на чем их можно писать, кроме как на C/C++. А вот конфигурационную логику (эти самые сценарии обработки) вынести в Lua / python слой. Тогда, возможно, получится симпатичненький бэкенд. А к нему потом на Java написать «панель управления» (фронтенд), чтобы можно было дома в кнопочки тыкать :)
PSH, кто бы ни был, но ты — голова! Даже коты это поняли..
Ив Ив, зависит от задач.
В той задаче, которую описал я, не вижу никаких проблем реализовать фронтенд на Java
Но это уже спор ради спора, конечно, за детали можно рубиться хоть неделю, когда в целом понимание общее :)
если это конкретно алгоритмы когда и сколько купить\продать, то нужно топить в сторону именно алгоритмов, моделей и т. п., а не яп. в итоге вы разрабатываете алгоритм, а специально обученный персонаж делает по нему робота со всеми нужными наворотами.
В первую очередь это memory-safe языки, а как организовано множественное наследование это вообще мелочи.
По-моему лучше учить польский и драить там улицы. Ну или баранку мусоровоза крутить, или на заводик польский.
60к за C++/Python финтехе. Это как-то маловато. Хотя если норм работать мб до 700 евро зп поднимут. Другое дело!
hh.ru/vacancy/39738913
есть кванты — это математические тупаки с самомнением. некоторые из них не могут решить школьную задачу по математике (привет мэдкванту). теоретически они должны искать неидеальности на рынке и предлагать алгоритмы для их эксплуатации. обычно используют разновидности бэйсика: питон, R, и прочие скриптовые языки. раньше был моден перл. но мода меняется, а тупость квантов нет.
есть кодерки, они понятно пишут код, если в приличных конторах, то по техзаданию. им похеру какой там алготрейдинх. они на другом уровне работают: всякие там сокеты, пакеты, стейтмашины, буферы и прочий кодерский жаргон.
можно быть «всё в одном флаконе» — это когда ты один и для себя делаешь.
моё имхо: С/С++ главный язык планеты Земля.
все эти джавы, си шарпы и прочий распиареный шлак — лишь мода. онли сипласплас — вечен.
пойдёшь в кодерки или кванты — будь готов к нервному истощению и перманентной депрессии.
успехов.
Трейдинг — это не про программирование.
Трейдинг — это про математику.
Программирование наступает в самой последней фазе.
И в большинстве случаев не особо важно на чём писать.
Важно что писать.
Короче трейдинг — это про поиск и тестирование стратегий.
Я вот сейчас в таком работаю, в основном пишем на котлине, всё равно ж компилируется под JVM и можно использовать всю экосистему джавы.
Но это не отменяет того что джава никуда не уходит.
Если говорить именно про алготрейдинг, то можно выучить и Джаву и C# (в концепте между ними очень мало отличий) и Питон и не пудрить мозги.
Если же нужен запасной вариант (что кстати хорошая идея) и хочется быть хорошим разработчиком востребованным вне трейдинга, то здесь нужно будет выбрать специфику.
Вдобавок 1С ну прямо скажем слабый бэкграунд для программиста, вам нужно очень много писать чтобы развиться тут может язык программирования не особо важен.
Не советую лезть в С++, очень специфический опыт будет.
PS рекомендую почитайте что пишет парень под ником day0markets, я с ним наверно во всем согласен
Язык учится легко, пишется приятно и быстро, если нужна мощность — векторизуешь, утилиты и скрипты пишутся быстро, а если надо посложнее — есть приличный вполне ООП, а если дойдешь до ML — оно тут тоже очень есть.