bascomo
bascomo личный блог
22 декабря 2023, 23:28

Синхронное тестирование портфеля

Речь пойдёт о тестировании портфеля торговых систем или портфеле инструментов — не имеет значения.
Уже год как родилась в голове эта мысль, а оформленность у неё появилась после торгов на Binance в мае этого года.

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

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

Конечно, тут нужно будет зафиксировать долю депозита, выделенную на каждого агента/инструмент, но не абсолютную, а относительную.

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

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

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

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

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

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

Декабрь продуктивен на идеи, а руки всего две и одна голова.
В алготрейдинге, думается, основная проблема состоит в том, что можно нагенерировать овердохера идей, а вот проверять их — трудоёмкое и, по выхлопу, неблагодарное занятие. Впрочем, это касается не только алготрейдинга, да и не только трейдинга вообще, а и любой исследовательской работы. Но искать команду для разработки торговых систем, их тестирования и ввода в эксплуатацию — это ещё более неблагодарное занятие. Все хотят постричь купоны, а думать, анализировать и прилагать усилия желающих как раз те 3 мифические процента зарабатывающих на биржах. И им участие в командах, похоже, и даром не встало.
54 Комментария
  • Ho_Chu
    23 декабря 2023, 00:00
    ну почему же? думающие как раз и анализируют и прилагают усилия...
    но до тех пор, пока кодеры считают, что могут обойтись без математиков, успеха они не достигнут, а два в одном встречаются настолько редко, что их вклад можно не учитывать… как правило, они не пиарят ни себя, ни свои успехи )) им просто это не нужно
  • Главком Главком
    23 декабря 2023, 00:27
    Ещё пару миллионов переборов стратегий и должно прийти понимание, что алго не для поиска, а для автоматизации найденного.
      • Главком Главком
        23 декабря 2023, 00:45
        bascomo, у меня так было, но я тебя все равно поддерживаю, ибо не простое это дело
  • SergeyJu
    23 декабря 2023, 09:46
    В пределах одного рынка я особых проблем не вижу. Для примера, рынок фортс. При каждом начислении /списании вариационки изменяется состояние денег на счете. И при открытии новых сделок совсем несложно рассчитать необходимое количество фьючерсов, округлив до целого. 
    Переброски денег между рынками  делаем руками, причем иногда это может занять не один день. Тут уже можно, я думаю, так и вести межрыночные расчеты, не опускаясь до уровня отдельных систем. 
      • SergeyJu
        23 декабря 2023, 15:03
        bascomo, у меня она имитируется переоценкой по итогу дня при моделировании, а квике есть просто деньги на счету, куда вариационка зачисляется/списывается. 
          • SergeyJu
            23 декабря 2023, 15:07
            bascomo, у меня и то, и другое учтено при моделировании. 
  • Ho_Chu
    23 декабря 2023, 11:09
    и ещё пару слов вдогонку…
    кодер, как правило, ничего не знает про устойчивость по Ляпунову… поэтому у него возникает масса вопросов, подобных тому, которые мы видим от автора в последние месяцы...
    а математик не только понимает смысл этого, но и может простыми и доступными словами объяснить кодеру, как этого достичь, не прибегая к сложным размышлениям или алгоритмам
      • Ho_Chu
        23 декабря 2023, 19:10
        bascomo, ну до тех пор, пока Вы будете отрицать математику, довольствуясь арифметикой, Вы будете создавать подобные темы
          • Ho_Chu
            23 декабря 2023, 19:12
            bascomo, у меня была пятерка за спецкурс по методам Монте-Карло… емнип ))
              • Ho_Chu
                23 декабря 2023, 19:28

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

                ну или мне самому надо стать кодером, а это, мягко говоря, не моё… моя задача — сделать модель, а задача кодера — добиться того, чтобы эта модель точно реализовывалась в программном коде

                и проблема в том, что сделать это никто не может ))

                 

                ЗЫ надеюсь, здесь тема не для того, чтобы мериться линейками ))

                  • Ho_Chu
                    23 декабря 2023, 19:38
                    bascomo, нет, решение задачи заключается в том, чтобы создать союз математики и кодинга… сапоги должен тачать сапожник ))
                    я пытаюсь что-то делать на уровне визуального программирования, но это всё не то...

                    у математиков и у кодеров 2 принципиально разных взгляда на мир… и пока они не договорятся между собой, ахулиардов им не видать… каждому ))
                      • Ho_Chu
                        23 декабря 2023, 19:43
                        bascomo, ну почему же? у Вас есть один знакомый математик как минимум ))) что Вам мешает позвать его? излишне расчесанное ЧСВ?
                        а вот мне сложнее: все кодеры слишком заняты, чтобы решать мои простенькие задачки
                • Replikant_mih
                  23 декабря 2023, 20:58
                  Ho_Chu, 
                  который делал бы то, что хочу я… не то, что умеет он

                   

                  А, не, мой предыдущий коммент нужно было к этому куску вставить))).




                  >> «я не могу найти кодера, который делал бы то, что хочу я… не то, что умеет он, а то, что хочу я»

                  Есть вполне рабочая мера «качества» разраба — синьёрность. Ну там есть конечно опыт с технологиями или языком, обычно нормальный миддл или сиьёр, если ему дать нормальное ТЗ, всё сделает хорошо.

                  • Ho_Chu
                    23 декабря 2023, 21:14
                    Replikant_mih, ну тут, видимо, одни синьёры собрались… ))) я помню одного, который запросил 1,5 мильёна за сов на обычной машке )))

                    я предложил ТЗ на 27 страниц, так он не стал читать, а попросил объяснить простыми словами…

                    цуко, я для кого это писал? для тех, кто читать не умеет? давай ты будешь мне платить по 10 тыр за каждый свой вопрос, который не отражен в моем ТЗ?
                    так никто не согласился )))
    • SergeyJu
      23 декабря 2023, 15:05
      Ho_Chu, ладно по Ляпунову, хочется простой человеческой робастности. Чтобы область подходящих решений была побольше, покруглее и поглаже. 
      • Ho_Chu
        23 декабря 2023, 19:11
        SergeyJu, меня учили Ляпунову, робастность мы не проходили )))
        хотя и Вашим пожеланиям есть довольно простое математическое решение
        • SergeyJu
          23 декабря 2023, 22:09
          Ho_Chu, легко найти простое неправильное решение. А вот найти практически полезное отчего-то намного сложнее. 
          • Ho_Chu
            23 декабря 2023, 22:15
            SergeyJu, да, есть даже закон Мерфи: все сложные задачи имеют легкие, простые для понимания, неправильные решения ))))
          • Ho_Chu
            24 декабря 2023, 09:35
            SergeyJu, да еще чтобы оно не было переобученным )))
            • SergeyJu
              24 декабря 2023, 11:00
              Ho_Chu, будет, будет переобученным, даже не сомневайтесь. Главное, чтобы был еще оставался и обученным. 
              Все боятся переобучения как чумы, но обычно не понимают, что если доля шумов велика, любая система к ним подстроится. Главное мера, чтобы подстройка под сигнал ВМЕСТЕ с подстройкой под шумы оставалась работоспособной на будущее. 
              Приведу пример. 
              При оптимизации получаю Шарп, допустим, 3,5, на следующий год он оказывается по факту 2. В принципе — неплохо. Можно работать, но очевидно, что часть оптимизации была пере, подгонка к шуму.
              • Ho_Chu
                24 декабря 2023, 11:14
                SergeyJu, ну шарпу 3,5 и даже 2 можно только позавидовать!!!
                • SergeyJu
                  24 декабря 2023, 11:33
                  Ho_Chu, ну,3,5 это же бэктестинг, и всегда остаешься в непонятках, что там с будущим с будет. 
                  Тут сумасшедший квант хвастается, что у него шарп не менее 4 по факту торговли. А раньше у него и близко такого не было. Их не догонишь
                  • Ho_Chu
                    24 декабря 2023, 11:42
                    SergeyJu, так хвастаться никто не запрещает ))
                    а кто такой сумасшедший квант?
                    • SergeyJu
                      24 декабря 2023, 13:05
                      Ho_Chu, MadQuant
    • Replikant_mih
      23 декабря 2023, 20:54

       

      Ho_Chu, 

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


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

       

      У вас очень biased представление — вы, видимо, математик?)

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

      • Ho_Chu
        23 декабря 2023, 21:17
        Replikant_mih, я способен объяснить то, что я хочу на уровне кодера…
        проблема только в том, что кодер не хочет делать то, что нужно мне… кодер за ахулиард хочет мне сделать то, что умеет он, а не то, что нужно мне… а это 2 разные вещи… и в этом вся проблема
          • Ho_Chu
            23 декабря 2023, 21:44

            bascomo, да, Вы правы, я и нашел… но кодер, как только получил полное ТЗ, пропал как ежик в тумане и уже месяц ничего не пишет… искать другого?

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

              • Ho_Chu
                23 декабря 2023, 22:20

                bascomo, да мне то зачем?

                 

                ведь не я из месяца в месяц пытаюсь доказать всем, что математика мне не нужна, от слова «совсем»

                ситуация напоминает женщину из анекдота, которая упрекает лежащего в луже мужика в том, что он отвратительно и неприлично пьян ))

                на что мужик ей отвечает, что это именно она отвратительно и неприлично некрасива, а он наутро трезвый будет )))

  • Replikant_mih
    23 декабря 2023, 21:05
    В алготрейдинге, думается, основная проблема состоит в том, что можно нагенерировать овердохера идей, а вот проверять их — трудоёмкое и, по выхлопу, неблагодарное занятие. Впрочем, это касается не только алготрейдинга, да и не только трейдинга вообще, а и любой исследовательской работы.


    Да, есть такое. Хотя это, конечно, далеко не для всех актуально, скорее для «генераторов идей» (не у всех этот скилл развит).

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

  • Ho_Chu
    23 декабря 2023, 22:28
    приведу простой пример: я показал одному коллеге решение на наших фьючах, основанное на теории игр, и попросил кое-что сделать в общих интересах )))
    на что он опять сделал не то, что просил я, а то, что умел сделать он и предложил мне «доработать напильником»…
    а я ничего тяжелее шариковой ручки в руках не держал ))) и как тут быть?
    ты либо сам разбирайся в равновесии Нэша, либо делай то, что я тебя прошу...

      • Ho_Chu
        23 декабря 2023, 22:38

        bascomo, мне абсолютно все равно, какой долей в 200-метровой лодке на багамах буду владеть я в том коллективе, который будет владеть ей совокупно… 1/3 или 1/16 — все равно… ведь Вы так до сих пор и не позвали оформлять багамскую визу

         

        ЗЫ и не стоит преуменьшать умение математиков писать формУлы… иногда это оказывается полезным не только лишь для математиков ))) мало того, не каждый может это делать © Кличко ))

          • Ho_Chu
            23 декабря 2023, 22:42
            bascomo, это и печалит ))

          • Ho_Chu
            24 декабря 2023, 09:34
            bascomo, с другой стороны, Вы тоже что-то не торопитесь приглашать оформлять багамскую визу )))
            тоже от скромности?

              • Ho_Chu
                24 декабря 2023, 16:44
                bascomo, не принципиально
  • Whalerman
    24 декабря 2023, 16:32
    bascomo, приветствую! 

    Эта задачка не из простых. Нигде не видел нормальной реализации, максимум что бывает это корреляционная матрица скриптов в пуле, поэтому как всегда придется все писать самому. Надо объединять всю логику на уровне портфеля, полностью воспроизводить денежные потоки между скриптами, маржинальный кредит, дивиденды, комиссии, расчёт маржинального обеспечения на уровне брокера (чтобы система не набирала бесконечный кредит) и много ещё чего. Плюс весь расчёт надо выполнять в логике «по кассе» и «по начислению» для корректности.

    Я делаю это следующим образом:
    1) по каждому скрипту экспортирую матрицу с сигналами (вектор входа, вектор выхода, вектор в позиции) и индексный вектор с датами;
    2) объединяю все данные (котировки, сигналы, дивиденды и тп) в матрицы (они очень объёмные для примера у меня на 1000 скриптов (столбцы) и строки это 18 лет на часовиках, одна матрица весит 3 Гб). На этом этапе добавляется весовая модель портфеля;
    3) дальше по сути идут векторные операции с минимумом циклов (иначе простой обсчет одного витка будет идти сутки);
    4) в конце когда вся логика будет готова можно уже проводить портфельную оптимизацию.

    У меня это достаточно много кода (где-то 2 тыс строк или около того так как разбито на несколько файлов). И расчет на многоядерных вычислениях все равно занимает не мало времени и ресурсов требует много (но опять же у меня много ботов одновременно работает и тест за 18 лет на часовиках).

    С уважением!
      • Whalerman
        03 февраля 2024, 23:48

        bascomo,

        прошу прощения только что увидел вопрос давно не заходил:
        > тест на 952 бота;
        > часовой таймфрейм с 01/01/2005 года, для нормализации я использую единый вектор времени с 07:00 утра до 0:00 (118 000 строк)
        Отсюда несложно посчитать что типичная матрица с данными будет размером 952 * 118 000 (112,3 млн значений) и таких матриц много… )

        по времени ориентировочно:
        > выгрузка всех данных (отдельная процедура выполняется один раз) — около 30 минут (7 Гб данных в txt формате);
        > подготовка данных к расчетам (у меня это отдельная процедура так как из данных на предыдущем шаге я тестирую различные портфели) — около 10 минут;
        > расчет 1 цикла (= сценария) около до 1.5 минуты (на портфелях где бумаг меньше быстрее соответственно в разы);
        > тестирование портфеля тут уже можно умножать время одного цикла на количество прогонок с учетом многоядерности (но тут я упираюсь в отношение количества ядер к оперативке которой надо много для таких расчетов, моих 64 Гб явно маловато).

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

        С уважением!

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

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