Closed RomaKoks closed 3 years ago
Не очень понял, что такое за числа "1737 + 6100 < 15600"?
1737 - cash 6100 - текущая цена AKRN (размер лота = 1) 15600 - текущая цена URKZ (размер лота = 1)
Понял. Там логика несколько другая и она описана тут:
На покупку идет текущий Кеш, а не Кеш плюс выручка от продажи. Будете продавать у вас будет кэш расти и количество будет пересчитываться.
Продажа вычисляется как один процент от стоимости портфеля (настройка MAX_TRADE) - минус текущий Кэш, но не больше имеющегося количества.
Ну и как покупка, так и продажа делится на 5 (TRADES) операций. Объемы округляются вверх до ближайшего целого.
Объемы округляются вверх до ближайшего целого
А почему не вниз?
как покупка, так и продажа делится на 5 (TRADES) операций.
так и не понял, зачем
Нет это лоты.
Q_BUY рассчитывается исходя из текущего кэша - кэш делить на стоимость одно лота и на 5. TRADES = 5 чисто моя заморочка - я привык выставлять 5 заявок. Какого-то глубокого смысла в этом нет, кроме общих соображений немного замаскировать выставленный объем в стакане. Портфель у меня достойно большой, и если я выставлю в стакане одну заявку на миллион в каком-нибудь неликвиде народ может испугаться.
Q_SELL - величина в лотах одного процента от портфеля тоже разбита на 5 заявок.
Округление вверх выбрано из технических соображений. Когда осталось меньше 5 лотов и есть сигнал на продажу, я это увижу, а если округлять вниз, то будет 0 объем.
Почему сразу не разделить MAX_TRADE на 5? Округление у Q_SELL вверх - понятно, у Q_BUY - не до конца, но учитывая что портфель большой, то ситуация невозможности покупки не актуальна. Думаю можно закрыть, более-менее прояснилось.
Q_BUY примерно из таких же соображений сделано - если можно купить 3, не нельзя купить TRADES, то будет сигнал на покупку, но в принципе это действительно не так существенно если портфель большой. Когда-то так сделал из соображения своего удобства.
Почему есть два показателя MAX_TRADE и TRADE - для разделений сущностей.
Фактически все сделки по размеру вертятся около MAX_TRADE доли от портфеля. Доля должна быть маленькая, чтобы работала линейная аппроксимация на основе производных. Так же MAX_TRADE (как характерный размер операций) используется для расчета штрафов за ликвидность.
TRADE - какой-то содержательной роли не играет и связан с моей не любовью выставлять весь объем одной заявкой.
@RomaKoks Кстати допилил тут загрузку данных с БКС и произвел беглое сравнение - получилось 19% ошибочных и отсутствующих значений по сравнению с моей базой. Еще собираюсь более детально глазами проанализировать ошибки, но среди них есть совсем неприятные, вроде отсутствующих последних дивидендов по Севестали. Казалось бы респектабельная ликвидная бумага. С последней отсечки почти уже два месяца прошло, а с предыдущей четыре - было время внести данные.
Я видел в коммите что AKRN тоже пропущен. Могу попробовать спарсить investmint.ru. Идея составить рейтинг источников основываясь на различии с вашей базой, и по взвешенному голосованию источников выбрать порог, по которому вносятся дивиденды автоматически.
Вообще неожиданная ситуация, так как у кого-кого, а у брокера должна быть валидная информация по всем эмитентам.
Я полагаю брокерам это не нужно для каких-то количественных моделей, поэтому они ведут эти данные абы как без какой-то системы.
Я хотел понят в порядке обсуждения, а почему вас не устраивает текущая ситуация ведения базы в ручную? Если нужны какие-то бумаги, которых сейчас нет, то откройте тикер по каждой - я постепенно добавлю их в анализируемые и буду поддерживать актуальные данные.
Просто мне кажется городить огород из множества парсеров (которые будут регулярно ломаться при редезайне сайтов), потом придумывать какую-то систему рейтингов для получения конечного результата несколько оверкил по сравнению с текущим подходом.
Но с другой стороны нет проблем еще запарсить investmint.ru
По моему опыту очень хороший источник https://закрытияреестров.рф/_/ но никак руки не доходили парсер написать
Все началось с того что я добавил все интересующие тикеры в базу руками, это было неудобно через compas mongodb. Потом через 2 дня база внезапно умерла полностью, а дампа не было и в гите тоже.
Тикеров много, а инвестор я молодой - многих публичных компаний просто не слышал, чтобы изучить какой-либо тикер мне нужно чтобы тот был "рекомендуем" к рассмотрению хотя бы с какой-либо позитивной стороны, дивиденды - одна из них.
То есть план такой, что компания появляется в списке сделок, я её "изучаю" и принимаю решение. Для этого плана в base.yaml нужны ~ все тикеры. Напрягать кого-либо (себя в том числе) заполением информации вручную о большом количестве субъективно "бесперспективных" компаний не хочется.
Конечный план: добавить моломальский UI + отправка выжимок информации (включающий в себя историю дивидендов) на почту или telegram
Учитывая, что я веду дивиденды для 116 акций еще добавить десяток не сложно.
Идею я понял. Наверное, если иметь пяток источников, можно было бы как-то выводить консенсус. Тут правда еще одна проблема. Прийдет каждый из сайтов источников бомбить множеством запросов. Надо подумать, как это организовать разумно, чтобы сайты не обиделись.
Ну 200 запросов, не так уж много, как мне кажется. На крайний случай можно в настройках поставить таймаут около 5 секунд.
Тут даже по времени немало получится: 5 сайтов по 5 секунд 200 тикеров - это уже больше часа. Конечно ничего страшного в этом нет, но надо продумать, как это лучше организовать.
Ну запросы на различные сайты можно без таймаута. Те получится просто 5 * 200.
В принципе да.
А вы программируете по основному месту работы? Я просто страшно далек от программирования.
Да, но стиль программирования у меня существенно хуже вашего, сложно поверить, что далекий от программирования человек будет писать с тестами и asyncio.
Я всю жизнь в Excel/Word проработал. Три года назад один знакомый про питон рассказал и несколько книжек порекомендовал - с тех пор увлёкся в качестве хобби, но так как не работал по профилю, то часто приходится очень по долгу разбираться с разными мелочами.
Проанализировал и получилось, что процент ошибок/пропусков по трем источникам:
bcs = 14% dohod = 12% conomy = 9%
Если в качестве простого консенсуса взять медиану, то процент ошибок и пропусков 4%.
А ошибки консенсуса можно как-то посмотреть? Чтобы перед тем как парсить новый источник, прикинуть может ли он улучшить ситуацию.
Положил распечатку https://github.com/WLM1ke/poptimizer/blob/master/tmp/comp.txt
Посмотрел, на вскидку, https://investmint.ru/ должен улучшить ситуацию.
медиану
Правда лучше думаю брать моду. Чтобы Nan мог победить)
С модой не очень хорошо выходит. Часто дивиденды округлены и чуть-чуть по разному - несколько мод получается.
Я еще попытался делать NaN, где два из трех значения NaN. Но так только хуже выходит.
СРАВНЕНИЕ ЛОКАЛЬНЫХ ДАННЫХ С IRAO
LOCAL SOURCE STATUS
2015-06-09 0.001040 0.00104
2016-06-21 0.017823 0.01780 ERROR <------------ Почему тут ошибка есть
2017-06-20 0.146820 0.14680 <------------ а тут, например, нет, хотя различия в одном и том же знаке?
2018-06-01 0.130383 0.13040
2019-05-31 0.171636 0.17160
2020-06-01 0.196193 0.19620
Во втором случае дивиденды примерно в 10 раз больше, а соответсвенно относительная ошибка примерно в десять раз меньше. В настройках стоит критерий относительная ошибка 0.001
https://github.com/WLM1ke/poptimizer/blob/b70d715dfb82e90b115bfd5db8622b76beca853e/poptimizer/portfolio/optimizer.py#L16
Кажется, что из-за него возможны появления невозможных вариантов сделок: cash: 1737 SELL Q_SELL BUY Q_BUY GRAD_DIFF TURNOVER P_VALUE 1 SBERP 1 KLSB 1 0.059933 0.812051 0.000027 2 MVID 1 KRSBP 1 0.046613 0.847026 0.000007 3 AKRN 1 URKZ 1 0.046562 0.913750 0.034296 <- вот эта невозможна, так как 1737 + 6100 < 15600