Наши вакансии

Математик-аналитик

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

  1. Проведение бектестов и анализ их результатов.
  2. Проверка торговых гипотез.
  3. Генерация новых торговых идей.
  4. Участие в мозговом штурме в фонде и обсуждение новых экономических стратегий.

Пример несложной задачи, которую предстоит решать:
Имеются рыночные данные в формате .csv по нескольким инструментам. Все они начинаются с разного времени, в некоторых пропущены дни, бывают ошибки в духе "цена указана как 0".
Надо:

  1. Сделать бектест какой-нибудь простейшей стратегии(пример: покупай все акции, цена которых была ниже чем их среднее значение (SMA) более чем на 2 стандартных отклонения (STD)).
  2. Построить для этого бектеста графики некоторых показателей(график прибыли (PnL), график просадки (DrawDown)…).
  3. Суметь продемострировать результаты(графики) и доказать, что вы все сделали правильно и без ошибок.

Так же в ходе работы будут появляться задачи, основанные на различных методах прогнозирования/экстраполяции.

Важное требование к кандидату:
Уметь правильно совмещать математический и русский языки.

Если вы считаете, что готовы к нашему собеседованию, то пишите на cooperation@dreamteam.investments (с пометкой «Математик»).

Алго-программист

В основные задачи входит разработка/поддержка:

  1. Клиент-серверного взаимодействия различных сущностей (торговый алгоритм и наши сервера, сервера между собой).
  2. Взаимодействия с брокерами.
  3. Взаимодействия с поставщиками данных.
  4. Решение различных проблем, связанных с многопоточностью.
  5. Программирование торговых алгоритмов.

Также по ходу работы поднимаются задачи визуализации, поэтому будет плюсом знание технологии WPF.

На очном собеседовании мы хотим видеть кандидата, который сможет четко ответить на вопросы, перечисленные ниже, и после этого выполнить небольшое практическое задание.

Закрытые вопросы:

  1. Что означают ключевые слова языка (список ключевых слов, которые надо знать, можно найти на MSDN; необязательно знание ключевых слов, связанных с unsafe-кодом и LINQ)?
  2. Что такое Extension-methods (методы расширения)?
  3. В чем различие между Thread.Start() и Task.Run()?
  4. Что такое ковариантность/контравариантность типов?
  5. Как связаны между собой классы Task, TaskCompletionSource, CancellationTokenSource? Какие задачи они решают?
  6. В каких ситуациях и каким членам типов стоит выдавать модификаторы доступа public/internal/private?
  7. Обобщения (Generics). Что такое Generic Type Constraints? В каких языках встречается похожая концепция? Какие основные отличия между Generics в C# и Templates в C++?
  8. Boxing/Unboxing. Зачем оно нужно и к каким проблемам приводит?
  9. Как связаны между собой call stack и heap (области памяти)? Что такое сборщик мусора, зачем он нужен? Что такое проблема фрагментации памяти, как она решается в CLR?
  10. Зачем нужен класс StringBuilder?
  11. Конструкции синхронизации ManualResetEvent, AutoResetEvent, Monitor, Barrier, ReaderWriterLock, ReaderWriterLockSlim, Semaphore, Mutex.
  12. Что такое deadlock, livelock? Как с ними бороться?
  13. Концепция асинхронных функций (async/await). Как этим пользоваться?
  14. В чем разница между указателем на функцию в языке C и делегатом в C#?
  15. Что такое хвостовая рекурсия? В чем ее основная особенность?
  16. Что такое анонимный метод? Что такое лямбда-выражение?
  17. Что такое каррирование (будьте готовы привести пример на языке C#)?
  18. Что такое замыкание? Как этот механизм реализован в CLR?
  19. Каким образом может оцениваться сложность работы алгоритма?
  20. Что такое Virtual table и зачем оно нужно?
  21. Что делают конструкции «yield break», «yield return»?

Открытые вопросы:

  1. В каких случаях стоит отдавать предпочтение агрегации, а в каких — наследованию?
  2. В чем на самом деле разница передачи параметра в метод по ссылке/значению?
  3. Как выжить в мире без множественного наследования?
  4. Зачем структурам дали возможность реализовывать интерфейсы, если использование структуры в качестве интерфейса будет приводить к боксингу?
  5. Что такое чистая функция? Чем хорошо иметь в коде много чистых функций?
  6. Когда стоит кидать исключения? Когда стоит ловить исключения?
  7. Что такое виртуальные методы? В каких случаях они необходимы?
  8. Почему классы в C# не могут быть ковариантны/контравариантны?
  9. Явная реализация интерфейсов. Зачем эту концепцию ввели в язык и когда это нужно использовать?
  10. События. Что делает ключевое слово event? Как можно обойтись без них? Как без событий живут люди в других языках программирования?
  11. Когда надо выдавать новый generic-параметр типу, а когда имеет смысл сделать generic-методы?

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

Основная книга для подготовки к собеседованию: CLR via C# by J. Richter.

Если вы чувствуете, что готовы к нашему собеседованию — пишите на cooperation@dreamteam.investments с пометкой «Алго-программист».

DataBase-программист

Сферы деятельности:

  1. Мы работаем с различными поставщиками рыночных данных. Каждый из них поставляет данные в специфичном формате. Также зачастую в данных могут быть ошибки, e.g. нарушен порядок сообщений, или некорректные (например, отрицательные) значения цен. В процессе возникают различные задачи хранения и обработки этих данных.
  2. Аналогичные предыдущему пункту задачи, связанные с хранением логов сделок торговых алгоритмов.
  3. Для веб-сайта компании будет требоваться поднятие и поддержка соответствующих баз данных. В этих задачах придется коммуницировать с веб-разработчиком, который будет работать с технологией ASP.NET

Основные задачи:

  1. Проектировать/поддерживать соответствующие базы данных.
  2. Писать на языке C# классы соответствующих соединений с базами данных, обеспечивающие стабильную и корректную работу.
  3. Писать программы, которые будут валидировать данные и исправлять в них ошибки.

В процессе работы предстоит предлагать возможные решения поставленных задач, объяснять их достоинства и недостатки.

Работать предстоит с СУБД Microsoft SQL Server. В некоторых случаях придется сталкиваться с другими СУБД (не обязательно SQL, не обязательно реляционными) для обеспечения оптимизированного доступа к специфическим данным. Например, использование специализированных СУБД для хранения временных рядов.
Возможно рассмотрение альтернативных СУБД в случае достаточной аргументации.

На очном собеседовании хотелось бы видеть кандидата, который обладает достаточным теоретическим базисом для ответа на вопросы из группы «Теоретические вопросы» и который сможет провести конструктивную беседу на тему задачи из группы «Открытые проблемы».

Вопросы по базам данных:

  1. Что такое LINQ в языке C#?
  2. Что такое LINQ TO SQL? Каким образом LINQ TO SQL генерирует оптимизированные запросы к БД?
  3. Что такое Dynamic SQL? Зачем оно надо? В каких случаях без него нельзя обойтись?
  4. Что такое ORM? Какие популярные ORM есть для платформы .NET, в чем заключаются их достоинства и недостатки?
  5. Каким образом происходит сетевое взаимодействие между ORM-прослойкой и СУБД?
  6. Что такое IPC (Inter-Process Communication)? Приведите и опишите минимум четыре примера.
  7. Каким образом IPC связано с работой с СУБД?
  8. Классификация нормальных форм БД.
  9. Что такое хранимые процедуры? Какие задачи они решают? Можно ли решить эти задачи без помощи хранимых процедур?
  10. SQL Server. Что такое View? Что такое Index? Что такое Constraint?
  11. SQL Server. Способы авторизации/аутентификации.

Вопросы по C#:

  1. Что такое Extension-methods (методы расширения)?
  2. В чем различие между Thread.Start() и Task.Run()?
  3. Как связаны между собой классы Task, TaskCompletionSource, CancellationTokenSource? Какие задачи они решают?
  4. Расскажите про интерфейс IEnumerable<T>.
  5. Расскажите про интерфейс IQueryable<T>.
  6. Расскажите про Expression Tree.
  7. Boxing/Unboxing. Зачем оно нужно и к каким проблемам приводит?
  8. Как связаны между собой call stack и heap (области памяти)? Что такое сборщик мусора, зачем он нужен?
  9. Расскажите про конструкции синхронизации потоков.
  10. Концепция асинхронных функций (async/await). Как этим пользоваться?
  11. Каким образом может оцениваться сложность работы алгоритма?
  12. Что делают конструкции «yield break», «yield return»?

В будущем здесь появятся примеры простых практических задач, которые вы должны уметь решать.

Очное собеседование будет проходить в два этапа.
На первом вам будут задаваться некоторые теоретические вопросы.
Если вы пройдете первое собеседование, то вам будет предложено поработать с нашей командой в течение дня и выполнить небольшое практическое задание.

Если вы чувствуете, что готовы к нашему собеседованию — пишите на cooperation@dreamteam.investments с пометкой «DataBase-программист».

ASP.NET MVC разработчик

Основные задачи:

  1. Перенос на ASP.NET и последующее поддержание основного сайта компании dtin.ru.
  2. Решение задач для алго-отдела компании, связанных с веб-технологиями. В основном — визуализация данных.
  3. Решение задач для аналитического отдела компании. Включает в себя большую работу с сайтом, внедрение личного кабинета и изменение контента.

В процессе предстоит много разбираться с технологией ASP.NET и отвечать на вопросы «как оно работает».
Если вы собираетесь использовать в своей работе сторонние библиотеки на C# / Javascript, будьте готовы аргументировать свое мнение «почему это надо использовать» и суметь «на пальцах» объяснить, что на самом деле делает эта библиотека.
Представьте, что вам будет нужно объяснить как работает эта библиотека людям, которые умеют писать на языке ассемблера / языке C.

На очном собеседовании мы хотим видеть кандидата, который способен сказать про себя:

  1. "Я могу решать задачи на HTML, CSS, JavaScript так, чтобы оно работало."
  2. "Я понимаю и могу объяснить человеческим языком как работают мои приложения на HTML, CSS, JavaScript."
  3. "Я имею базовые представления о проблемах безопасности в вебе и могу обсуждать с коллегами эти проблемы."
  4. "Я могу быстро поднять ASP-сервер и сделать на нем простейшую страницу."

и который не испугается выражений:

  1. Передача массива байт по сокетам.
  2. Передача сообщения некоторого протокола по сокетам.
  3. Стек протоколов OSI.
  4. Асинхронные функции.
  5. Обработчик события(в терминах клиент-серверного взаимодействия).
  6. Потоки в ASP.NET.

Также кандидат должен быть готов отвечать на вопросы:

  1. Razor:
    1. @{ var text = "text"; } @text
    2. @"text"
    3. @{ return "text"; }

    Какие из вышеперечисленных вариантов будут работать? Какие не будут и почему?

  2. Что такое Ajax? Как использовать в ASP.NET MVC?
  3. Что такое ActionMethod?
  4. Какие варианты перенаправления существуют в ASP.NET?
  5. Что такое интерфейс IRegisteredObject?
  6. Чем отличаются методы
    1. RenderBody.
    2. RenderSection.
    3. RenderPage.

  7. Расскажите про Expression Tree.
  8. Перечислите основные атрибуты (в смысле языка C# / платформы CLR) APS.NET MVC.

Если вы считаете, что готовы к собеседованию — пишите на cooperation@dreamteam.investments с пометкой «ASP.NET MVC разработчик».

Аналитик BigData

Чем предстоит заниматься:

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

Образование и навыки:

  1. Умение программировать.
  2. Умение выдвигать гипотезы и применять способы их проверки.
  3. Знание математических методов класса Machine Learning.
  4. Практические знания в области Machine Learning.
  5. Хорошая математическая подготовка, понимание принципов математической статистики и анализа.

Если вы считаете, что готовы к собеседованию — пишите на cooperation@dreamteam.investments с пометкой «Аналитик BigData».

По всем вопросам можно писать сюда: cooperation@dreamteam.investments (с пометкой «Вопрос по вакансиям»)