Git Product home page Git Product logo

tinkproject's People

Contributors

alexanderkmd avatar atrvit avatar evgkrsk avatar idsulik avatar mayosen avatar robbikmansurov avatar sergey-volokhin avatar softandiron avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tinkproject's Issues

DivisionUndefined

При первом же запуске выдало ошибку.

Traceback (most recent call last):
File "D:\tinkproject-main\main.py", line 248, in
my_positions = creating_positions_objects()
File "D:\tinkproject-main\main.py", line 73, in creating_positions_objects
percent_change = ((market_price / this_pos.average_position_price.value) * 100) - 100
decimal.InvalidOperation: [<class 'decimal.DivisionUndefined'>]

судя по всему, деление на ноль

я в 73 строке для отладки добавил вывод
# % change
print(this_pos.average_position_price)
print(this_pos.average_position_price.value)
percent_change = ((market_price / this_pos.average_position_price.value) * 100) - 100

и он выдал следующее

Merck
currency=<Currency.usd: 'USD'> value=Decimal('0')
0

Ошибка при запуске.

Traceback (most recent call last):
File "C:\tink\main.py", line 17, in
import data_parser
File "C:\tink\data_parser.py", line 175, in
config = Config()
File "C:\tink\configuration.py", line 52, in init
'start_year': int(start_year),
ValueError: invalid literal for int() with base 10: 'start_year: 2021'

Несколько счетов

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

Расхождение в стоимости портфеля по сравлению с приложением из-за неучёта НКД

Заметил существенное расхождение в рублёвой стоимости портфеля. В приложении сумма больше на 20-30 000 рублей. Дамал насчёт округления, но дело оказалось не в этом.
После долгих размышлений, выяснил, что дело в НКД по облигациям!
Постараюсь исправить эту неточность.

Очень не хватает столбца с названием акции которую купил/продал.

Возможно ли добавить столбец напротив даты операции с наименованием акции над которой произвелось действие. Что бы можно было отфильтровать конкретную акции и посмотреть когда продавал/покупал. Для анализа.

Модули Python 3.9 для MacOS

Добрый вечер.
Опытным путем обнаружил, что требуется доставить модули в терминале MacOS
pip install scipy tinvest pycbrf xlsxwriter

Возможность отключения опроса по ИИС или брокерскому счету.

В настоящий момент ИИС у меня пустой и в ближайшее время не планируется пополнение.
Однако, скрипт запрашивает по нему данные.

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

Ошибка в Версии APIv2 по фьючерсам.

Начал баловаться фьючерсами.
После этого при запуске получаю ошибку.

04:15:00 [ERROR] tgrpc: Got error in get_future_margin 04:15:00 [ERROR] tgrpc: conversion from Quotation to Decimal is not supported 04:15:00 [ERROR] Parser: Get current market price error. 04:15:00 [ERROR] Parser: 'NoneType' object has no attribute 'min_price_increment' 04:15:00 [ERROR] tgrpc: Got error in get_future_margin 04:15:00 [ERROR] tgrpc: conversion from Quotation to Decimal is not supported Traceback (most recent call last): File "/app/./main.py", line 479, in <module> my_positions = creating_positions_objects() File "/app/./main.py", line 128, in creating_positions_objects average_position_price = data_parser.tinkoff_access.futures_price_calculation( File "/app/tgrpc/__init__.py", line 75, in wrapper return_val = func(self, *args, **kwargs) File "/app/tgrpc/__init__.py", line 421, in futures_price_calculation min_price_increment = margin.min_price_increment AttributeError: 'NoneType' object has no attribute 'min_price_increment'

Гайд

Очень нехватает гайда, объясняющего на пальцах как запустить.
Всё заполнил, токен получил и внёс - выдаёт 500 ошибку. Как быть, кто виноват?)

Нестабильно работает ветка API2

Тестирую ветку API2 (коммит d94e6d3) там где с веткой main проблем не наблюдалось.

Вижу что иногда проходит создание отчёта по некоторым счетам (у меня это брокерский) а иногда нет. По другим счетам (у меня это ИИС) стабильно падает создание отчёта. Ругань в том и другом случае одна:

Traceback (most recent call last):
  File "/app/./main.py", line 478, in <module>
    my_positions = creating_positions_objects()
  File "/app/./main.py", line 127, in creating_positions_objects
    if this_pos_instrument.type.lower() == "futures":
AttributeError: 'NoneType' object has no attribute 'lower'

видел раз и ошибки GRPC-общения.

Более полный лог обмена для обоих счетов:

~/git/github/tinkproject API2 > docker run --rm -it -v $(pwd):/app tinkproject:25.12.2021-45-gd94e6d3 1m 55s 12:17:16
05:21:09 [INFO] root: Start
05:21:09 [INFO] Parser: getting accounts
05:21:09 [INFO] Parser: accounts received
05:21:09 [INFO] root: Account(id='2018218533', name='Брокерский счёт', opened_date=seconds: 1578787200
, closed_date=, type=1, status=2)
05:21:11 [INFO] Parser: portfolio received
05:21:11 [INFO] Parser: investing period: 2 years 0 months 11 days
05:21:11 [INFO] root: creating position objects..
05:21:11 [INFO] root: 4 positions in portfolio
05:21:11 [INFO] root: 321 operations in period
05:21:21 [INFO] root: Тинькофф Вечный портфель USD
05:21:31 [INFO] root: Тинькофф Bonds RUB
05:21:41 [INFO] root: Тинькофф iMOEX
Traceback (most recent call last):
File "/app/./main.py", line 478, in
my_positions = creating_positions_objects()
File "/app/./main.py", line 127, in creating_positions_objects
if this_pos_instrument.type.lower() == "futures":
AttributeError: 'NoneType' object has no attribute 'lower'

~/git/github/tinkproject API2 > docker run --rm -it -v $(pwd):/app tinkproject:25.12.2021-45-gd94e6d3 40s 12:21:43
05:22:19 [INFO] root: Start
05:22:19 [INFO] Parser: getting accounts
05:22:19 [INFO] Parser: accounts received
05:22:19 [INFO] root: Account(id='2018218533', name='Брокерский счёт', opened_date=seconds: 1578787200
, closed_date=, type=1, status=2)
05:22:19 [WARNING] root: Account 2018218533 (Тинькофф) - parsing is OFF
05:22:19 [INFO] root: Account(id='2018327417', name='ИИС', opened_date=seconds: 1578960000
, closed_date=, type=2, status=2)
05:22:23 [INFO] Parser: portfolio received
05:22:23 [INFO] Parser: investing period: 2 years 0 months 11 days
05:22:24 [INFO] root: creating position objects..
05:22:24 [INFO] root: 8 positions in portfolio
05:22:24 [INFO] root: 368 operations in period
05:22:33 [WARNING] root: Вероятно, был обратный сплит TCS0BMDKNM37 - отношение цен 27:1
05:22:33 [WARNING] root: Вероятно, был обратный сплит TCS0BMDKNM37 - отношение цен 3:1
05:22:34 [WARNING] root: Вероятно, был обратный сплит TCS0BMDKNM37 - отношение цен 42:1
05:22:34 [INFO] root: FinEx Акций компаний развитых стран без США
05:22:39 [WARNING] root: Вероятно, был обратный сплит BBG333333333 - отношение цен 10:1
05:22:39 [WARNING] root: Вероятно, был обратный сплит BBG333333333 - отношение цен 3:1
05:22:45 [INFO] root: Тинькофф iMOEX
05:22:56 [INFO] root: FinEx Акции китайских компаний
05:23:26 [ERROR] tgrpc: Got GRPC error in get_last_price_raw
05:23:26 [ERROR] tgrpc: <_InactiveRpcError of RPC that terminated with:
status = StatusCode.UNAVAILABLE
details = "Socket closed"
debug_error_string = "{"created":"@1643001806.663930998","description":"Error received from peer ipv4:91.194.227.80:443","file":"src/core/lib/surface/call.cc","file_line":1074,"grpc_message":"Socket closed","grpc_status":14}"
05:23:26 [ERROR] tgrpc: StatusCode.UNAVAILABLE
05:23:26 [ERROR] Parser: Get current market price error.
05:23:26 [ERROR] Parser: 'NoneType' object is not subscriptable
05:23:37 [INFO] root: Тинькофф Вечный портфель EUR
05:23:47 [WARNING] root: Вероятно, был обратный сплит BBG00NJ6XQ74 - отношение цен 62:1
05:23:47 [WARNING] root: Вероятно, был обратный сплит BBG00NJ6XQ74 - отношение цен 498:1
05:23:47 [WARNING] root: Вероятно, был обратный сплит BBG00NJ6XQ74 - отношение цен 332:1
05:23:51 [INFO] root: Сбер Индекс Мосбиржи ОФЗ
05:24:02 [INFO] root: FinEx Акции американских компаний
05:24:13 [INFO] root: Евро
Traceback (most recent call last):
File "/app/./main.py", line 478, in
my_positions = creating_positions_objects()
File "/app/./main.py", line 127, in creating_positions_objects
if this_pos_instrument.type.lower() == "futures":
AttributeError: 'NoneType' object has no attribute 'lower'

Дополнение для вывода информации по ИИС

Дополнение к проекту автора, чтобы получать информацию по ИИС.
В файле data_parser.py в функции get_api_data прописываем строку print(client.get_accounts()) после строки print("- authorisation success"):
image
Затем запускаем main.py и потом можно нажать ctrl+c, чтобы остановить выполнение после получения нужных данных, а именно:
image
Нам нужен broker_account_id от TinkoffIis, записываем его просто в код, а добавленную строчку удаляем:
image
Можно записать также и id от брокерского, чтобы потом было проще менять в параметрах, пометив в комментарии, где иис, а где брокерский, после оставляя раскомменченным тот, который нужно запустить:
image
Теперь добавляем новый параметр broker_account_id=broker_account_id в 3 строки:
image
И все, запускаем вновь main.py и получаем информацию по ИИС.

Division by Zero

File "./main.py", line 245, in
my_positions = creating_positions_objects()
File "./main.py", line 73, in creating_positions_objects
percent_change = ((market_price / this_pos.average_position_price.value) * 100) - 100
decimal.InvalidOperation: [<class 'decimal.DivisionUndefined'>]

Похоже что пытается поделить на ноль. У меня есть акции VTRS, которые достались мне выделением от PFE по нулевой цене :)

UnexpectedError: 401 при запуске

При запуске вылетает с ошибкой:
D:\tinkproject-main>python main.py 00:37:15 [INFO] root: Start 00:37:15 [INFO] Parser: getting accounts Traceback (most recent call last): File "D:\tinkproject-main\main.py", line 451, in accounts = data_parser.get_accounts() File "D:\tinkproject-main\data_parser.py", line 68, in get_accounts accounts = client.get_accounts() File "C:\Users\Admin\AppData\Roaming\Python\Python310\site-packages\tinvest\clients.py", line 731, in get_accounts return accounts_get( File "C:\Users\Admin\AppData\Roaming\Python\Python310\site-packages\tinvest\apis.py", line 394, in accounts_get return request( File "C:\Users\Admin\AppData\Roaming\Python\Python310\site-packages\tinvest\clients.py", line 537, in _request raise UnexpectedError(response.status_code, response.text) tinvest.exceptions.UnexpectedError: 401

файл my_account.txt состоит из след строчек:
t.3QQ_a8KQQuaCxaLPXXXXXXXXXXXXXXXXXXXXXXXXXXfJ_Iyl1R5G638ЧЧ5JWoS4_JP3dQ
Asia/Novosibirsk
2022
01
14

токен брал такой: Все счета - Полный доступ

При этом не вижу появившегося лога. Пробовал с запустить с опцией -d => python -d main.py
тоже лога не вижу.

Табличка расчета вычета по ИИС налезает на историю купонов и дивидендов за прошлый год

Привет!
В отчете по счету ИИС на листе "Coupons and Dividends" табличка с вычетами начинается с ячейки J6, и записывается поверх последних операций за предыдущий год.
Кажется, что лучше эту табличку переместить на другой лист, где она не будет мешаться.
Например, на лист portfolio или вообще на новый лист

Можно не парсить my_account.txt

А зачем вам парсить файл my_account.txt ? Метод parse_text_file не нужен, если все необходимые учетные данные сохранить в виде переменных в отдельном файле с расширением .py. Обычно это файл config.py или пускай будет my_account.py

Пример файла config.py:

# config.py
API_URL = 'https://YOUR_URL'
API_TOKEN = 'YOUR_API_TOKEN'

Далее в коде обращаетесь к переменной:
config.API_TOKEN

И не забываем сделать импорт в файле, где обращаетесь к этим переменным
import config

Файл config.py добавляете в .gitignore так же как у вас там сейчас my_account.txt.

Отправка результатов файлов на ftp/smb.

Для себя еще сделал отправку файлов на FTP. Мне так удобно получать результаты.
Единственное, оно сделано через пень колоду. Не так силен я в программировании. :)
Сделал по аналогии с использованием ТХТ файла конфига creds.txt
где каждая по-строчно прописан: хост, логин, пасс, папка куда складывать файлы.
Как вариант внести данные настройки в yaml файл.

В excel_builder.py добавлено:

import os
import ftplib
...
    #FTP send and delete + check for creds.txt
    if os.path.isfile('creds.txt'):
        filename = excel_file_name
        con = ftplib.FTP(host, ftp_user, ftp_password)
        con.cwd(ftp_dir) #
        f = open(filename, "rb")
        send = con.storbinary("STOR "+ filename, f)
        logger.info('Excel file sent to FTP: '+excel_file_name)
        con.close
        if os.path.isfile(excel_file_name):
               os.remove(excel_file_name)
               print("Success: Deleted "+excel_file_name)
        else:
               print(excel_file_name+" - File doesn't exists!")
    else:
        print("No creds.txt file exist, skipping FTP send.")

В версии APIv2 работает.
Можно добавить отправку в SMB папку.
Как вариант добавление фичи в прод по желанию автора...

ошибка

10:24:26 [INFO] ExBuild: content printing: Currencys Traceback (most recent call last): File "C:\barmen\tinkoff\main.py", line 493, in <module> build_excel_file(account, my_positions, my_operations, rates_today_cb, market_rate_today, File "C:\barmen\tinkoff\excel_builder.py", line 662, in build_excel_file last_row_pos = print_portfolio(1, 1) File "C:\barmen\tinkoff\excel_builder.py", line 203, in print_portfolio last_row = print_content("Currency") File "C:\barmen\tinkoff\excel_builder.py", line 150, in print_content row = print_position_data(row, col) File "C:\barmen\tinkoff\excel_builder.py", line 136, in print_position_data 'font_color': get_color(this_pos.percent_change)}) File "C:\barmen\tinkoff\classes.py", line 107, in percent_change return ((self.market_price / self.ave_price) * 100) - 100 decimal.DivisionByZero: [<class 'decimal.DivisionByZero'>]

Нет поддержки инструментов в юанях

Traceback (most recent call last):
File "D:\Nextcloud\Work\HiLevel!Python\Finance\tinkproject-API2\tinkproject-API2\main.py", line 479, in
my_positions = creating_positions_objects()
File "D:\Nextcloud\Work\HiLevel!Python\Finance\tinkproject-API2\tinkproject-API2\main.py", line 124, in creating_positions_objects
market_rate = market_rate_today[currency]
KeyError: 'CNY'

Неверно вычет налога

Странная ситуация, имею несколько рублевых акций, по одной, как ни странно по TCS имею положительную динамику. Но почему то в таблице налог считается не по exp.yield, а на всю сумму market value.

Учет типа счета в формируемом отчете

Привет!

Большая просьба добавить небольшое изменение для наглядного отображения типа счета в названии формируемого отчета

Заранее спасибо!

Ps
Возможно, оптимальным было бы с помощью тернарного оператора (предполагается изменение в строке 31 файла excel_builder.py) :

excel_file_name = 'tinkoffReport_' + ('TinkoffIis_' if account.broker_account_type == 'TinkoffIis' else 'Tinkoff_') + data_parser.account_data['now_date'].strftime('%Y.%b.%d') + '_' ```
                   

'SyncClient' object has no attribute 'get_accounts'

Стало выводить такую ошибку.

[INFO] Parser: getting accounts
Traceback (most recent call last):
  File "main.py", line 448, in <module>
    accounts = data_parser.get_accounts()
  File "/home/ubuntu/tink/data_parser.py", line 81, in get_accounts
    accounts = client.get_accounts()
AttributeError: 'SyncClient' object has no attribute 'get_accounts'

Учёт срока владения активом (влияет на налоги)

Приветствую.

Прежде всего, спасибо за публикацию кода.

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

Неправильный расчет ср. цены покупки для бумаг, прошедших Split

Например SBMX прошел сплит 1:100 в мае 2021 года.

Цены покупок, если прогонять дебаг бумаги:
[Decimal('-1739.5'),
Decimal('-1794'),
Decimal('-19.0959'),
... и т.д. до Decimal('-20.01')]

В таблице получается средняя цена 51 рубль, закупка в рублях (sum buy in rub) - более 16000 рублей, хотя реально 5200 или около того.
И логичный расчет налоговой базы в -11000 рублей (минус 11000 рублей!) - то есть убытки, а не прибыль.

[Feature Request] Аналитика: состав портфеля

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

Ошибка Traceback (most recent call last):

В самих файлах ничего не менялось, вставил токен и дату в файлик май аккаунт и всё

Как это выглядит:

getting account data..
account started: 2020 Aug 01
START
authorisation..
- authorisation success
Traceback (most recent call last):
  File "main.py", line 20, in <module>
    positions, operations, market_rate_today_usd, market_rate_today_eur, currencies = data_parser.get_api_data()
  File "D:\tinkproject-main\tinkproject-main\data_parser.py", line 34, in get_api_data
    positions = client.get_portfolio()
AttributeError: 'SyncClient' object has no attribute 'get_portfolio'

При установке поверх без полного обновления зависимостей при запуске выдает ошибку

текст:
INFO: 16:13:54 - creating operations objects.. Traceback (most recent call last): File "_путь_\tinkproject-main\main.py", line 396, in <module> my_operations = create_operations_objects() File "_путь_\tinkproject-main\main.py", line 249, in create_operations_objects instrument = data_parser.get_instrument_by_figi(this_op.figi) File "_путь_\tinkproject-main\data_parser.py", line 146, in get_instrument_by_figi instrument = client.get_market_search_by_figi(figi) File "_путь_\AppData\Local\Programs\Python\Python39\lib\site-packages\tinvest\clients.py", line 699, in get_market_search_by_figi return market_search_by_figi_get( File "_путь_\AppData\Local\Programs\Python\Python39\lib\site-packages\tinvest\apis.py", line 344, in market_search_by_figi_get return request( File "_путь_\AppData\Local\Programs\Python\Python39\lib\site-packages\tinvest\clients.py", line 535, in _request raise TooManyRequestsError tinvest.exceptions.TooManyRequestsError

после pip install -r requirements.txt --upgrade - всё нормально

API2: Ошибка при первом запуске, построении отчета

12:51:19 [DEBUG] root: Отношение цен - 1.000137797988149373019153920
12:51:21 [INFO] root: Royal Dutch Shell (A)
12:51:21 [DEBUG] Parser: Instrument for BBG00QPYJ5H0 found in DB
Traceback (most recent call last):
  File "/app/./main.py", line 479, in <module>
    my_positions = creating_positions_objects()
  File "/app/./main.py", line 138, in creating_positions_objects
    ave_buy_price_rub = calculate_ave_buy_price_rub(this_pos)
  File "/app/./main.py", line 96, in calculate_ave_buy_price_rub
    logger.warning('unknown currency in position: ' + this_pos.name)
AttributeError: 'PortfolioPosition' object has no attribute 'name'

Пустые сделки в отчете.

Как советовали на Хабре.

"не хватает проверки статуса операции в create_operations_objects. В противном случае в отчете показываются и отмененные заявки"

Человет добавил пару строк в файл main.py (у меня это строка 312).

 for this_op in operations.payload.operations:
        if this_op.status != 'Done':
            continue

Добавил себе, прогнал. Реально помогло.
Рекомендую в прод.

Ошибка при первом запуске - UnicodeEncodeError: 'charmap' codec can't encode characters in position 8-17: character maps to <undefined>

15:26:56 [INFO] root: Start
15:26:56 [INFO] Parser: getting accounts
15:26:57 [INFO] Parser: accounts received
15:26:57 [INFO] Config: New account found - 2000223111 - Брокерский счёт - adding config
Traceback (most recent call last):
File "D:\tinkproject-API2\main.py", line 461, in
accounts = data_parser.get_accounts()
File "D:\tinkproject-API2\data_parser.py", line 74, in get_accounts
config.check_accounts_config(accounts)
File "D:\tinkproject-API2\configuration.py", line 100, in check_accounts_config
self._write_config_to_file()
File "D:\tinkproject-API2\configuration.py", line 63, in _write_config_to_file
yaml.dump(self.config,
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python310\lib\site-packages\yaml_init
.py", line 253, in dump
return dump_all([data], stream, Dumper=Dumper, **kwds)
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python310\lib\site-packages\yaml_init
.py", line 241, in dump_all
dumper.represent(data)
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python310\lib\site-packages\yaml\representer.py", line 28, in represent
self.serialize(node)
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python310\lib\site-packages\yaml\serializer.py", line 54, in serialize
self.serialize_node(node, None, None)
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python310\lib\site-packages\yaml\serializer.py", line 108, in serialize_node
self.serialize_node(value, node, key)
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python310\lib\site-packages\yaml\serializer.py", line 108, in serialize_node
self.serialize_node(value, node, key)
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python310\lib\site-packages\yaml\serializer.py", line 89, in serialize_node
self.emit(ScalarEvent(alias, node.tag, implicit, node.value,
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python310\lib\site-packages\yaml\emitter.py", line 115, in emit
self.state()
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python310\lib\site-packages\yaml\emitter.py", line 412, in expect_block_mapping_simple_value
self.expect_node(mapping=True)
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python310\lib\site-packages\yaml\emitter.py", line 244, in expect_node
self.expect_scalar()
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python310\lib\site-packages\yaml\emitter.py", line 268, in expect_scalar
self.process_scalar()
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python310\lib\site-packages\yaml\emitter.py", line 533, in process_scalar
self.write_plain(self.analysis.scalar, split)
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python310\lib\site-packages\yaml\emitter.py", line 1132, in write_plain
self.stream.write(data)
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python310\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 8-17: character maps to

Некорректный loss после сплита акций

Привет. Спасибо огромное за такой инструмент. Заметил, что при моих скромных 250к инвестиций, некий показатель loss равен почти -2,5M. Он почти целиком идет из tax base от акции, по которой был недавно сплит. Тут явно есть ошибка, хотя лично мне она сильно не мешает. Могу выслать excel файл для разбора, но не знаю куда. Еще раз спасибо за инструмент и хорошего дня =)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.