Блог им. AleksandrBaryshnikov

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

    • 22 декабря 2023, 23:28
    • |
    • bascomo
  • Еще
Речь пойдёт о тестировании портфеля торговых систем или портфеле инструментов — не имеет значения.
Уже год как родилась в голове эта мысль, а оформленность у неё появилась после торгов на Binance в мае этого года.

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

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

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

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

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

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

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

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

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

Декабрь продуктивен на идеи, а руки всего две и одна голова.
В алготрейдинге, думается, основная проблема состоит в том, что можно нагенерировать овердохера идей, а вот проверять их — трудоёмкое и, по выхлопу, неблагодарное занятие. Впрочем, это касается не только алготрейдинга, да и не только трейдинга вообще, а и любой исследовательской работы. Но искать команду для разработки торговых систем, их тестирования и ввода в эксплуатацию — это ещё более неблагодарное занятие. Все хотят постричь купоны, а думать, анализировать и прилагать усилия желающих как раз те 3 мифические процента зарабатывающих на биржах. И им участие в командах, похоже, и даром не встало.
54 комментария
ну почему же? думающие как раз и анализируют и прилагают усилия...
но до тех пор, пока кодеры считают, что могут обойтись без математиков, успеха они не достигнут, а два в одном встречаются настолько редко, что их вклад можно не учитывать… как правило, они не пиарят ни себя, ни свои успехи )) им просто это не нужно
avatar
Ещё пару миллионов переборов стратегий и должно прийти понимание, что алго не для поиска, а для автоматизации найденного.
Главком Главком, кому как
avatar
bascomo, у меня так было, но я тебя все равно поддерживаю, ибо не простое это дело
В пределах одного рынка я особых проблем не вижу. Для примера, рынок фортс. При каждом начислении /списании вариационки изменяется состояние денег на счете. И при открытии новых сделок совсем несложно рассчитать необходимое количество фьючерсов, округлив до целого. 
Переброски денег между рынками  делаем руками, причем иногда это может занять не один день. Тут уже можно, я думаю, так и вести межрыночные расчеты, не опускаясь до уровня отдельных систем. 
avatar
SergeyJu, при тестировании ещё не никакой вармаржи :) 
avatar
bascomo, у меня она имитируется переоценкой по итогу дня при моделировании, а квике есть просто деньги на счету, куда вариационка зачисляется/списывается. 
avatar
SergeyJu, по итогу дня и после каждой сделки — не одно и то же. Если сделки совершаются с частотой примерно раз в день или реже — это адекватный подход, а если чаще — то нет.
avatar
bascomo, у меня и то, и другое учтено при моделировании. 
avatar
и ещё пару слов вдогонку…
кодер, как правило, ничего не знает про устойчивость по Ляпунову… поэтому у него возникает масса вопросов, подобных тому, которые мы видим от автора в последние месяцы...
а математик не только понимает смысл этого, но и может простыми и доступными словами объяснить кодеру, как этого достичь, не прибегая к сложным размышлениям или алгоритмам
avatar
Ho_Chu, Каждому свое
avatar
bascomo, ну до тех пор, пока Вы будете отрицать математику, довольствуясь арифметикой, Вы будете создавать подобные темы
avatar
Ho_Chu, И что?
avatar
bascomo, у меня была пятерка за спецкурс по методам Монте-Карло… емнип ))
avatar
Ho_Chu, И где результаты? Миллиарды где?
avatar

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

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

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

 

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

avatar
Ho_Chu, Вы же говорили, что Вам надо самому заняться кодингом, вот и займитесь. Заодно, поймёте, каково это - воплощать в коде свои идеи. А то, что стороны, наверное, кажется, что это раз плюнуть
avatar
bascomo, нет, решение задачи заключается в том, чтобы создать союз математики и кодинга… сапоги должен тачать сапожник ))
я пытаюсь что-то делать на уровне визуального программирования, но это всё не то...

у математиков и у кодеров 2 принципиально разных взгляда на мир… и пока они не договорятся между собой, ахулиардов им не видать… каждому ))
avatar
Ho_Chu, Да вот что-то сапожник никак не находится. Придётся ходить в лаптях до гроба, выходит
avatar
bascomo, ну почему же? у Вас есть один знакомый математик как минимум ))) что Вам мешает позвать его? излишне расчесанное ЧСВ?
а вот мне сложнее: все кодеры слишком заняты, чтобы решать мои простенькие задачки
avatar
Ho_Chu, 
который делал бы то, что хочу я… не то, что умеет он

 

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




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

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

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

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

цуко, я для кого это писал? для тех, кто читать не умеет? давай ты будешь мне платить по 10 тыр за каждый свой вопрос, который не отражен в моем ТЗ?
так никто не согласился )))
avatar
Ho_Chu, ладно по Ляпунову, хочется простой человеческой робастности. Чтобы область подходящих решений была побольше, покруглее и поглаже. 
avatar
SergeyJu, меня учили Ляпунову, робастность мы не проходили )))
хотя и Вашим пожеланиям есть довольно простое математическое решение
avatar
Ho_Chu, легко найти простое неправильное решение. А вот найти практически полезное отчего-то намного сложнее. 
avatar
SergeyJu, да, есть даже закон Мерфи: все сложные задачи имеют легкие, простые для понимания, неправильные решения ))))
avatar
SergeyJu, да еще чтобы оно не было переобученным )))
avatar
Ho_Chu, будет, будет переобученным, даже не сомневайтесь. Главное, чтобы был еще оставался и обученным. 
Все боятся переобучения как чумы, но обычно не понимают, что если доля шумов велика, любая система к ним подстроится. Главное мера, чтобы подстройка под сигнал ВМЕСТЕ с подстройкой под шумы оставалась работоспособной на будущее. 
Приведу пример. 
При оптимизации получаю Шарп, допустим, 3,5, на следующий год он оказывается по факту 2. В принципе — неплохо. Можно работать, но очевидно, что часть оптимизации была пере, подгонка к шуму.
avatar
SergeyJu, ну шарпу 3,5 и даже 2 можно только позавидовать!!!
avatar
Ho_Chu, ну,3,5 это же бэктестинг, и всегда остаешься в непонятках, что там с будущим с будет. 
Тут сумасшедший квант хвастается, что у него шарп не менее 4 по факту торговли. А раньше у него и близко такого не было. Их не догонишь
avatar
SergeyJu, так хвастаться никто не запрещает ))
а кто такой сумасшедший квант?
avatar
Ho_Chu, MadQuant
avatar

 

Ho_Chu, 

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


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

 

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

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

avatar
Replikant_mih, я способен объяснить то, что я хочу на уровне кодера…
проблема только в том, что кодер не хочет делать то, что нужно мне… кодер за ахулиард хочет мне сделать то, что умеет он, а не то, что нужно мне… а это 2 разные вещи… и в этом вся проблема
avatar
Ho_Chu, проблема, как и всегда, в Вас. Знали бы, что делаете, были бы уверены — и кодера бы нашли, и сами бы научились. В современном мире вообще не проблема найти то, что нужно, если знаешь, что искать
avatar

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

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

avatar
Ho_Chu, У Вас прямо пунктик. Перечитайте свои комментарии. Прямо красная линия.
avatar

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

 

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

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

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

avatar
Ho_Chu, Ну не мне же это надо. Проекция - один из основных механизмов человеческой психики. Все ищут свои недостатки в других.
avatar
E L, это не то же самое, что описано в посте
avatar
В алготрейдинге, думается, основная проблема состоит в том, что можно нагенерировать овердохера идей, а вот проверять их — трудоёмкое и, по выхлопу, неблагодарное занятие. Впрочем, это касается не только алготрейдинга, да и не только трейдинга вообще, а и любой исследовательской работы.


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

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

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

avatar
Ho_Chu, Начать с того, что не считать математиков брахманами. На поверку-то ничего большего, чем бумагу формулами марать, не способны. Во-первых, определиться с целью. Во-вторых, составить план и каждой задаче определить конкретный срок. У нас, кстати, как раз в этом месте конструктивный диалог в ходе нашей встречи исчез. Ну и написать такое ТЗ, которое будет понятно не только вам. Пусть его аычитает человек, далёкий от математики, и даст свои замечания. Если есть нормальное понятное ТЗ, описан план работ и есть сроки, то от разработчика уже почти ничего не зависит и весь его объём работ в идеале составляет 20%. Но это в идеале - если разработчик уже имеет опыт написания торговых приложений и знаком с рыночной терминологией.
avatar

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

 

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

avatar
Ho_Chu, ну такими темпами никакой
avatar
bascomo, это и печалит ))

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

avatar
Ho_Chu, не фанат багам
avatar
bascomo, не принципиально
avatar
bascomo, приветствую! 

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

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

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

С уважением!
avatar
Whalerman, сколько времени занимает расчёт? Какое число агентов, какой диапазон времени и какой таймфрейм? 
avatar

bascomo,

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

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

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

С уважением!

avatar

теги блога bascomo

....все тэги



UPDONW
Новый дизайн