Речь пойдёт о тестировании портфеля торговых систем или портфеле инструментов — не имеет значения.
Уже год как родилась в голове эта мысль, а оформленность у неё появилась после торгов на Binance в мае этого года.
Если торгуешь пакетом чего-то — инструментов или алгоритмов, и стоит задача капитализации финреза после каждой сделки, то необходимо синхронизировать каждый агент, который выполняет свой вариант торговой системы на конкретном инструменте, друг с другом. Конечно, тщательно учитывать все сопутствующие расходы, вроде комиссий и прочего, округляя в убыточную сторону.
Это нужно сделать для того, чтобы, когда какой-то агент завершил очередную сделку с прибылью или убытком, то общая доступная сумма депозита корректировалась и следующий агент, открывающий сделку, принимал во внимание новый размер доступного капитала.
Конечно, тут нужно будет зафиксировать долю депозита, выделенную на каждого агента/инструмент, но не абсолютную, а относительную.
Далее, нужно синхронизировать обработку свечей агентами так, чтобы в те моменты, когда агент закрывает сделку, корректировался размер общего депозита, а при открытии — размер доступного.
Все агенты смотрят на размер депозита при открытии сделки и знают свою долю в депозите. Таким образом, если после каждой сделки корректировать размер капитала так, как это будет происходить в реальности, можно реализовать тестирование с учётом капитализации вклада каждой сделки в результат общей торговли портфелем.
Ещё один большой плюс, который даст реализация такой схемы — это возможность получить статистику и изучить влияние весов, которые многие хотят припаять к своим полям торговых систем таким образом, чтобы максимизировать прибыль.
Но задача не выглядит как слишком простая, однако, я эту идею положу на полочку поближе и буду на неё поглядывать.
Ещё я думаю о том, что если собираешься торговать пакетом — алгоритмов или инструментов одновременно, то и тестировать тоже нужно такой же пакет или набор, иначе, если тестировать по одной штуке, результаты не будут релевантны ожиданиям, что логично и естественно.
И я отчасти согласен с теми, кто говорит, что их особо не заботит доходность отдельной сделки, потому что они рассчитывают на сложный процент. Меня заботит и сложный процент, и доходность отдельной сделки. К сожалению, ввиду того, что это сложно, я так не делал, а возможно, это меня ещё больше мотивировало бы на результат.
Декабрь продуктивен на идеи, а руки всего две и одна голова.
В алготрейдинге, думается, основная проблема состоит в том, что можно нагенерировать овердохера идей, а вот проверять их — трудоёмкое и, по выхлопу, неблагодарное занятие. Впрочем, это касается не только алготрейдинга, да и не только трейдинга вообще, а и любой исследовательской работы. Но искать команду для разработки торговых систем, их тестирования и ввода в эксплуатацию — это ещё более неблагодарное занятие. Все хотят постричь купоны, а думать, анализировать и прилагать усилия желающих как раз те 3 мифические процента зарабатывающих на биржах. И им участие в командах, похоже, и даром не встало.
но до тех пор, пока кодеры считают, что могут обойтись без математиков, успеха они не достигнут, а два в одном встречаются настолько редко, что их вклад можно не учитывать… как правило, они не пиарят ни себя, ни свои успехи )) им просто это не нужно
Переброски денег между рынками делаем руками, причем иногда это может занять не один день. Тут уже можно, я думаю, так и вести межрыночные расчеты, не опускаясь до уровня отдельных систем.
кодер, как правило, ничего не знает про устойчивость по Ляпунову… поэтому у него возникает масса вопросов, подобных тому, которые мы видим от автора в последние месяцы...
а математик не только понимает смысл этого, но и может простыми и доступными словами объяснить кодеру, как этого достичь, не прибегая к сложным размышлениям или алгоритмам
bascomo, Вы забыли )) я — не кодер!!! чтобы превратить идеи в результат нужен кодер, а моя проблема (если Вы знакомы с моими темами) заключается в том, что я не могу найти кодера, который делал бы то, что хочу я… не то, что умеет он, а то, что хочу я… и, как правило, большинство кодеров на это не способны… что толку от моих мат.моделей, если их нельзя реализовать?
ну или мне самому надо стать кодером, а это, мягко говоря, не моё… моя задача — сделать модель, а задача кодера — добиться того, чтобы эта модель точно реализовывалась в программном коде
и проблема в том, что сделать это никто не может ))
ЗЫ надеюсь, здесь тема не для того, чтобы мериться линейками ))
я пытаюсь что-то делать на уровне визуального программирования, но это всё не то...
у математиков и у кодеров 2 принципиально разных взгляда на мир… и пока они не договорятся между собой, ахулиардов им не видать… каждому ))
а вот мне сложнее: все кодеры слишком заняты, чтобы решать мои простенькие задачки
А, не, мой предыдущий коммент нужно было к этому куску вставить))).
>> «я не могу найти кодера, который делал бы то, что хочу я… не то, что умеет он, а то, что хочу я»
Есть вполне рабочая мера «качества» разраба — синьёрность. Ну там есть конечно опыт с технологиями или языком, обычно нормальный миддл или сиьёр, если ему дать нормальное ТЗ, всё сделает хорошо.
я предложил ТЗ на 27 страниц, так он не стал читать, а попросил объяснить простыми словами…
цуко, я для кого это писал? для тех, кто читать не умеет? давай ты будешь мне платить по 10 тыр за каждый свой вопрос, который не отражен в моем ТЗ?
так никто не согласился )))
хотя и Вашим пожеланиям есть довольно простое математическое решение
Все боятся переобучения как чумы, но обычно не понимают, что если доля шумов велика, любая система к ним подстроится. Главное мера, чтобы подстройка под сигнал ВМЕСТЕ с подстройкой под шумы оставалась работоспособной на будущее.
Приведу пример.
При оптимизации получаю Шарп, допустим, 3,5, на следующий год он оказывается по факту 2. В принципе — неплохо. Можно работать, но очевидно, что часть оптимизации была пере, подгонка к шуму.
Тут сумасшедший квант хвастается, что у него шарп не менее 4 по факту торговли. А раньше у него и близко такого не было. Их не догонишь
а кто такой сумасшедший квант?
Ho_Chu,
Есть чел, который шарит в предметной области (вряд ли это, конечно, математик, скорее трейдер, на да хрен с ним, пусть математик). Есть тот, кто может закодить. Если весь процесс декомпозировать, должен быть ещё тот, кто может понять что хочет «математик» и объяснить (описать) это разрабу на языке понятном, разрабу в достаточной детализации, чтобы по итогу (если разраб сделал в соответствии с описанием), то «математик» сказал: да, это оно.
У вас очень biased представление — вы, видимо, математик?)
А так-то, если нет медиирующего специального человека (в разрабских командах это обычно аналитик), то эта функция может быть у любого, математик совершенно не обязательно умеет «объяснять», совершенно с такой же вероятностью и разраб умеет «понимать».
проблема только в том, что кодер не хочет делать то, что нужно мне… кодер за ахулиард хочет мне сделать то, что умеет он, а не то, что нужно мне… а это 2 разные вещи… и в этом вся проблема
bascomo, да, Вы правы, я и нашел… но кодер, как только получил полное ТЗ, пропал как ежик в тумане и уже месяц ничего не пишет… искать другого?
так это будет не второй, и даже не пятый… скорее одиннадцатый, а то и сорок восьмой ))
так я пока повышаю свой культурный уровень ))) и как только повышу до того, чтобы облако решений анализировать не вручную, а автоматом, то тут же перестану искать… ибо кодеры мне нужны будут как собаке пятая нога…
ибо математик может стать кодером, при желании, а вот наоборот — очень сложно
bascomo, да мне то зачем?
ведь не я из месяца в месяц пытаюсь доказать всем, что математика мне не нужна, от слова «совсем»
ситуация напоминает женщину из анекдота, которая упрекает лежащего в луже мужика в том, что он отвратительно и неприлично пьян ))
на что мужик ей отвечает, что это именно она отвратительно и неприлично некрасива, а он наутро трезвый будет )))
Да, есть такое. Хотя это, конечно, далеко не для всех актуально, скорее для «генераторов идей» (не у всех этот скилл развит).
Тут важно технично приоритизировать — тут и про правильный баланс между прикладным, практичным и «экспериментальными» ветками исследований, тут и про постоянно держать в голове вопрос «а что это мне даст и может дать» и сначала срывать низко висящие фрукты, и про то, что сначала делать быстрый работающий MVP, а потом только думать про строительство рокет.
на что он опять сделал не то, что просил я, а то, что умел сделать он и предложил мне «доработать напильником»…
а я ничего тяжелее шариковой ручки в руках не держал ))) и как тут быть?
ты либо сам разбирайся в равновесии Нэша, либо делай то, что я тебя прошу...
bascomo, мне абсолютно все равно, какой долей в 200-метровой лодке на багамах буду владеть я в том коллективе, который будет владеть ей совокупно… 1/3 или 1/16 — все равно… ведь Вы так до сих пор и не позвали оформлять багамскую визу
ЗЫ и не стоит преуменьшать умение математиков писать формУлы… иногда это оказывается полезным не только лишь для математиков ))) мало того, не каждый может это делать © Кличко ))
тоже от скромности?
Эта задачка не из простых. Нигде не видел нормальной реализации, максимум что бывает это корреляционная матрица скриптов в пуле, поэтому как всегда придется все писать самому. Надо объединять всю логику на уровне портфеля, полностью воспроизводить денежные потоки между скриптами, маржинальный кредит, дивиденды, комиссии, расчёт маржинального обеспечения на уровне брокера (чтобы система не набирала бесконечный кредит) и много ещё чего. Плюс весь расчёт надо выполнять в логике «по кассе» и «по начислению» для корректности.
Я делаю это следующим образом:
1) по каждому скрипту экспортирую матрицу с сигналами (вектор входа, вектор выхода, вектор в позиции) и индексный вектор с датами;
2) объединяю все данные (котировки, сигналы, дивиденды и тп) в матрицы (они очень объёмные для примера у меня на 1000 скриптов (столбцы) и строки это 18 лет на часовиках, одна матрица весит 3 Гб). На этом этапе добавляется весовая модель портфеля;
3) дальше по сути идут векторные операции с минимумом циклов (иначе простой обсчет одного витка будет идти сутки);
4) в конце когда вся логика будет готова можно уже проводить портфельную оптимизацию.
У меня это достаточно много кода (где-то 2 тыс строк или около того так как разбито на несколько файлов). И расчет на многоядерных вычислениях все равно занимает не мало времени и ресурсов требует много (но опять же у меня много ботов одновременно работает и тест за 18 лет на часовиках).
С уважением!
bascomo,
прошу прощения только что увидел вопрос давно не заходил:
> тест на 952 бота;
> часовой таймфрейм с 01/01/2005 года, для нормализации я использую единый вектор времени с 07:00 утра до 0:00 (118 000 строк)
Отсюда несложно посчитать что типичная матрица с данными будет размером 952 * 118 000 (112,3 млн значений) и таких матриц много… )
по времени ориентировочно:
> выгрузка всех данных (отдельная процедура выполняется один раз) — около 30 минут (7 Гб данных в txt формате);
> подготовка данных к расчетам (у меня это отдельная процедура так как из данных на предыдущем шаге я тестирую различные портфели) — около 10 минут;
> расчет 1 цикла (= сценария) около до 1.5 минуты (на портфелях где бумаг меньше быстрее соответственно в разы);
> тестирование портфеля тут уже можно умножать время одного цикла на количество прогонок с учетом многоядерности (но тут я упираюсь в отношение количества ядер к оперативке которой надо много для таких расчетов, моих 64 Гб явно маловато).
Все расчеты при этом практически полностью на векторной основе, циклов по минимуму. Оперативка полностью забивается, пытаюсь бороться с этим управляя загрузкой памяти но все равно тяжелые достаточно вычисления.
С уважением!