KonishchevDmitry / investments

Helps you with managing your investments
491 stars 58 forks source link

investments simulate-sell ib #40

Open Rom888 opened 3 years ago

Rom888 commented 3 years ago

Пробую эту функциональность:

$ investments simulate-sell ib
W: The broker statement misses trade settle date information. First occurred trade - EXH4d at 16.04.2020. All calculations for such trades will be performed in T+0 mode.
E: Unable to find quotes for following symbols: EXV8d, EXH4d.

Похоже европейских ETF нет на бесплатных аккаунтах finnhub и twelvedata. Поэтому два вопроса:

  1. можно ли это сообщение сделать warning и продолжить расчет для того что есть?
  2. возможно ли прикрутить еще API которое дает данные по европейским ETF? Если да, я поищу подходящее.
KonishchevDmitry commented 3 years ago

можно ли это сообщение сделать warning и продолжить расчет для того что есть?

Прямо сейчас можно руками перечислить те символы, для которых котировки есть, если их не очень много: investments simulate-sell ib all $symbol1 all $symbol2 ....

возможно ли прикрутить еще API которое дает данные по европейским ETF? Если да, я поищу подходящее.

Теоретически - возможно. На практике - все зависит от. :) К примеру, я начинал с Alpha Vantage - все было хорошо, но потом они сделали ограничение в 5 запросов в минуту, из-за чего пользоваться ими стало невозможно. Многие пользуются Yahoo, но мне эта идея не очень нравится: на самом деле у него нет API - то, что все дергают, не предназначено для использования со стороны и в любой момент может отсохнуть + там бывают какие-то абсолютно невалидные котировки, к примеру, для наших FinEx'овских ETF - вместо того, чтобы сказать, что данных нет, там рисуется (рисовалось когда я последний раз на него смотрел?) что-то совсем оторванное от реальности.

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

Rom888 commented 3 years ago

Прямо сейчас можно руками перечислить те символы, для которых котировки есть, если их не очень много: investments simulate-sell ib all $symbol1 all $symbol2 ....

Не получается:

$ investments simulate-sell ib all WCLD
W: The broker statement misses trade settle date information. First occurred trade - EXH4d at 16.04.2020. All calculations for such trades will be performed in T+0 mode.
E: Unable to find quotes for following symbols: EXV8d, EXH4d.

и с investments metrics ib такая же история.

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

Хорошо, посмотрю что есть.

KonishchevDmitry commented 3 years ago

Ну, в metrics оно и логично, т. к. она выдает сводную статистику по всем портфелям, а вот в simulate-sell уже, конечно, не очень. Глянул почему - из-за калькулятора комиссий, т. к. у некоторых брокеров тарифы зависят от текущего размера портфеля, а чтобы его посчитать, надо знать котировки всех акций. Да - это, конечно, не очень приятный side effect...

Rom888 commented 3 years ago

Поискал варианты API по европейским бумагам, в свободном доступе подходящее найти не удалось. На гитхабе есть несколько проектов, которые берут данные непосредственно с iShares, но возможно более универсально и надежно (в плане того что yahoo не исчезнет) все таки использовать yahoo через доступное API или какую-либо комьюнити библиотеку.

Глянул почему - из-за калькулятора комиссий, т. к. у некоторых брокеров тарифы зависят от текущего размера портфеля, а чтобы его посчитать, надо знать котировки всех акций. Да - это, конечно, не очень приятный side effect...

Было бы здорово обойти это выдав warning и продолжить расчеты по тому что есть.

KonishchevDmitry commented 3 years ago

Кстати, EXV8d тоже в Yahoo Finance не находится. Зато я нашел вот такой mapping.

И вот уже EXV8.DE находит в том числе и Finnhub. Правда, логику данного mapping'а я пока не смог осознать: там не везде d заменяется на .DE. К примеру: LEERd -> CEC.

У вас тут есть понимание, по какой логике IB маппит одни символы на другие?

Можете скинуть результат grep -i EXV8d statement.csv? Что вообще IB пишет в своих отчетах про них? Может мне вообще имеет смысл пытаться переходить на поиск котировок по ISIN, а не по символу или вроде того. Хотя это, скорее всего, удвоит количество необходимых API-вызовов... :(

KonishchevDmitry commented 3 years ago

Кстати, учитывая вышесказанное, вам прямо сейчас должна помочь опция symbol_remapping.

Rom888 commented 3 years ago

Можете скинуть результат grep -i EXV8d statement.csv? Что вообще IB пишет в своих отчетах про них? Может мне вообще имеет смысл пытаться переходить на поиск котировок по ISIN, а не по символу или вроде того. Хотя это, скорее всего, удвоит количество необходимых API-вызовов... :(

Скинул на почту, везде фигурирует EXV8d, и только в разделе Dividends упоминается без d:

EXV8(DE000A0H08F7) Cash Dividend EUR 0.140474 per Share
(Mixed Income)
Rom888 commented 3 years ago

Кстати, EXV8d тоже в Yahoo Finance не находится. Зато я нашел вот такой mapping. И вот уже EXV8.DE находит в том числе и Finnhub. Правда, логику данного mapping'а я пока не смог осознать: там не везде d заменяется на .DE. К примеру: LEERd -> CEC.

Интересно, зашел в IB личный кабинет. EXV8 (без d) фигурирует в разделе портфолио и если щелкнуть по этому символу, то открывается страница с графиком, там тоже. В отчете по дивидендам вместо EXV8 в столбце Symbol написано SXOPEX, а вместо EXH4 написано SXNPEX В trade confirmation указаны EXV8d и EXH4d

У вас тут есть понимание, по какой логике IB маппит одни символы на другие?

Покопал. Если взглянуть на страничку символа EXV8d (перешел с указанной страничке маппинга) https://contract.ibkr.info/v3.10/index.php?action=Details&site=GEN&conid=89005194 то там EXV8d фигурирует как "Local Name" на конкретной бирже для других бирж local name указан другой: EXV8 или SXOPEX

На сайте iShares указано EXV8, а в разделе где листингуется тоже указаны разные локальные тикеры. То есть получается что на каждой бирже может быть свой локальный тикер, и в отчет попадают тикеры в зависимости от того на какой бирже была операция (покупка или выплата дивидендов).

И в итоге да, symbol_remapping выходит что очень полезная фича!

Но проблема еще в том что на finnhub на бесплатном аккаунте написано что нет "International Market Data".

Rom888 commented 3 years ago

Попробовал, config:

    symbol_remapping:
      EXV8d: EXV8.DE
      EXH4d: EXH4.DE
$ investments simulate-sell ib all SOXX
W: The broker statement misses trade settle date information. First occurred trade - EXH4d at 16.04.2020. All calculations for such trades will be performed in T+0 mode.
E: Failed to get quotes from Finnhub: Failed to get quotes from https://finnhub.io/api/v1/quote?symbol=EXV8.DE&token=...: Server returned an error: 403 Forbidden.
KonishchevDmitry commented 3 years ago

везде фигурирует EXV8d, и только в разделе Dividends упоминается без d:

Ну вот что они за люди такие. :) Ну как с этим можно работать. :)

У меня с вашим токеном (отредактировал ваше сообщение и удалил токен из него ;) ) тоже выдает You don't have access to this resource, но точно тот же запрос с моим токеном работает. Попробуйте попозже - мне сегодня весь день Prometheus алерты шлет, что у меня метрики не обновляются - у них там похоже сегодня какие-то проблемы с авторизацией.

Rom888 commented 3 years ago

У меня с вашим токеном (отредактировал ваше сообщение и удалил токен из него ;) ) тоже выдает You don't have access to this resource, но точно тот же запрос с моим токеном работает. Попробуйте попозже - мне сегодня весь день Prometheus алерты шлет, что у меня метрики не обновляются - у них там похоже сегодня какие-то проблемы с авторизацией.

Ой, не заметил, спасибо, может для безопасности заменять токен звездочками в сообщениях, как это обычно делается для паролей?

Странно, попробовал еще раз через браузер, пишет в браузере: {"error":"You don't have access to this resource."} А если заменить тикер на американский SOXX, то все работает.

Может быть у вас другой тарифный план, или когда вы получали токен, не было этого ограничения? Эта ситуация может прояснится, если вы получите еще один токен на другой емайл и попробуете с ним.

KonishchevDmitry commented 3 years ago

Мне пока приходит в голову только:

  1. Перемапливать все дивиденды по ISIN в символы (чтобы они были везде одинаковыми в отчете)
  2. Для не-US* ISIN резолвить символ в API котировок

Там оно, правда, тоже как-то не без проблем резолвится:

$ isin=DE000A0H08F7
$ curl -s "https://finnhub.io/api/v1/stock/profile2?isin=$isin&token=$token"
{}
$ curl -s "https://finnhub.io/api/v1/search?q=$isin&token=$token"
{"count":1,"result":[{"description":"iShares STOXX Europe 600 Construct \u0026 Material UCITS ETF (DE)","displaySymbol":"EXV8.DE","symbol":"EXV8.DE","type":"ETP"}]}
Rom888 commented 3 years ago

Наверно это имеет смысл, Security ID указывается в разделе "Financial Instrument Information", а в дивидендах и налогах везде указывается в скобках этот ID.

С моим токеном второй запрос возвращает: {"count":0,"result":[]}

KonishchevDmitry commented 3 years ago

Какое-то оно прям совсем нестабильное. У меня потом тоже стало {"count":0,"result":[]} возвращать. Через какое-то время починилось.

С новым токеном - да, стабильно You don't have access to this resource..

Rom888 commented 3 years ago

В этом плане возможно яхо финанс будет более предсказуемо себя вести. И еще хорошая фича сделать какое-нибудь стандартное для таких задач REST API к локальному сервису (который будет обращаться к локальной базе данных или к сетевым API). А уже юзер сам будет решать вопрос как наполнить свою локальную БД нужными ему данными.