Coder Social home page Coder Social logo

gas-tinkoff-trades's Introduction

GAS Tinkoff Trades

GAS Tinkoff Trades main image

Данный Google Apps Script предназначен для импорта сделок из Тинькофф Инвестиций прямо в Google таблицы, для последующего анализа.

Я сделал этот скрипт для автоматизации ручного вбивания данных из приложения тинькофф, и надеюсь он окажется полезен кому-нибудь ещё :)

Установка

  • Создать или открыть документ Google Spreadsheets https://docs.google.com/spreadsheets/
  • В меню "Tools" выбрать "Script Editor"
  • Дать проекту имя, например TinkoffTrades
  • Скопировать код из Code.gs и заменить им дефолтный текст скрипта.
  • Получить OpenApi-токен Тинькофф
  • Добавить свойство OPENAPI_TOKEN в разделе Project properties -> Script properties со значением токена, полученным выше.
  • Сохранить скрипт 💾
  • В документе Google Spreadsheets выбрать любую ненужную ячейку и присвоить ей имя UPDATE_DATE с помощью меню Data->Named ranges->Add named range. В эту ячейку по команде меню TI->Обновить вставляется текущая дата. Данная ячейка может использоваться в качестве необязательного параметра UPDATE_DATE любой функции для принудительного обновления формул. Например, при использовании функции TI_GetLastPriceByFigi("BBG004730RP0",UPDATE_DATE) можно реализовать обновление цены акции "Газпром" по команде меню TI->Обновить.

На этом всё. Теперь при работе с этим документом на всех листах будут доступны функции:

  • API v2: TI_GetAccounts(), TI_GetAccountID(), TI_GetInstrumentsID(), TI_GetLastPriceByFigi(), TI_GetPortfolio(), TI_GetOperations(), TI_GetBidAskSpread() и TI_GetLastPrice() (использует API v1 и может перестать работать)
  • API v1: getPriceByTicker(), getTrades(), getPortfolio(), getMaxBidByTicker(), getMinAskByTicker() и getBidAskSpread()

Функции API v2

  • TI_GetAccounts() - получение информации по счетам (идентификатор, тип, название, статус, дата открытия, права доступа).

  • TI_GetAccountID(accountNum) - возвращает идентификатор счета по его порядковому номеру (начиная с 0).

  • =TI_GetLastPriceByFigi(FIGI, UPDATE_DATE) - требует на вход FIGI инструмента (может быть получен через =VLOOKUP() по отдельной вкладке с информацией по всем инструментам, полученной вызовом TI_GetInstrumentsID()) и опциональный параметр с именем ячейки UPDATE_DATE, которая будет обновлятся через меню TI->Обновить).

  • =TI_GetInstrumentsID() - выводит информацию по всем инструментам, включая их тикер, FIGI, класс, биржу, валюту и ISIN.

  • =TI_GetOperations(accountId, from, to) - выводит операции по заданному идентификатору счета (можно получить через функцию TI_GetAccounts()) и, опционально, фильтрацию по времени. Параметры from и to являются ссылками на ячейки с типом Дата.

  • =TI_GetPortfolio(accountId) - выводит портфель по заданному идентификатору счета (можно получить через функцию TI_GetAccounts().

Функции API v1 (перестанут работать в 2023 году)

  • =getPriceByTicker(ticker, UPDATE_DATE) - требует на вход тикер, и опциональный параметр с именем ячейки UPDATE_DATE, которая будет обновлятся через меню TI->Обновить).

  • =getTrades(ticker, from, to) - требует на вход тикер, и опционально фильтрацию по времени. Параметры from и to являются строками и должны быть в ISO 8601 формате

  • =getPortfolio() - выводит портфель.

Особенности

  • Среди настроек скрипта есть TRADING_START_AT - дефолтная дата, начиная с которой фильтруются операции getTrades. По умолчанию это Apr 01, 2020 10:00:00, но данную константу можно в любой момент поменять в исходном коде.

Пример использования работы функций API v1

=getPriceByTicker("V", UPDATE_DATE)  # Возвращает текущую цену акции Visa
=getPriceByTicker("FXMM", UPDATE_DATE)  # Возвращает текущую цену фонда казначейских облигаций США

=getTrades("V") 
# Вернёт все операции с акцией Visa, которые произошли начиная с TRADING_START_AT и по текущий момент.
=getTrades("V", "2020-05-01T00:00:00.000Z") 
# Вернёт все операции с акцией Visa, которые произошли начиная с 1 мая и по текущий моментs.
=getTrades("V", "2020-05-01T00:00:00.000Z", "2020-05-05T23:59:59.999Z") 
# Вернёт все операции с акцией Visa, которые произошли в период с 1 и по 5 мая.

Пример работы функций API v1

=getTrades()

getTrades in action

=getPriceByTicker()

Get price by ticker in action

gas-tinkoff-trades's People

Contributors

erhosen avatar grkor avatar hihat avatar pozhidaevgm 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

gas-tinkoff-trades's Issues

authentication token is missing or invalid code 40003

Вставляю токен по инструкции в главе "установка", но возникает ошибка authentication token is missing or invalid code 40003 при выполнении функции TI_GetAccounts() или подобных:
Ошибка:
Exception: Request failed for https://invest-public-api.tinkoff.ru returned code 401. Truncated server response: {"code":16,"message":"authentication token is missing or invalid","description":"40003"} (use muteHttpExceptions option to examine full response)
_makeApiCall @ TinkoffTrades_api_V2.gs:271
_GetAccounts @ TinkoffTrades_api_V2.gs:351
TI_GetAccounts @ TinkoffTrades_api_V2.gs:399

  • Пробовал создавать токены с "только для чтения" и полный доступ
  • Пытался создать отдельно на ИИС и брокерского счета
  • "Подтверждение сделок кодом" в профиле тинькоф инвестиции выключен
  • С чем может быть связана эта проблема?

getTrades() error

=getTrades() return "TypeError: Cannot destructure property 'figi' of 'tinkoffClient.getInstrumentByTicker(...)' as it is undefined. (line 58)."
=getTrades("AAPL") return "TypeError: Cannot read property 'value' of undefined (line 108)."

Не работает функция TI_GetLastPriceByFigi() с внешним figi

Пытаюсь добавить figi из отдельной ячейки =TI_GetLastPriceByFigi(VLOOKUP(B50,Ticker!$A$2:$I$3500,2,FALSE),UPDATE_DATE)
Тут через VLOOKUP() находится тикер в листе Ticker, сам тикер указан в B50.
или так =TI_GetLastPriceByFigi(E54,UPDATE_DATE), при этом E54 = VLOOKUP(B54,Ticker!$A$2:$I$3500,2,FALSE)
Получается функция VLOOKUP работает, выдает figi. Я пробовал и добавлять кавычки к результату с помощью CONCATENATE(), но не помогает, TI_GetLastPriceByFigi() не может получить данные из ячеек таблицы. Работает только при прямом указании figi в функцию, так =TI_GetLastPriceByFigi("BBG0100R9963",UPDATE_DATE), но это неудобно
Помогите пожалуйста, как сделать внешнее указание тикера?
Также кавычки обязательны ли при передаче этого параметра или можно сделать без них?

Пофиксил function TI_GetAccounts(accountType) Не умею гитхабом пользоваться :(

/**

  • Returns the ID of a Tinkoff account based on the input parameter.
  • @param {number} accountType - The type of account to retrieve.
  • 0 - Брокерский счет
  • 1 - ИИС
  • 2 - Инвестиционная копилка (работает только с операциями)
  • @return {string} The ID of the selected account.
    */
    function TI_GetAccounts(accountType) {
    const data = tinkoffClientV2._GetAccounts()

switch (accountType) {
case 0:
return data.accounts[0].id;
case 1:
return data.accounts[1].id;
case 2:
return data.accounts[2].id;
default:
return "Не выбран портфель!";
}
}

Некритичная проблема с вызовом TI_GetPortfolio()

Вызов TI_GetPortfolio() периодически возвращает
Exception: Request failed for https://invest-public-api.tinkoff.ru returned code 429 (строка 271).

Не могу уловить порядок воспроизведения ошибки, возникает от случая к случаю. В круглых скобках ссылаюсь на номер счета из другого листа в виде =TI_GetPortfolio('Счета'!A2). Если писать в скобках сам номер, не поможет. Все подгрузится, только если из формулы убрать "=" и вставить заново. Причем, с обычным счетом портфолио подгружается сразу, а с ИИС падает чаще. Остальные функции работают корректно.

Хочется чтоб при открытии документа все погружалось сразу, без вмешательства в ячейки. Возможно, я что-то настроил не до конца. Подскажите пож. нормально ли это и как избавиться от ошибки.

=TI_GetPortfolio() Ошибка

TypeError: Cannot read property 'units' of undefined at TI_GetPortfolio(Code:407:48)

Как можно исправить?

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.