Навеяно постами (раз), (два) и ещё одним (комментом).
Примерно девять с половиной лет назад я прошёл собеседование на позицию algorithm programmer в одной компании, которая занималась высокочастотной торговлей. И понеслось… :D
Но начну я издалека.
О случайностях с далеко идущими последствиями
Вы когда-нибудь задумывались над тем, как повлияли на вашу дальнейшую жизнь ваши привычки и мелкие случайности?
В моём случае сочетание привычки «поваляться в кресле с книжкой» и случайно найденной мною дома в шкафу книги (Епанешников А.М., Епанешников В.А. «Программирование в среде Turbo Pascal 7.0» — М.: Диалог-МИФИ) привело к тому, что я начал учиться программировать. Книга оказалась в шкафу потому, что отец когда-то тоже учился программировать во время учёбы в ВУЗе.
Пару недель я читал книгу, набирал и запускал примеры, но дальше этого дело не пошло. Отчасти сказывался возраст — мне было лет 10. Также у меня не было других источников информации, кроме этой книги; искать в интернете я как-то не пробовал, да и что я искал бы?
Второй заход на изучение программирования случился через пару лет, когда отец принёс домой пару книг по Visual Basic 6 с целью изучить язык и написать какую-то программу для упрощения своей работы.
На этот раз дело пошло веселее. Во-первых, учёба в школе с углублённым изучением английского языка приносила результаты и я более-менее понимал интерфейс среды разработки, а также сообщения об ошибках. Во-вторых, кто-то из знакомых отца поделился с ним 3-дисковой копией MSDN, в которой нашлась справка по Win API!
Позанимавшись полгода формошлёпством на VB6 и прочими несерьёзными делами (прыгающие по форме кнопки, незакрывающийся CD-ROM, etc) я вернулся к ранее найденной книге по Turbo Pascal 7. Добрался и до встроенного в TP7 ассемблера, а заодно — найденного в интернете Ralf Brown Interrupt List.
Это время было потрачено не зря — в 9-11 классах во время участия в олимпиадах по программированию я использовал Turbo Pascal и Delphi (11 класс; урок с использованием TP7 на олимпиадах был усвоен после эпичного провала в 10 классе, когда сказались ограничения по памяти TP7, а также разница в быстродействии с 16-битным integer и 32-битным longint).
После VB6, TP7 и ассемблера дошла очередь до Visual C++ 6 и понимания, что помимо, собственно, языков программирования нужно изучать ещё много чего. Это привело к периодическим поездкам в магазин
издательства «Питер», а также печати на принтере трёхтомника Кнута и многих других интереснейших книг, которые добывались на торрентах :)
О запретах в подростковом возрасте
Если ваш ребёнок играет в компьютерные игры — попробуйте запретить ему играть в любые игры кроме тех, что он написал сам!
Вобщем, так получилось, что в определённый момент я заинтересовался компьютерной графикой. Сначала это было баловство с модулем CRT под Turbo Pascal, потом в режиме 320x240 на ассемблере, а потом я добрался до OpenGL...


В декабре 2007 я за месяц написал 64кб демку, чтобы поздравить друзей с Новым Годом. Тридцать тысяч строк кода на С++, пиксельные шейдеры, процедурная генерация текстур
, брат-братан-братишка, когда меня отпустит? И это в тот учебный год, когда мне предстояло сдавать ЕГЭ и поступать куда-то!







Я мог бы заниматься разработкой игр, но-о-о...
… где-то в то же время узнал о трейдинге. Отец примерно в 2006 году где-то вычитал про торговлю на Forex и несколько лет этим заинтересовался. Торговал, насколько знаю, на демо и пытался участвовать в конкурсах. Дома до сих пор пылятся книжки по техническому анализу.
В какой-то момент я услышал от него про терминал MetaTrader 4 и про то, что в нём есть встроенный язык программирования (MQL4). Реализовал пару отцовских идей в виде советников, потом некоторое время по-разному терзал стандартные индикаторы, пытаясь изобразить линию с положительным наклоном в бэктестере. Почитывал
форум MQL4, читал примеры из
Codebase.
Позже, уже после окончания первого курса в универе, написал пару статей (
раз и
два «часть первая и последняя»). За статьи получил примерно 200 долларов; кстати, теперь вы можете спокойно обвинять меня в околорыночничестве :D
Что касается примитивности статей — к моменту их публикации я копал уже гораздо глубже: был знаком с моделью
LPPL, читал книжки по теорверу и всякие статьи, написал несколько своих бэктестеров на Delphi/Mathcad/MATLAB, набил минимально необходимое количество шишек на ошибках типа заглядывания в будущее и отсутствия учёта транзакционных издержек, копался в финамовской маркетдате по акциям MICEX.
Тяжелый выбор
В августе 2008 года я с нетерпением ждал начала учебного года в СПбГУ, а делал это — в больнице, из-за проблем с почками. Было много времени, чтобы над чем-нибудь подумать, например, «чем же именно я хочу заниматься в качестве будущей профессии?»
Поступил учиться я на математика-программиста, тут сложно не догадаться. Но полученные навыки можно применить совершенно по-разному. Меня привлекали три направления:
1. Антивирусная индустрия;
2. Компьютерная графика, разработка игрового ИИ;
3. Алгоритмическая торговля.
Все эти направления по-своему интересны:
1. Вечное интеллектуальное соревнование с вирмейкерами; возможность сделать мир чуточку лучше;
2. Работа должна приносить удовольствие, а я люблю компьютерные игры;
3. Сложные задачи, высокие требования к быстродействию и надёжности кода,
интересно узнать как же делают тысячи процентов на ЛЧИ, з/п хорошие.
В итоге победила моя меркантильная сторона.
Как я искал работу
Конец января 2010 года. Я отмучался на третьей сессии и приехал домой. Вечером отец предложил мне поискать работу
(ёж — птица гордая, пока не пнёшь — не полетит). Ну я и не сопротивлялся. А чего? 19 лет, хватит уже на шее сидеть.
Составил резюме, помучал гугл и нашел штук 5 компаний в СПб, которые либо разрабатывали софт для трейдинга (но сами им не занимаются), либо занимались трейдингом и искали не только программистов, но и разработчиков алгоритмов. Вариант с разработкой трейдингового софта я рассматривал исключительно как запасной вариант, чтобы набраться опыта.
Начал с отправки резюме в две компании.
Через два дня мне перезвонили из одной компании, которая занималась только разработкой софта для трейдинга. Подавал резюме на позицию Junior Developer. Назначили собеседование. Было страшно :)
Дали анкету с какой-то задачкой (a-la написать определённую функцию) и вопросом о том, какие термины из списка { хэш, мьютекс, автомат, GoF } мне знакомы. Термины были знакомы все, но я честно признался, что
легендарную книгу ещё не читал. Потом были вопросы про ООП, a-la отличие интерфейса от абстрактного класса. И пообещали перезвонить, ну вы поняли :) Т.е., не так уж и страшно.
Вместо ответа от другой компании, которая занималась высокочастотной торговлей и искала разработчиков торговых алгоритмов, я получил ответ от почтового сервера, что такого ящика не существует. Пришлось прорываться — отправил сообщение через их сайт. Починили, попросили ещё раз прислать резюме (постеснялся, отправил без части «достижения»), после чего назначили собеседование.
На этом собеседовании мне дали десяток задач на сообразительность, но не предупредили, что надо решить две любые из них. Я начал решать по порядку. Во время беседы интервьюер внезапно перешёл на английский, соответственно, что-то о своих навыках я тоже рассказывал по-английски. Были вопросы про умение программировать, самый сложный проект. Собеседование прошел, через некоторое время вышел на работу (full-time на время летних каникул, part-time на время учёбы).
Впечатления от первого года
Секретничают, про стратегии ничего не говорят, всего кода не видно. Неожиданно, правда? :)
Задач много, учиться приходится быстро. Например, пришлось внезапно учить Java вместо C++, которого я ожидал. А потом ещё и R вместо MATLAB!
Чем примерно мне довелось заниматься за первый год:
1. Разрабатывал шлюзы;
2. Разрабатывал/переделывал парочку утилит для обработки маркетдаты;
3. Наконец, подключился к разработке стратегий;
4. Изучал сделки кое-каких роботов-участников ЛЧИ, разгадывал принцип работы.
Такие дела.
Андрей К
baron_samedi
Перечитал свои посты, понял, что никакие 300+ резюме я не отправлял. А всего лишь 146. Вот же врака.
Андрей К
meat
Про кол-во пакетов с разными статметодами спорить не хочу, т.к. не имею достоверных данных.
Eugene Logunov
Dmitryy
в свое время в матлабе и маткаде кучу времени проводил и вполне хватало для тех задач, даже где-то есть исходники по моим исследованиям
и все знакомые математики тоже там расчеты проводили
но конечно там это денег больших стоит, возможно python и R как бесплатные аналоги подходят для домашних пользователей :)
meat
О том и речь, у нас популярен матлаб, потому что в институтах используется повсеместно. Плюс раньше никто не брезговал пиратским ПО.
Dmitryy
tranquility
не встречал еще, чтобы писали реальное ПО в матлабе для заказчика :)
meat
Господи, сейчас даже вспомнить страшно, сколько времени было убито.
Но толку из меня не вышло в этом направлении. К сожалению слишком поздно подключился и слишком отсталым был в детстве… А может и к счастью! =)))
Антон Денисков (Fry)
Чужой
Eugene Logunov
Андрей К
У меня однажды откукловодили робота, который входил в позиции исключительно по рынку, а потом неспеша пытался из них выходить. Робот не проверял одновременное наличие сигнала в лонг и в шорт по рынку. Некто коварный и очень умный (роботов на ЛЧИ не выставляли, поймали, похоже, чисто по ордерлогу) этим воспользовался в самой грубой форме: наказали робота на весь профит since inception o_O
Eugene Logunov
меня тоже ловили, но это сделать сложно в силу некоторой специфики и дано не каждому.
Андрей К
tranquility
1) Прошла отмена по ордеру, который ранее был выставлен на определённую глубину (по уровням или по объему) внутрь стакана. Через X миллисекунд прошла постановка ордера с таким же объемом на такую же глубину. Вероятно, ордер принадлежит тому же участнику. Можно и кучу других свойств придумать, чтобы определить «похожесть» ордера: время существования от постановки до отмены, приоритет в очереди заявок при отмене, близость ордера к рынку при отмене, etc-etc-etc.
2) Придумали какой-то супер-сигнал по конфигурациям стакана. Смотрим на события в условиях, когда сигнал говорит A и когда говорит B. Если при переключении с A на B в течение X миллисекунд прилетает ордер по рынку с определёнными параметрами, а в остальное время такие ордера наблюдаются редко — значит мы кого-то раскусили.
Если стратегия рандомизирует параметры ордеров или дробит их — будет сложнее поймать.
Eugene Logunov
Андрей К
Technotrade
А до этого не имел (ни на своё имя, ни на имя близких родственников) счета по причине возможного конфликта интересов, а также по той причине, что разрабатываемые последнее время мною стратегии было возможно запустить лишь на капитале, превышающем мой личный в разы. Вот тут писал немного на эту тему.
Eugene Logunov
Нэш Ван Дрейк (Кот Скрипаля)
Kot_Begemot
Но печально не всё. Этот опыт легко переносится на торговлю криптовалютами. Я немного писал про то, как в 2017 году ликвидность предоставлял на BTC/USD: в целом о своём заходе на крипту, об одном из источников заработка, и как мне повезло вовремя остановить торговлю.
Eugene Logunov
Хорошая формулировка
У меня с ВЧ частью тоже не очень. Если не сказать вообще никак.
Kot_Begemot
Круто! Классное резюме.
Тоже когда то начинал Бейсик, Паскаль затем шли Делфи и C Шарп. В универе же конечно в малых объемах Visual Basic и C++. Но в итоге стал программистом промышленных контроллеров))
Denis Richardson
В 2014 обновлял, сделал упор совсем на другие вещи — выкинул 95% старого резюме.
Eugene Logunov
Андрей К
На собеседовании интервьюер не интересовался — за кого, Спартак, Зенит?)))
Mike Dewar
Eugene Logunov
Mike Dewar
Тимоха
Eugene Logunov
Если твой пост принять на верочку, то ты из этой касты, а вот на верочку мешает отсутствие признаваемых косяков, а шишки ты должен набивать и если так, то должен быть опыт исправления косяков. Ну это так, на будущее. Профитов.
Тимоха
А я всегда думал зачем нужно это самое ООП? А вот оно зачем — чтобы кода видно не было, мол, на тебе абстрактный класс (или интерфейс, уж не знаю) — кодь чего-то там!
Kot_Begemot
Eugene Logunov
В случае чего придется переписать всего один модуль приложения, а не всё приложение.
Shadow
Kot_Begemot
Вот самая забористая штука :)
Eugene Logunov
Kot_Begemot
Displacer
1) «ПШ-Ш-ШPulseAudio», которое никак не хочет воспроизводить звук в системе до тех пор, пока не открыт регулятор громкости;
2) Вылетающий при изменении размера окна TWS (терминал Interactive Brokers);
3) Драйвера видеокарты, упорно не желающие дружить с 4-х мониторной конфигурацией.
Поэтому, в качестве рабочей среды я считаю пригодной исключительно Windows. На серверах — пусть будет Linux (у меня и у самого кое-где CentOS 7 крутится).
А вот пилить свободный софт — я пас.
Eugene Logunov
Ну в целом по ответу я понял, что случайности тут никакой нет, вы склонны в жизни делать оптимальный выбор здесь и сейчас, оценивать ситуацию быстро и четко. В общем всё правильно, удачи вам в делах и всех благ :)
PS: у меня начало было похожее, даже книжка Turbo Pascal 7.0 стоит на книжной полке.
Displacer
Евгений, а у Вас были рядом единомышленники?
Ray Badman
Пересекались на олимпиадах, либо на городской научной конференции по информатике.
Eugene Logunov
tashik
Eugene Logunov
Удачи, кайфа и профита от процесса!
tashik
Складывается такое ощущение, что без Питера в стране в принципе никто не обходиться)) Понятно, что оно ложное но, к примеру, коллега ch5oh тож из СПбГУ. Я думал Вы Москвич. Интересная статья, хоть 200$) и не наберет, но спасибо! На волне такой открытости, хотелось бы спросить про эту первую работу, со столь хитровые веселым собеседованием, как долго там проработали, и какова дальнейшая судьба команды?
kolinkor
Были и успехи и неудачи; какие-то направления целиком закрывали, а какие-то разрастались от маленького прототипа до нового направления. Была большая текучка, хотя костяк команды проработал вместе лет 6-7 (а кое-кто совместно работал и раньше, или продолжает работать и сейчас).
Перешли в состояние нанокоманды :) Осваиваем новые рубежи, повернуть назад уже нельзя.
Eugene Logunov
Eugene Logunov, да, помню про НДА, надеялся, что дела давно минувших дней к нему не относятся.
Напомнило мне челябо-кипрский дуэт – нанокоманду Uralpro, насколько я понял из общения на апрельской конфе, после шипперинга и перехода на “дальнее зарубежье” у них все зацвело радужными красками)
kolinkor
tashik
kolinkor
vladimir55
tashik
Максим Барбашин
Андрей К
Как -то так
www.youtube.com/watch?v=_dR3HVAENj4&list=PLAHRa_lxEV7CmapCAH5N3TkNpck3F6TCI&index=18
Максим Барбашин
Люблю программировать, но по работе щас занимаюсь этим редко, больше для себя.
Одно время интересовался переходом во что-то подобное, но не нашел концов и по ЗП показалась большая потеря. Хотя интересных задач и знаний в алготрейдигге хочется очень.
ПBМ
Андрей К
А вообще вот что сейчас на HH есть:
Quantitative Researcher Intern at Quantport: 150-250k
Quantitative Researcher at Quantport: >300k
Senior Quantitative Researcher at Algo Capital: >350k
C++/Java Developer — RX at Deutsche Bank: >220k
Вилка примерно понятна, надеюсь. Кто-то жадничает с фиксом, но обещает больший profit participation. А если чисто ради опыта на младших курсах ВУЗа — то и «за еду» норм, если команда и плюшки правильные :)
Eugene Logunov
Спсб
ПBМ
Андрей К
ПBМ
PS. Недавно прошла весть, что Дойче банк увольняет всех трейдеров.
Rostislav Kudryashov
Андрей К
Cristopher Robin
ves2010
— Минус хуллиард за первые 4.5 года
— А потом ещё минус десять за вторые 4.5 года
Eugene Logunov
ves2010
Eugene Logunov
sergeygaz
Eugene Logunov
Нэш Ван Дрейк (Кот Скрипаля)
(Вот теперь точно реклама
Eugene Logunov
1. Где точка входа?
2. Покажи стейтмент.
3. Фу, реклама
Прикольно как человеческое сознание работает… Тут два из трех. ))
tashik
Shadow
Евгений описал, как он пришел в алготрейдинг, чему учился, между чем и чем выбирал. У него блог полон интересного и профессионального материала. Для чего нужен его стейтмент, любой? И с какой радости он ДОЛЖЕН его демонстрировать — он никому тут ничего не продает, включая себя как программиста.
Ладно, давайте тему не засорять полемикой этой. Пусть это будет шутка про стейтмент. А-ля «покажи сиськи» на дваче )
tashik
P.S.: Для чего нужен стейтмент, любой?
— Стейт нужен для того, чтобы подкрепить изложенную информацию фактами. Только и всего.
Лучше Вы скажите, почему данная просьба со стороны комментирующих у кого-то может вызывать агрессию или восприниматься как ТРЕБОВАНИЕ что либо доказать? ;)
Shadow
Агрессию Недоумение вызывает не просьба )) А то, что она возникает не то чтобы к месту, а практически всегда.
tashik
Моё простенькое решение на конкурс QuantCup, который спонсировался Tower Research Capital. Приз за первое место был $10k. Я не победил, но долгое время держался на 2 позиции leaderboard'а.
Eugene Logunov
А то, что Вы так яростно вступились на защиту, теперь уже у меня вызывает удивление. Но не умиление. :D
Наверное это пребывание на смартлабе так сказывается, когда любой безобидный комментарий начинаешь принимать либо как оскорбление, либо как нападение, либо еще какой личный вызов? :(
У меня нет никаких поводов сомневаться в личности автора, как и в его «пути становления».
Shadow
Я поделилась наблюдением при чтении комментов на смарт-лабе. И как бы не погрешила против истины ;) Ну а дальше понеслась. Изначально я ж не автора защищала, а наблюдением поделилась.
Ладно, имхо, друг друга мы поняли — и то хорошо.
tashik
ves2010
tashik
А тут да… всё же путь важен в том случае, если путь привёл (желательно, закономерно и управляемо) к результату выше среднего. Поэтому требование стейтмента вполне уместно. Как на это реагировать — другой вопрос:)
Многим (это точно не про автора поста, но на СЛ есть ряд таких авторов, им значимо больше лет) жаль бессмысленно прожитые годы и здоровье, убитое на бесконечные поиски, исследования, разработки и они начинают рассказывать про свои системы, про свои подходы, про свои пути и пр. Им тяжело признаться самим себе, что они убили часть жизни впустую и на любой запрос о результатах реагируют агрессивно.
Sergey Pavlov
tashik
tashik, напомнило сцену из одного трэш-сериала:
«Парня бросила девушка и ушла к другому. Он разозлился и пришёл к её новому.
И говорит: „Это к тебе что ли моя девушка ушла? У тебя что, хобот до колен? Покажи! Покажи!“![]()
Мама, я трей
Евгений, если это было написано со всей серьезностью — прокомментируйте, к чему такие ограничения, куда они должны направить ребенка? :)
Откуда ж в юном возрасте еще черпать вдохновение? Вы сами то много играли? Именно играли — с погружением себя в виртуальный мир, а не писали код? ;)
Shadow
Много) Warcraft, CS, GTA, Quake, WoW и т.д.
Eugene Logunov
Turbo Pascal
Столько усилий ради поздравительной открытки? Если это правда, ты маньяк. Но думаю, ты преувеличиваешь. Это за пределами того, что человек может удержать в голове. После 10 тыщ строк уже смотришь в свой код и думаешь: что это за хрень? неужели я написал?
Kapeks
1) какие есть сущности и как они взаимодействуют (можно нарисовать на листочке или в UML редакторе и подсматривать), при этом для сложных систем все сущности в голове тоже держать не нужно;
2) с чем будет взаимодействовать текущий кусок кода (на уровне — сейчас вызовем такую-то функцию с таким-то списком аргументов над такими-то данными; тело вызываемых функций в деталях помнить не нужно);
3) безопасность взаимодействия частей кода, какие могут быть побочные эффекты, где может вылететь exception и где он должен быть обработан;
4) в деталях — код текущей функции/метода и основную инфу о текущем классе, попутно прикидываем какая алгоритмическая сложность получается у готового куска программы (можно сразу подумать над этим и реализовать сложный алгоритм, или использовать что-то простое но медленное, сделав на будущее пометки что нужно будет оптимизировать).
Eugene Logunov
tranquility
Eugene Logunov
Kapeks
Eugene Logunov
tranquility
— Надо нам с тобой тоже какую-нибудь книжку написать
— «PnL: There and Back Again»
И btw опционы никогда не были моим основным фокусом по работе :)
Eugene Logunov
Vladimir N.
Тоже потратил тысячи часов на всякого рода казалось бы бестолковые задачки, но навык систематизации и алгоритмизации очень помог в жизни и в работе, которая именно благодаря программированию тесно связанна с IT.
Блин немного наврал — начинал я с программируемого калькулятора МК 61 и потом 52, благодаря «Технике молодёжи» с фантастической повестью «Путь к Земле», с прилагаемым в каждом выпуске программным кодом очередного испытания. Эх, сколько же раз я разбивал свой космический кораблик об суровую реальность! :)
В общем, когда узнал что easy language, используемый в multicharts основан на pascal, мой выбор алго-системы был предопределен :)
Носорог