elektroyar
elektroyar личный блог
07 декабря 2019, 19:17

Про программирование в алготрейдинге и полезные навыки

По моему опыту в алготрейдинге (под алготрейдингом я подразумеваю поиск закономерностей и их использование) большая часть времени уходит на исследования, это примерно 90% времени. Однако, часто можно услышать критику примерно следующего плана.
  • Нужно писать код на питоне/джаве, можно в два счета набросать торгового робота. Нафиг Си и С++, сложна.
  • Не нужно изобретать велосипеды, все уже сделано за нас. Зря потратить время, бери готовое и действуй. Метатрейдер в помощь.
  • Нужно всегда писать чистый код, а не говнокод. 
Если все это верно, то получается, что успех в алготрейдинге (да и в IT) должен зависеть от этих факторов. Однако, к примеру, на практике большая часть доли в проекте принадлежит обычно не программистам (т.е. людям, которые вообще могут не уметь программировать), хороший код не обязательно принесет много денег, да и сложные алгоритмы порой без разницы, на каком языке реализовывать, быстрее они не напишутся.

Если объяснить проще, то успех не равен чистоте, хорошести и прочим характеристикам кода. Тогда почему происходит акцентуация на подобные факторы? 

В качестве примера, возьмем начальное условие, что известен алгоритм «грааля» (допустим, случайно попала инсайдерская информация), но навыков в программировании ровно как у вчерашнего студента. И ситуация наоборот: допустим, навыки программирования как у senior'a, за плечами лет 20 работы в разных крупных фирмах, но при этом в трейдинге — полный ноль. 

Сдается мне, в первом случае шансов построить рабочую ТС куда выше. Да и по опыту общения с прогерами могу сказать, что тру программисты обычно не столь рискованные парни, чтобы идти в подобные проекты. Поэтому во втором случае история даже не начнется (скорее всего).

Поэтому, я бы выделил другие важные пункты в алготрейдинге (и не только в алго):

  • Нужно уметь работать с переживаниями. Эмоции могут влиять на восприятие, заставлять принимать неверные решения, вызывать избирательность внимания, что в конечном счете может свети результат работы к нулю, даже если это исследования. В алготрейдинге стресса хватает, поэтому этот пункт актуален. Ошибаются все люди, но если есть адекватное восприятие реальности, то после ошибки можно продолжить эффективно работать над проектом. Если же переживания поглощают сознание, то тут уже ничего не сделаешь, все пойдет по неудачному сценарию, так как по факту нет контроля над ситуацией, даже над самим собой нет контроля. 
  • Важно вовремя соскочить с идеи, если становится понятно, что идея не несет в себе смысла. К примеру, можно угробить на нейросети несколько лет, пытаясь заставить их прогнозировать рынок. А можно, повозившись с нейросетями месяц-другой, прийти к выводу, что эта задача данным инструментом просто так не решается, и приступить к другим исследованиям.
  • Не путать скептицизм с предвзятым негативным мнением. Риск может быть уместен. Впрочем, данный пункт все алготрейдеры скорее всего соблюдают, иначе не пошли бы в данную сферу деятельности, а прислушались бы к мнению большинства.
  • В разработках нужно уметь не зарываться в сами разработки, важен результат. Поэтому говнокод порой уместен.
  • Если речь идет про создание достаточно сложной системы, то писать много кода придется в любом случае, и разница между Си, С++, джавой, питоном тут будет стираться. Если это высокочастотная торговля, то конечно выбор очевиден. Но в других случаях может показаться, что проще будет работать в более «простых» языках. На самом деле, если есть хоть какой-то опыт в программировании, то мне кажется что язык программирования не столь важен, он за вас сложный алгоритм не распишет и всю систему не выстроит. Гемороя будет в любом случае много, а современные языки во много схожи между собой, имеют схожий синтаксис. Не думаю, что тут есть принципиальная разница. Кто начал с питона, тому проще будет на питоне. Кто начал с Си, тому проще будет дальше на Си. Разве что для питона много библиотек для машинного обучения.
  • Велосипед конечно не всегда нужен. Но на практике, если велосипед небольшой, на него не уйдет много времени, и уж точно он не станет черной дырой проекта, потому что черной дырой являются исследования закономерностей, которые могут при желания растянуться до бесконечности.
47 Комментариев
  • Павел
    07 декабря 2019, 19:26
    Странно что алготрейдеры не юзают Rust
    • suren
      07 декабря 2019, 19:40
      Павел, нафиг это г**но в алготрейдинге не уперлось.
      • Павел
        07 декабря 2019, 20:13
        suren, ну может потому что безопасность и скорость? Я так смотрю, что безопасность вообще мало кого волнует, ну будет UB ну и хрен с ним) А Rust это скорость С++ и безопасность, в то же время есть так необходимые высокоуровневые конструкции, чтобы не изобретать велосипеды. В С++ нет даже пакетного менеджера 
  • Ray Badman
    07 декабря 2019, 19:31
    за плечами лет 20 работы в разных крупных фирмах

    Лично я опыт в крупных фирмах не считаю, там в основном заняты политиграмы нежели поднятия квалификации.
  • ezomm
    07 декабря 2019, 19:59
    Автор? В чем мораль? Ищем индюки или ставим заявки перед большим объемом?
  • Антон Иванов
    07 декабря 2019, 21:03
    Ну кто-то и в ТСЛабе нормально себе живет и не заморачивается 
  • Михаил Ка
    07 декабря 2019, 21:34
    Все, что написал автор верно, но не только для алготрейдинга, а вообще для любой предметной области, где используется прогаммирование.
  • Пафос Респектыч
    07 декабря 2019, 21:54
    В то же время верно и обратное — в алготрейдинге так же как и в просто трейдинге важно понимать, в чём именно состоит твоё рыночное преимущество? Мало хорошо уметь программировать, это умеет очень много народу и очень хорошо умеет. Нужно ещё знать и понимать что-то такое, что мало кто знает и понимает получается, и чтобы это что-то было не просто красивой штукой, в которой прикольно разобраться, но и давало реальное преимущество в торговле.
  • Пафос Респектыч
    07 декабря 2019, 22:05
    То есть например те же нейросетки или ещё какой другой подход мало просто попробовать, надо сначала знать теорию, чтобы представлять как именно пробовать и куда копать. Дерево вариантов растёт очень быстро )
    А если просто брать библиотечки и ваять что-то простенькое и пробовать — ничего серьёзного так найти нельзя.
  • Replikant_mih
    07 декабря 2019, 22:12
    Согласен по основным моментам, да. Очень важны какие-то другие качества, программистов в трейдинге много, хороших тоже не мало, математики и т.д., ни что из этого само по себе не дает какого-то прорывного преимущество. На мой взгляд важнее такие вещи как грамотное отношение к риску, понимание вероятностной природы происходящих вещей, настойчивость, гибкость, логическое мышление, творческое начало (это очень важный компонент) и вот это вот все.
  • Karim
    07 декабря 2019, 22:46
     Пока есть такое глубокое заблуждение, что якобы на рынке есть некая закономерность, которую вижу только я и больше никто, и я сейчас все это запрограммирую и получу кучу бабла, так вот, пока есть такое, мы будем зарабатывать. Ну нет на рынке никаких закономерностей. Как только они появляются, куча людей кидаются на них и они исчезают. 
    • Пафос Респектыч
      07 декабря 2019, 22:52
      Karim, 

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

      Это тоже глубокое заблуждение ))
    • Кайрос
      13 декабря 2019, 17:49
      Karim, а она тем не менее есть))) 
  • Дмитрий Овчинников
    07 декабря 2019, 23:04
    Проходят годы, а проблемы, волнующие трейдеров не меняются.
    Процитирую целиком лучший пост на эту тему из уважения к героям прошлых лет (2012 год):

    Сказка о феях Эпиграф:
    Танкисты (Т) посреди леса, жутко матерясь, натягивают гусеницу. Вдруг появляется Лесная Фея (Ф) и спрашивает:
    Ф: -Танкисты, танкисты, а что это вы такое делаете?
    Т: -Трахаемся!
    Ф: -А хотите по-настоящему потрахаться, со вкусом?
    Т: -Ну дык, конечно хотим!
    Взмахнула Фея своей волшебной палочкой, и у танка отвалилась
    башня...

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

    Так вот приходит такой трейдер в творческий тупик, и начинает сразу думать о путях выхода, и как правило речь идет не о том, чтобы искать решения в себе. А о поиске внешних средств, несколько простых кейсов, чтобы было понятно о чем я:
    1. Excel медленно считает, нужно написать свою программу для расчетов
    2. Эх, если бы у меня была программа Х я бы натянул рынок, не то что с этой программой Y
    3. У меня не получается торговать руками, но вот если купить робота за 3000 рублей, вот тогда я стану богатым
    4. Хранить историю котировок в текстовых файлах не кошерно, надо придумать свой формат сжатия
    5. Программа Z не умеет тестировать тот класс стратегий, что мне надо напишу ка я свой фреймворк/бэктестер/терминал для этого
    6. А напишу ка я свой бэктестер, потому-что свой, потому-что удобнее и не то что у других

    Все это, господа — секс с феями. Все трейдеры в душе перфекционисты, все хотят быстрее, выше, сильнее. Но время — ресурс невосполнимый, и тратя его на одно дело, мы забираем его у других. Поэтому я оглянулся назад и оценил, сколько работы я сделал зря ради красоты и перфекционизма. Многие проекты были заброшены сразу после того как доведены до стадии какой-то работоспособности. Мне стало грустно, конечно опыт остался, очередного робота(order management system) или бэктестера я могу за пол месяца написать на хорошем уровне, но не хочу!

    Поэтому выработал для себя несколько правил:
    1. Если проблему можно решить за 1 день, написав под это узкую программу, или за 30 дней, написав под это фреймворк. Нужно писать узкую утилиту, потому как есть вероятность, что больше никогда к этому не вернешься. Однако и утилиту можно сделать гибкой.
    2. Если чешутся руки создать что-то глобальное и красивое, задайся вопросам а науха это надо? Какую конкретно задачу это красивое-доброе-совершенное будет решать, и сколько бенефита оно принесет? Если задача все равно важная, см. п. 1.
    3. Если при решении задачи возникает желание создать что-то глобальное, с формулировкой, например «а хорошо бы иметь свой бэктестер» — значит задача поставлена неверно, или слишком общО сформулирована.
    4. Если задачу можно сделать как-то через жопу имеющимися средствами — делай через жопу
    5. Всегда стараться сократить время на решение задачи путем повышения эффективности. Если есть 100% уверенность повторяемости действий, нужно делать фреймворк. Но не нужно писать новый Амиброкер или Омегу, нужно делать только то, что даже через п.4 не делается. Если решился делать фреймфорк, делай масштабируемую архитектуру (напр для роботов-исполнителей), но реализовывать нужно только, то что потребуется здесь и сейчас для решения задачи.
    6. Для каждого гвоздя должен быть свой микроскоп! Глупо тестировать торговые системы на ассемблере, глупо делать двойную работу переписывая алгоритмы в разных платформах, глупо писать свое если есть уже готовое.
  • 🗝Багатенький Буратина
    07 декабря 2019, 23:30
    С++ используется там, где нужна скорость. Если скорость не нужна — не используйте.
  • VladMih
    08 декабря 2019, 00:50
    Karim, вы будете «зарабатывать на отсутствии закономерностей»?
    Видимо поэтому ваш блог заполнен разными индикаторами )))
    Уровни и кумулятивная дельта — тоже не использование закономерностей?
    Вы либо бредите, либо вводите в «глубокое заблуждение».
    • Karim
      08 декабря 2019, 07:54
      VladMih, эти индикаторы позволяют видеть то, что не видит большинство. А это хоть и маленькое, но приимущество.
      • VladMih
        08 декабря 2019, 11:04
        Karim, я сам индикаторщик.
        А вы уже забыли о чём ВЫ писали, на что я отвечал…
        И будто не видите о чём я спросил, занимаетесь демагогией.
        • Karim
          08 декабря 2019, 12:35
          VladMih, Причем здесь индикаторы и закономерности? Да, видимо я далек от народа и, тем более, от форекса. Сорри…
          • VladMih
            08 декабря 2019, 13:00
            Karim, какая разница форекс или нефорекс?
            Вы действительно далеки… от рынка.
            • Karim
              08 декабря 2019, 13:01
              VladMih, Ну да, и торговать толком не умею.
              • VladMih
                08 декабря 2019, 13:07
                Karim, на 99% уверен, что не умеете. Ваши «19 лет на рынке» в профиле меня не впечатлят, ибо я вижу как вы не держите тему разговора, избегаете конкретных вопросов (два из двух), значит вам проще умничать общими фразами, чтобы не выдать своё реальное «знание».
                1% за «умеете» — это оставляю на везение, оно может быть и 19 лет.
  • VladMih
    08 декабря 2019, 00:53
     почему происходит акцентуация на подобные факторы? 
    Очень просто — программист, считающий себя хорошим специалистом, обычно превозносит именно качества хорошего программиста.

    А я с вами согласен — успех в алготрейдинге зависит больше от алгоритма, чем от его реализации в коде (чистоты, «тяжести»).
    На мой взгляд это очевидно.
  • chizhan
    08 декабря 2019, 03:25
    Забавно видеть, как появляются и теряют популярность легкие высокоуровневые языки: Паскаль — Делфи — Visual Basic — Си шарп и вот теперь Питон(или пайтон). И только C/C++ является вечностью)

    • Павел
      08 декабря 2019, 04:48
      chizhan, ну убийц было много, но пока только Rust реально начал конкурировать и убивать, точнее поглощать и С и С++. А разгадка одна — наследие. Все бы и рады взять что-то получше, но зависят от либ. А Rust такой херак и вот вам совместимость. Неудивительно что сейчас Rust везде — от блокчейна и WASM до андроида и FFI. Для чуть менее требовательных к производительности проектов есть Go. А С++ продолжает маргинализироваться.   
      • chizhan
        08 декабря 2019, 05:06
        Павел, поговорим о вашем ЯП лет этак через 10-15) А так залезая даже в программирование ГПУ или ардуинки, я вижу синтаксис старого доброго Си. Да и кошель биткоина с его мегаблокчейном писался на Си о чем вы. Откройте исходники с гитхаба)

        Так что в действии бритва Оккама «Не следует множить сущее без необходимости»
        • Павел
          08 декабря 2019, 05:34
          chizhan, ну да, биткоин сделали до появления Раста) А так если посмотрите на вакансии связанные с криптой то там поголовно Раст. Язык слишком молодой чтобы вытеснить С и С++ за такой срок полностью. Вроде как есть для Ардуины https://github.com/avr-rust/rust про GPU вот список того что есть http://www.arewelearningyet.com/gpu-computing/ Не эксперт в обоих областях, но вроде не проблема.
  • Кухонный трейдер
    08 декабря 2019, 09:28
    Excel+ass, не?
    А если серьезно, не вижу современных языков, позволяющих на уровне команд проводить множественное разветвление процесса оценки критерия с дальнейшим копанием каждой ветки (ну. типа ЛИСПа). Кто знает, подскажите.
    • Beach Bunny
      08 декабря 2019, 17:30
      Кухонный трейдер, а чем проблема то, компилятор  Lisp есть, берем и пишем то то надо, Lisp правда не особо развивается, НО есть Prolog и для него есть очень хорошие компиляторы и в нем можно писать даже лучше чем на Lisp.
  • Андрей К
    08 декабря 2019, 13:35
    какие прекрасные комменты
  • meat
    08 декабря 2019, 15:50
    вроде же на си самое простое, а потом уже C++/C#/Java и прочие абстракции из библиотек, над которыми ты должен думать как они работают внутри


    • Beach Bunny
      08 декабря 2019, 17:38
      meat, на С самое простое? Ну накидайте по быстрому реализацию универсального динамического массива на С, чтобы потом с этим можно было просто работать — типа как в С++.
      Проще писать на С#/Java благодря довольно большому количеству реализованных классов в SDK и большому количеству имеющихся библиотек и довольно просто работе с памятью. Ну или на JavaScripte c NodeJS.
      • meat
        08 декабря 2019, 17:47
        Sergeyka, у нас разные понятия о простоте ЯВУ

        для вас это прежде всего набор готовых библиотек и сборщик мусора

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн