Блог им. alexshape

На какой язык программирования сделать упор

    • 28 октября 2020, 16:03
    • |
    • А.С.
  • Еще
Добрый день. Меня зовут Алексей, и я разработчик, т.е. будущий разработчик торговых роботов.
Собственно почему я пишу здесь: 
Меня интересует какой язык программирования начать изучать углубленно, технологии, фреймворки может быть, чтобы быть востребованным как разработчик торговых алгоритмов в финансовой сфере. Я бы с удовольствием работал в Unitedtraders, потому что знаю точно, они этим занимаются и даже своего робота как то выставляли на ЛЧИ, и делали сумасшедшие проценты прибыли. Но дело не в том, как они это сделали. В том что я хочу развиваться в этой сфере. Я уверен что они не одни, и есть много других фирм, банки да и просто инвестиционные компании, крупные компании проп трейдинга конце концов. 
На текущий момент мои навыки таковы: я знаю что такое программирование (база), что такое ООП тоже знаю, да и его принципы могу перечислить наизусть. Но пока не решил куда двигаться в JAVA или С# окончательно. Мне нравиться JAVA за ее гибкость и opensource. плюс можно переметнуться в android разработку(ха-ха, мало ли вдруг все таки, как окажется не рожден для трейдинга — даже алгоритмического). 
    ★3
    104 комментария
    Lua, C++, Python. SQL
    avatar
    вы сейчас не юморите? =)
    avatar
    Андрей К, что смешного? я серьезно
    avatar
    А.С., лучше приоритет в выборе компаний сменить =) Да и вообще робот был чужой на лчи
    avatar
    Андрей К, Может погорячился насчет UT)) но смысл все равно не меняется
    avatar
    А.С., вообщем, когда я искал работу, но это был 2015, сделал главный вывод: если ориентироваться на Запад — то Java, если на РФ, то можно и на C#. Но это если метаться между C# и Java.

    Но это все для того, чтобы писать какие то платформы торговли. Обобщенные. Ну или платформы для стратегий.

    Еще рынку нужны узкоспециализированные крайности. Одна крайность — это C++, вторая крайность — Python, R и тд. Обе краности решают совершенно разные задачи. Вторая крайность больше для квантов.

    Тут нужно для себя решить куда шагать.
    avatar
    Андрей К, а JS. Это туфта?))
    avatar
    Дед Панас, пока даже не пойму, как его в трейдинге применить =)
    avatar
    Андрей К, зачем в трейдинге? я в роботов не верю. Только среднесрок лонг на свои.
    avatar
    Андрей К, есть крайности крайнее C++ ^_^
    avatar
    bwc, 
    avatar
    bwc, чего там еще придумали? а то я уже не в курсе =)
    avatar
    Андрей К, все старое, проверенное временем: C, asm, VHDL
    avatar
    bwc, аа, ну этот космос я не рекомендую, не всем дано
    avatar
    Если затачиваться именно под рынок, то учить математику, а ЯП уже выбрать на чем быстрее получается.
    ЗЫ и у C# есть проблемы с математикой и на это нужно делать поправку
    Торгую под галоперидолом, а что там за проблемы? Скорость? Библиотеки, думаю, не проблема. Я вот знаю такую, как alglib.net — на с++ и питоне ее использую иногда. Для шарпа — тоже есть она.
    avatar
    tranquility, ну как самый простой вариант Math.Round(1.5) == Math.Round(2.5) == 2
    Торгую под галоперидолом, и чем тут проблема — это стандартно для чисел с плавающей точкой практически во всех языках программирования. 
    avatar
    Михаил, это понятно людям которые прогают не один год и знают, что такое есть и как это решается. С точки зрения логики, человека который начинает на этом писать, это введет в ступор (если он конечно не изучил спеку языка  до этого, что врядли)
    Торгую под галоперидолом, просто вы падаете это как пример проблем с математикой у C#, хотя к это пример не является специфичным для C#, а я является следствием общего для большинства языков стандарта чисел с плавающей точкой.
    avatar
    Михаил, в С++ такого поведения нет (а этот дедушка можно сказать эталон ЯП). С Java ситуация такая же как и с С++. В python функция округления работает как и в С#. т.е. 2а языка которым за 30 лет работают с округлением, с точки зрения математики, правильно, а С# по другому.
    Торгую под галоперидолом, оперировать к математике, и некой правильности С++ тут достояно странно — в математике инт не может переполниться, как в С++.

    Операции с float определены стандартом. 
    Предусмотрено несколько вариантов округления — все они правильные. Вариант С# идет в стандарте первым и по ряду причин считается предпочтительным.
    avatar
    Михаил, нет в C# Round по умолчанию округляет в сторону ближайшего четного числа.
    avatar
    Sergeyka, не понял, что нет? Первое стандарте округление в сторону ближайшего четного. 
    avatar
    Михаил, в С round(2.5) == 3 , в С# ==2
    avatar
    Sergeyka, да и что?

    В стандарте сказано буквально следующее: 

    «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.»

    Более-менее современные языки стараются придерживаться стандарта.
    avatar
    Торгую под галоперидолом, так есть Math.Ceiling() который ведет себя ожидаемо
    avatar
    Sergeyka, 
    <code class="lang-csharp" data-interactive="csharp" data-author-content="decimal[] values = {7.03m, 7.64m, 0.12m, -0.12m, -7.1m, -7.6m};
    Console.WriteLine("  Value          Ceiling          Floor\n");
    foreach (decimal value in values)
       Console.WriteLine("{0,7} {1,16} {2,14}",
                         value, Math.Ceiling(value), Math.Floor(value));
    // The example displays the following output to the console:
    //         Value          Ceiling          Floor
    //
    //          7.03                8              7
    //          7.64                8              7
    //          0.12                1              0
    //         -0.12                0             -1
    //          -7.1               -7             -8
    //          -7.6               -7             -8
    ">
    </code>
    docs.microsoft.com/ru-ru/dotnet/api/system.math.ceiling?view=netcore-3.1
    Торгую под галоперидолом, да забыл, нужно использовать
      Math.Round(2.5d, MidpointRounding.AwayFromZero);
    avatar
    Написать робота это одно.
    Проблема в правильной системе алгоритмов. Т.е прибыльной системе)))
    avatar
    Дед Панас, по опыту скажу, что прибыльной системы может и не родится в конце концов, а кушать хочется. Поэтому хотелось бы устроится непосредственно на работу. ну и повышать скилл всегда нужно  
    avatar
    А.С., я сейчас сам немного учу  js.
    avatar
    Дед Панас, как это связано с алготрейдингом?

    avatar
    Дед Панас, вообще js больше для web. Как самостоятельный он не катит. Переквалифицироваться решили?
    avatar
    3Qu, )) для себя, чтоб деменции небыло. Сайты верстаю уже, столкнулся, что нужен js. Полез туда разбираться, пока неглубоко
    avatar
    Дед Панас, кнопочки и окошечки верстать дело нехитрое. А вот когда взаимодействие пойдет с серверными скриптами и базами данных — эт уже сложней, и одним js не обойдется, а сейчас почти все страницы такие.
    avatar
    3Qu, вот и вникаю)). Да мозги кипят. Функции, массивы, циклы. А как иначе мозги развивать?

    avatar
    3Qu,  извините,  а в чем проблема с node js?
    Сам сейчас туда полез разбираться, понадобилось, и теперь реально не понимаю, зачем вообще  сейчас какой то доп серверный язык, буквально все можно сделать
    avatar
    Дмитрий К, с JS есть некоторые проблемы с многопоточностью, ну и в JS нет целых чисел, нету int, все числа это double, ну и еще разные особенности.
    avatar
    30 с лишним лет опыта и программирования. На сегодняшний момент:

    1) С++ — зная его, вы без проблем будете программировать на C# и Java.
    2) C# + .NetCore  + Visual Studio — решите практически любую задачу.
    3) Java — 20 лет как потухает. Только серверные приложения для банков.
    4) Python — не юзал, но большой спрос на программистов.
    5) SQL — это только баз данных.

    И в конце концов LUA, не юзал, но как бы большинство роботов и плагин-ов для торговых систем на нем пишут.
    avatar
    aai63, сколько вам лет? Вы до сих пор работаете в этой сфере?
    avatar
    Дед Панас, Мне 29 лет, программирую на 1с
    avatar
    Дед Панас, 57. Через каждые 5 лет переключаюсь на что-то другое, но потом возвращаюсь.
    avatar
    aai63, уважуха. И как востребован в свои годы?

    avatar
    Дед Панас, Последние 5 лет работаю в средней компании, хотя могу себе позволить не работать. Тащу 2 крупных проекта и несколько мелких. Коллектив в основном молодой, если уйду, ребята просядут.
    avatar
    aai63, 
    3) Java — 20 лет как потухает.
    Ну это как вендекапец. Его всё предсказывают, а он так и не наступает.
    avatar
    надо различать
    умение торговать
    и умение программировать
    если торговать не умеешь, то никакой робот тебе не поможет...
    с другой сторон… если умеешь торговать, то уж прогера как нибудь найдешь

    avatar
    ves2010, 
    зашел тут ко мне вечерком на бокальчик красненького приятель, СЕО программистской лавки, послушал все мои мытарства с кодом, терминалом и прочим и говорит: так а чего, все же просто, надо же написать нормальное API, а дальше шлите команды купить/продать. Я говорю, так напиши, Саша. Человек задумался. 
    Дмитрий Овчинников, в iticapital (бывши itinvest) есть свое «API» Smartcom. А толку
    avatar
    PSH, 
    так там клоуны, как и во всей брокерской  и алго индустрии пишут.
    А приятель мой, это бывший Oracle Russia :)
    Дмитрий Овчинников, вот и зачем бывшему Oracle Russia, а ныне CEO девелоперской компании, заниматься этой вот хренотой? Денег за это толком не заплатят. Любой разработчик средней руки (ну, не разработчик, ладно, команда) это реализовать может, только ему платить надо, а зачем? С IT отделами у брокеров я не сталкивался, но подозреваю, что отношение к ним хуже, чем в банках (СберТех вынесем за скобки), хотя казалось бы, куда еще то. Так вот и живем, надо — пишешь сам, интерфейсы FAST / Plaza II / etc есть и слава богу.
    avatar
    PSH, 

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

    Возможно есть исключения, команды, пишущие для себя что-то узкое и живое, не спорю.
     
    Так у кого топик-стартер собирается работать кодером? И самое главное, какое, черт побери, это отношение имеет к алготрейдингу?
    Дмитрий Овчинников, тут согласен :). Если ты классный разработчик — иди в условный Яндекс, там модный офис, диванчики, свободный график и весь спектр ништяков, еще и деньги платят :)
    avatar
    C#, Java — это фронтенды. Причем C# еще и ограничен одной платформой. Раз тут речь идет про «торговых роботов» (если под «торговыми роботами» понимать то, что под этим понимают все приличные люди, а не симпатичное окошко с тремя кнопочками и убогой начинкой а-ля «перечечение скользящих средних) то это все сразу мимо.
    Python, Lua — это скриптовые процедурные языки. На них хорошо конфигурационную логику писать. Ну или опять же недороботов про пересечение МА и прочую галиматью.
    Вообще, если чуть-чуть подумать, то вариантов, кроме как C/C++, просто не остается.
    Хорошая развернутая статья на эту тему здесь https://smart-lab.ru/blog/571625.php
    avatar
    PSH, не очень понятно почему фронтендеры?
    C/C++ это конечно мощно, а как же платформа stocksharp, мне казалось у нее достаточно богатый функционал. в том числе торговля через коннекторы к бирже
    avatar
    PSH, про Питон вы сильно заблуждаетесь. Питон используется, как правило, не сам по себе, а как язык сценариев для функций пакетов, которые оч быстые. И доля самого Питона во времени исполнения оч незначительна.
    Где-то видел сравнительный тест прог на С++ и Питон — время исполнения практически одинаково.
    avatar
    3Qu, с трудом представляю сравнительные тесты «прог на С++ и python»

    Если честно, вообще с трудом представляю какой-нибудь  бэкенд на python. И уж совсем не представляю, зачем бы это кому-нибудь понадобилось
    avatar
    PSH, обычно для бэкэнда прога питон вызывается из С++ через С- API. Но можно и на чистом Питоне сделать. Тоже не проблема, есть и такие приложения, даже коммерческие.
    avatar
    3Qu, ну вот возьмем классическую задачу. Высоконагруженная 24/7 система, принимает поток данных по, например, FAST over UDP, анализирует, агрегирует, сохраняет, генерирует ответный поток данных по тому же FAST. Должна быть отказоустойчива (к той же потере сетевой связности, например), резервируема, масштабируема и т. д. Вы себе вообще как представляете реализацию этой задачи на python? И, главное, зачем? 
    Массив методом пузырьков можно и на python сортировать, он с этим, разумеется, справится и, возможно, не медленнее C / C++

    По поводу «подключается по C-API» — я там писал выше, что на python / Lua хорошо высокоуровневую конфигурационную логику писать, чтобы ядро не перекомпилировать постоянно. Собственно, так их и используют
    avatar
    PSH, я о том же — Питон, как и Луа — языки сценариев. Большинство либ Питона — это С++.
    avatar
    3Qu, значит, мы об одном и том же :)

    Человек просто спросил «на чем писать торговых роботов». Я не представляю, на чем их можно писать, кроме как на C/C++. А вот конфигурационную логику (эти самые сценарии обработки) вынести в Lua / python слой. Тогда, возможно, получится симпатичненький бэкенд. А к нему потом на Java написать «панель управления» (фронтенд), чтобы можно было дома в кнопочки тыкать :)
    avatar
    PSH, кнопочки/окошечки, имхо, лучше на шарпах.
    avatar
    3Qu, если только под винду, то конечно. А если захочется не только под винду, а еще и для телефона / электрочайника / удаленного сервака на RHEL, то нет :) 
    avatar

    PSH, кто бы ни был, но ты — голова! Даже коты это поняли..

    avatar
    PSH, да вы верно шутите. на питоне полно сервисов, особенно там где нагрузки не очень. де-факто, питон сейчас стандарт бекэнда для небольших компаний
    avatar
    PSH, Java — фронтенд?? Каких только удивительных новостей на СЛ не прочитаешь…
    avatar

    Ив Ив, зависит от задач.

    В той задаче, которую описал я, не вижу никаких проблем реализовать фронтенд на Java

    avatar
    PSH, можно и топором бриться, конечно, но в целом на яве UI активно пишут только под Андроид. Почти всегда ява живет в серверной части и общается через веб-интерфейс либо сервисы.
    avatar
    Ив Ив, если Вы реализуете какие-то веб-сервисы, то разумеется. Но я Вам с легкостью могу накидать примеры фронтендов на чем угодно, и это совсем не от того, что кому-то захотелось «побриться топором» :)
    Но это уже спор ради спора, конечно, за детали можно рубиться хоть неделю, когда в целом понимание общее :)
    avatar
    PSH, для работы явского UI на клиентской машине должен быть JRE, и это сильно все усложняет.
    avatar
    Ив Ив, Это да. Усложняет. Сильно.
    avatar
     Изучать С/С++ в 57 лет, имея за спиной такой отвратительный бэкграунд, как «программирование 1с» — это мощно. Не сказать, что невозможно, но серьезный вызов точно
    avatar
    PSH, Вы Запутались  в комментариях, как и я. 57 не мне, мне 30. и 1С_овский бэкграунд не так плохо. 1с вполне хорошо решает свою задачу. Иначе бы умер 
    avatar
    А.С., «свою задачу» возможно. А вот для «других задач» не подходит, формирует массу дурных привычек, от которых потом придется долго и мучительно избавляться, и очень своебразную систему мышления, которую потом придется ломать, если из «программиста 1с» вы хотите превратиться в разработчика
    avatar
    чтобы быть востребованным как разработчик торговых алгоритмов в финансовой сфере

    если это конкретно алгоритмы когда и сколько купить\продать, то нужно топить в сторону именно алгоритмов, моделей и т. п., а не яп. в итоге вы разрабатываете алгоритм, а специально обученный персонаж делает по нему робота со всеми нужными наворотами.
    avatar
    Приоритеты следующие: математическое образование, желательно кандидат наук и высокий IQ. Работа есть и на C# и на Java.
    avatar
    А.С., C# и Java — это грубо говоря урезанные варианты C++ до требований классического ООП (нет множественного наследия и т.д.). Если вы хотите получить конкретный результат с наименьшими затратами, то это зависит не от языка, а от средства разработки. На сегодняшний момент это MS VS 2019, отсюда C++ или C#.
    avatar
    aai63, не более, чем человек — «урезанное шимпанзе». Это просто схожие императивные языки С-подобным синтаксисом, на самом деле очень серьезно отличающиеся по многим позициям.
    avatar
    aai63, 
    На сегодняшний момент это MS VS 2019
    О продуктах JetBrains вы конечно же не слышали.
    C# и Java — это грубо говоря урезанные варианты C++
    В первую очередь это memory-safe языки, а как организовано множественное наследование это вообще мелочи.
    avatar
    Нувот Вчеранов, действительно, с таким же успехом можно С++ объявить «урезанным вариантом C#», потому что в Cpp, формально, нельзя явно объявить интерфейс :)
    avatar
    PSH, а абстрактный класс вам не поможет?
    avatar
    aai63, не о том речь :).
    avatar
    Посмотрел вакансии… Мда, зп конечно...
    По-моему лучше учить польский и драить там улицы. Ну или баранку мусоровоза крутить, или на заводик польский.

    60к за C++/Python финтехе. Это как-то маловато. Хотя если норм работать мб до 700 евро зп поднимут. Другое дело!

    hh.ru/vacancy/39738913
    avatar
    если хочешь на дядю пахать, то в конторах специализация. нужно выбирать, рабом какого вида ты хочешь стать.

    есть кванты — это математические тупаки с самомнением. некоторые из них не могут решить школьную задачу по математике (привет мэдкванту). теоретически они должны искать неидеальности на рынке и предлагать алгоритмы для их эксплуатации. обычно используют разновидности бэйсика: питон, R, и прочие скриптовые языки. раньше был моден перл. но мода меняется, а тупость квантов нет.

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

    можно быть «всё в одном флаконе» — это когда ты один и для себя делаешь.

    моё имхо: С/С++ главный язык планеты Земля.
    все эти джавы, си шарпы и прочий распиареный шлак — лишь мода. онли сипласплас — вечен.

    пойдёшь в кодерки или кванты — будь готов к нервному истощению и перманентной депрессии.

    успехов.
    avatar
    проще стать программистом или тестировщиком, а это вот все оставить в виде хобби.
    avatar

    Трейдинг — это не про программирование.

    Трейдинг — это про математику.

    Программирование наступает в самой последней фазе.

    И в большинстве случаев не особо важно на чём писать.

    Важно что писать.

    Короче трейдинг — это про поиск и тестирование стратегий.

    avatar
    FinSerfing, так оно, только человек, как я понял, хочет быть именно разработчиком. Хотя, конечно, зачем ему идти в United Traders, когда можно в условный Яндекс пролезть и жизнь удалась :)
    avatar
    Python тебя спасет. Когда окончательно поймешь, что на торг. роботах не заработать, то ты заработаешь на Python.
    avatar
    Бухгалтера то ндс не знают как считать, а вы говорите школа, советская, средняя. Этих роботов, небось, из кирпичиков собирают, никто функционал его и не знает, кроме главного кукла
    avatar
    Java тю тю, теперь Котлин к сожалению
    avatar
    бред пит, для школьников разве что, а в энтерпрайзе про ваш котлин и не слыхали не шиша.
    avatar
    Иван Иванов, что такое энтерпрайз?
    avatar
    бред пит, в вашей школе энтерпрайз не показывали? Бывает )
    avatar
    Ив Ив, Ив Ив это обрезанный Иван Иванов?
    avatar
    Иван Иванов, ну кстати в энтерпрайзе иногда тоже используют.
    Я вот сейчас в таком работаю, в основном пишем на котлине, всё равно ж компилируется под JVM и можно использовать всю экосистему джавы.

    Но это не отменяет того что джава никуда не уходит.
    avatar
    Дмитрий Овчинников, если в сбертехе то норм :)
    avatar

    Если говорить именно про алготрейдинг, то можно выучить и Джаву и C# (в концепте между ними очень мало отличий) и Питон и не пудрить мозги.

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

    Вдобавок 1С ну прямо скажем слабый бэкграунд для программиста, вам нужно очень много писать чтобы развиться тут может язык программирования не особо важен. 

    Не советую лезть в С++, очень специфический опыт будет.

    PS рекомендую почитайте что пишет парень под ником day0markets, я с ним наверно во всем согласен

    avatar
    Не знаю как там с наемной разработкой, а если хочешь для себя алго делать — лучший выбор Python + дестипальцевая печать + много практики.


    Язык учится легко, пишется приятно и быстро, если нужна мощность — векторизуешь, утилиты и скрипты пишутся быстро, а если надо посложнее — есть приличный вполне ООП, а если дойдешь до ML — оно тут тоже очень есть.
    avatar

    теги блога А.С.

    ....все тэги



    UPDONW