Пример работы с ИИ
Dec. 18th, 2025 10:56 amЕсли совсем кратко, моя стратегия (как и многие другие, если не все) выбирает акции для покупки, и в итоге их продает. К моменту написания предыдущего поста на эту тему, закончился очередной цикл и работ и на меня смотрела с экрана вполне работающая версия, которую - как все легко догадались - мне немедленно захотелось улучшить. В связи с этим я написал следующий промпт:
Currently, we immediately replace sold stocks in the portfolio by the best stock per [existing selection criterion] that is still not in our current portfolio by investing in it all the cash received from the sale. Now I want to change it by requiring that the eligible replacements satisfy [an additional criterion].
If there are no eligible candidates, I want the sales proceeds to stay in cash. We will need a list of cash_flows, initialized to the empty list. If there are no eligible candidates to replace the sold stock then the dollar amount that we wanted to replace but couldn't is appended to the list "cash_flows".
The main loops in the function compute_daily_history()
Мне кажется, не надо быть специалистом ни в чем, чтобы понять смысл происходящего, это довольно просто. Более того, не надо быть крутым программистом или даже что-то знать о питоне, чтобы оценить уровень продукта, предложенного мне в ответ ИИ. (Замечу в скобках, что код в данном случае получился едва ли не короче, чем промпт, что не характерно.) Ниже все 13 строк, не ленитесь, почитайте прежде чем продолжать.
Дуся, грю, ты что ж это малюешь? Ты мне предлагаешь каждый день вызывать нашу самую дорогую функцию, возможно десятки раз, с одними теми же аргументами? Так не пойдет! Надо отдать должное, чатгпт не стал спорить и код враз переписал.
Мораль, кмк, тут очень простая. Конечно, ИИ может во многом помочь уже сегодня. Но доверить ему пока что нельзя ничего. Все, кто думает иначе, будут сами себе злобные буратины.
Currently, we immediately replace sold stocks in the portfolio by the best stock per [existing selection criterion] that is still not in our current portfolio by investing in it all the cash received from the sale. Now I want to change it by requiring that the eligible replacements satisfy [an additional criterion].
If there are no eligible candidates, I want the sales proceeds to stay in cash. We will need a list of cash_flows, initialized to the empty list. If there are no eligible candidates to replace the sold stock then the dollar amount that we wanted to replace but couldn't is appended to the list "cash_flows".
The main loops in the function compute_daily_history()
for day in days:will begin with with checking the state of the variable "cash_flows". If not empty, we attempt to find new eligible candidates. If they exist we buy them one by one, releasing the cash flows one by one. If they don't exist then nothing doing and we proceed to the next statement.
Мне кажется, не надо быть специалистом ни в чем, чтобы понять смысл происходящего, это довольно просто. Более того, не надо быть крутым программистом или даже что-то знать о питоне, чтобы оценить уровень продукта, предложенного мне в ответ ИИ. (Замечу в скобках, что код в данном случае получился едва ли не короче, чем промпт, что не характерно.) Ниже все 13 строк, не ленитесь, почитайте прежде чем продолжать.
# --------------------------------------------------
# Attempt reinvestment from cash_flows
# --------------------------------------------------
if cash_flows:
new_cash_flows = []
for cash_amt in cash_flows:
new_t, new_st, sorted_rets = find_replacement(day, holdings, strategy_parameters)
if new_t is not None:
price = price_df.at[day, new_t]
sh = cash_amt / price
shares[new_t] = shares.get(new_t, 0.0) + sh
holdings[new_t] = 1.0
else:
new_cash_flows.append(cash_amt)
cash_flows = new_cash_flows
Дуся, грю, ты что ж это малюешь? Ты мне предлагаешь каждый день вызывать нашу самую дорогую функцию, возможно десятки раз, с одними теми же аргументами? Так не пойдет! Надо отдать должное, чатгпт не стал спорить и код враз переписал.
Мораль, кмк, тут очень простая. Конечно, ИИ может во многом помочь уже сегодня. Но доверить ему пока что нельзя ничего. Все, кто думает иначе, будут сами себе злобные буратины.
no subject
Date: 2025-12-18 04:18 pm (UTC)no subject
Date: 2025-12-18 04:19 pm (UTC)"В вашем компиляторе ещё нет ИИ, и он не умеет выносить инварианты из цикла? Тогда мы идём к вам!"
no subject
Date: 2025-12-18 04:30 pm (UTC)Более того, формально говоря, переменная holdings тут меняется внутри цикла, поэтому надо кое-что знать о коде, чтобы понять что расширение holdings не может помочь найти новых кандидатов, т.к. holdings служат только для того чтобы их исключать, и я ему об этом напомнил, но это не помогло.
no subject
Date: 2025-12-18 04:34 pm (UTC)Насколько я понимаю, питон всё ещё по большей части интерпретирующий, и таких глобальных оптимизаций не делает. Почему ИИ всегда по умолчанию пишут на питоне, даже если программа не нуждается в каких-то хитрых пакетах, и будучи написана на C/C++, была бы раз в 100 быстрее — неясно.
no subject
Date: 2025-12-18 08:17 pm (UTC)Потому что если не важно, чтобы было в 100 раз быстрее или медленнее, то на питоне удобнее. Ничего не надо чтобы запустить программу, написал текстовой файл и вперёд. Сравните с тем, сколько возни потребуется прежде чем что-то на С++ запустится.
no subject
Date: 2025-12-20 03:16 am (UTC)no subject
Date: 2025-12-20 03:37 am (UTC)В каком смысле более медленной разработкой? С точки зрения человека, что сделать copy-paste питоновского кода, что сишного кода из ответа ИИ — нет разницы.
no subject
Date: 2025-12-20 04:35 am (UTC)no subject
Date: 2025-12-20 04:41 am (UTC)Отлаживать программу на языке с более строгой типизацией обычно проще.
no subject
Date: 2025-12-20 04:50 am (UTC)no subject
Date: 2025-12-20 04:57 am (UTC)Интересно было бы увидеть первые 24 причины.
no subject
Date: 2025-12-21 04:49 am (UTC)Причины, которые могут усложнить отладку больше динамической типизации? Там же огромный список начиная с того, что реально сложно отлаживать код про который неизвестно, что он должен делать(полное отсутствие документации) на машине к которой нельзя подключить дебаггер, логов нет и изменений в код внести нельзя. На фоне подобных проблем тип типизации в языке важен примерно так же как цвет обивки кресел в офисе. Если же рассказывать о проблемах, которые зависят от языка, то ручное управление ресурсами и опасные паттерны многопоточности гораздо более стремная вещь чем динамическая типизация. Но и они меньшая проблема чем возможность писать код огромным количеством разных способов(поэтому С легче отлаживать чем С++ хотя казалось бы).
no subject
Date: 2025-12-20 10:59 pm (UTC)no subject
Date: 2025-12-18 08:13 pm (UTC)Может быть наивный вопрос но зачем держать cash_flows в виде массива? Может ли получиться так, что суммы по отдельности маленькие и поэтому хороший replacement не сработает? А если бы была одна сумма, то покупка бы произошла?
no subject
Date: 2025-12-18 09:01 pm (UTC)Но в общем, это совершенно произвольное решение, мне хотелось как можно проще, чтобы силиконовая дурилка не запуталась. Но она, конечно, еще как запуталась. Это было самое простое.
*Задним числом: можно было просто вкладывать 1/15 нала. Было бы еще проще.
no subject
Date: 2025-12-19 05:52 am (UTC)no subject
Date: 2025-12-19 10:21 am (UTC)И непонятно, почему cash_flows надо как список держать, а не аггрегировать все поступившие средства в один карман, откуда уже разложить по новым возможностям. Получается, если у нас первая ликвидированная позиция была от маленькой позиции или позиции, потерявшей деньги, то в первого кандидата на реинвестирование мы положим мало. А если пятая по порядку ликвидации позиция была большая (от исходного размера или доходности), то 5ый по порядку кандидат на реинвестирование получит тоже большую позицию?
no subject
Date: 2025-12-19 03:30 pm (UTC)Да, это было совершенно произвольное решение. Я уже выше ответил. Это я наверное переделаю.
no subject
Date: 2025-12-19 10:27 am (UTC)no subject
Date: 2025-12-19 03:35 pm (UTC)no subject
Date: 2025-12-19 04:54 pm (UTC)no subject
Date: 2025-12-19 05:17 pm (UTC)А именно для того, чтобы исключать current holdings из списка претендентов на покупку.
Это и мешает.
no subject
Date: 2025-12-19 05:47 pm (UTC)no subject
Date: 2025-12-19 08:46 pm (UTC)no subject
Date: 2025-12-19 04:03 pm (UTC)no subject
Date: 2025-12-20 11:00 pm (UTC)no subject
Date: 2025-12-21 04:31 am (UTC)