Giter VIP home page Giter VIP logo

tinkoff-api's People

Contributors

fatal1ty 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

Watchers

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

tinkoff-api's Issues

INSTRUMENT_ERROR, Instrument is disabled for trading

When I try to buy on Instrument BBG000000000
I get an error that Instrument is disabled for trading.
Please help!

Here is how I generate but order

    await rest.orders.create_limit_order(
        figi="BBG000000000",
        lots=size,
        price=price_bid,
        operation=OperationType.BUY,
    )

Traceback

Traceback (most recent call last):
  File "D:\Dropbox\Dev\Trading\Market Maker\Tinkoff\Bot.py", line 265, in <module>
    main()
  File "D:\Dropbox\Dev\Trading\Market Maker\Tinkoff\Bot.py", line 261, in main
    loop.run_until_complete(logic())
  File "C:\ProgramData\Anaconda3\lib\asyncio\base_events.py", line 467, in run_until_complete
    return future.result()
  File "D:\Dropbox\Dev\Trading\Market Maker\Tinkoff\Bot.py", line 246, in logic
    await buy(s, price_bid, positions, currencies)
  File "D:\Dropbox\Dev\Trading\Market Maker\Tinkoff\Bot.py", line 223, in buy
    operation=OperationType.BUY,
  File "C:\ProgramData\Anaconda3\lib\site-packages\tinkoff\investments\api\orders.py", line 55, in create_limit_order
    price=price,
  File "C:\ProgramData\Anaconda3\lib\site-packages\tinkoff\investments\api\base.py", line 29, in _request
    code=response.payload.get('code'),
tinkoff.investments.client.exceptions.TinkoffInvestmentsAPIError: INSTRUMENT_ERROR, Instrument is disabled for trading

get_minute_candles [from .. to ..]

Привет!
Пытаюсь запустить метод get_minute_candles из примера (с небольшоей модификацией).
Проблема: лимит по dt_to (datetime, до которого я хочу получать данные), не срабатывает.
При запуске кода с dt_to=datetime(2015, 1, 1) всё равно получаю абсолютно все свечи вплоть до последней (самой свежей). Вероятно сам что-то делаю не так, по возможности прошу подсказать, как мне получить массив со свечками внутри определенного интервала (при этом dt_from работает как надо).
Подскажите пожалуйста как сделать лимит по dt_to, что бы только до этой даты отгружались данные.

Вот код:

import json
import asyncio
from datetime import datetime
from tinkoff.investments import CandleResolution, TinkoffInvestmentsRESTClient
from tinkoff.investments.utils.historical_data import HistoricalData

with open('tokens.json', 'r') as f:
    json_opened = json.load(f)

real_token = json_opened["real_token"]
sanbox_token = json_opened["sandbox_token"]


candle_array = []


async def get_minute_candles():
    # show 1 minute candles for AAPL in 1 year period of time
    client = TinkoffInvestmentsRESTClient(token=real_token)
    historical_data = HistoricalData(client)
    start_date = datetime(2020, 12, 1)
    end_date = datetime(2020, 12, 20)
    async for candle in historical_data.iter_candles(
        figi='BBG000B9XRY4',
        dt_from=start_date,
        dt_to=end_date,
        interval=CandleResolution.WEEK,
    ):
        print(candle)
        print(candle.time)
        print(end_date)
        candle_array.append(candle)
        

asyncio.run(get_minute_candles())

Вот вывод:

(venv) MacBook-Pro-Danila:tinkoff_invest danilafominyh$ /Users/danilafominyh/Desktop/tinkoff_invest/venv/bin/python3 /Users/danilafominyh/Desktop/tinkoff_invest/get_candles.py
Candle(figi='BBG000B9XRY4', interval=<CandleResolution.WEEK: 'week'>, o=123.2, c=122.41, h=125.95, l=120.01, v=112212831, time=ISODateTime(2020, 12, 7, 7, 0, tzinfo=datetime.timezone.utc))
2020-12-07 07:00:00+00:00
2020-12-20 00:00:00
Candle(figi='BBG000B9XRY4', interval=<CandleResolution.WEEK: 'week'>, o=122.81, c=126.66, h=129.56, l=121.66, v=203499722, time=ISODateTime(2020, 12, 14, 7, 0, tzinfo=datetime.timezone.utc))
2020-12-14 07:00:00+00:00
2020-12-20 00:00:00
Candle(figi='BBG000B9XRY4', interval=<CandleResolution.WEEK: 'week'>, o=127.6, c=131.97, h=134.4, l=123.12, v=91914082, time=ISODateTime(2020, 12, 21, 7, 0, tzinfo=datetime.timezone.utc))
2020-12-21 07:00:00+00:00
2020-12-20 00:00:00
Candle(figi='BBG000B9XRY4', interval=<CandleResolution.WEEK: 'week'>, o=133.1, c=132.69, h=138.78, l=131.73, v=88446538, time=ISODateTime(2020, 12, 28, 7, 0, tzinfo=datetime.timezone.utc))
2020-12-28 07:00:00+00:00
2020-12-20 00:00:00
Candle(figi='BBG000B9XRY4', interval=<CandleResolution.WEEK: 'week'>, o=132.99, c=128.21, h=135.0, l=126.78, v=56492318, time=ISODateTime(2021, 1, 4, 7, 0, tzinfo=datetime.timezone.utc))
2021-01-04 07:00:00+00:00
2020-12-20 00:00:00
(venv) MacBook-Pro-Danila:tinkoff_invest danilafominyh$ /Users/danilafominyh/Desktop/tinkoff_invest/venv/bin/python3 /Users/danilafominyh/Desktop/tinkoff_invest/get_candles.py
Candle(figi='BBG000B9XRY4', interval=<CandleResolution.WEEK: 'week'>, o=123.2, c=122.41, h=125.95, l=120.01, v=112212831, time=ISODateTime(2020, 12, 7, 7, 0, tzinfo=datetime.timezone.utc))
2020-12-07 07:00:00+00:00
2020-12-20 00:00:00
Candle(figi='BBG000B9XRY4', interval=<CandleResolution.WEEK: 'week'>, o=122.81, c=126.66, h=129.56, l=121.66, v=203499722, time=ISODateTime(2020, 12, 14, 7, 0, tzinfo=datetime.timezone.utc))
2020-12-14 07:00:00+00:00
2020-12-20 00:00:00
Candle(figi='BBG000B9XRY4', interval=<CandleResolution.WEEK: 'week'>, o=127.6, c=131.97, h=134.4, l=123.12, v=91914082, time=ISODateTime(2020, 12, 21, 7, 0, tzinfo=datetime.timezone.utc))
2020-12-21 07:00:00+00:00
2020-12-20 00:00:00
Candle(figi='BBG000B9XRY4', interval=<CandleResolution.WEEK: 'week'>, o=133.1, c=132.69, h=138.78, l=131.73, v=88446538, time=ISODateTime(2020, 12, 28, 7, 0, tzinfo=datetime.timezone.utc))
2020-12-28 07:00:00+00:00
2020-12-20 00:00:00
Candle(figi='BBG000B9XRY4', interval=<CandleResolution.WEEK: 'week'>, o=132.99, c=128.12, h=135.0, l=126.78, v=56492862, time=ISODateTime(2021, 1, 4, 7, 0, tzinfo=datetime.timezone.utc))
2021-01-04 07:00:00+00:00
2020-12-20 00:00:00

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

Подписка на события trades

Добрый день!
Я относительно недавно начал изучать python, поэтому мой вопрос может показаться дурацким, прошу прощения.
Правильно ли я понимаю, что для streaming client поддержаны только четыре типа событий - candle, orderbook, instrument и error, а событие trade (лента принтов) не поддержано? Если это так, то я хотел бы попробовать его поддержать и прислать пулл реквест.

Getting CLOSE values of minutes candles

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

Цена закрытия отличается от внешних источников

Добрый день! Подскажите пожалуйста, при запросе можно получить цену закрытия по любому из инструментов. Но тинькофф API возаращает какую то странную цифру. Она не соотвествует реальным данным. Мб вы знаете какой то внешний API по которому можно было бы по figi или isin также как в Тиькофф получать цену закрытия (цена последней с делки, с которой все перестают работать и идут спать), но чтобы эта цена была реальной, а не как у Тинькофф непойми откуда взявшаяся...

Проблема с получением свечей по временному интервалу

Пытаюсь получить свечи следующим кодом:
`
start_date = datetime(2021, 3, 31, 7, 0, 0)
end_date = datetime(2021, 4, 1, 14, 30, 0)

  async for candle in historical_data.iter_candles(
            figi='BBG000BC3BJ2',
            dt_from=start_date,
            dt_to=end_date,
            interval=CandleResolution.MIN_5,
    ):`

получаем всё по текущее время.

Проблема в том, что в данном случае время в dt_to не учитывается, т.к. в self._client.market.candles.get оно определено как dt_to=dt_from + timedelta(days=days_increment + delta.days), т.е. фактически округляется в меньшую сторону.

Try to get Historical data [TinkoffInvestmentsUnavailableError]

Здравствуйте, запускаю пример get_minute_candles и не могу запустить его, у меня код выдает TinkoffInvestmentsUnavailableError. Я попробовал запустить пример Streaming Client, который тоже представлен в главном readme, он у меня запустился и отработал без ошибок. А вот Historical data не получись. Может быть вы знаете в чем, может быть причина? В качестве аргументов я передаю те параметры, что представлены в примерах.

Ослабьте требования к зависимостям

Привет.

Сейчас в вашем пакете диапазоны версий пакетов зависимостей заданы достаточно жестко, при этом версии некоторых пакетов уже устарели:

tinkoff-api/setup.py

Lines 36 to 41 in 8ade194

install_requires=[
"aiohttp>=3.6.2,<3.7",
"yarl>=1.4.2,<1.5",
"mashumaro>=1.12,<2.0",
"ciso8601==2.1.2",
]

Из-за этого возникают проблемы с использованием вашего пакета в проектах. Например, я использую poetry для управления зависимостями, и мой проект зависит от aiohttp 3.7.3 (текущая версия на этот момент). Я не могу добавить ваш пакет в свой проект, потому что у вас aiohttp ограничен <3.7 и возникает конфликт разрешения версий зависимостей, хотя для такого ограничения нет никаких видимых причин. Вы могли бы сделать для aiohttp верхнее ограничение, например <4.

Версии для yarl вообще можно не указывать, потому что от него зависит aiohttp.

FIGI vs Tickers

Thanks for the work firstly!
One issue I can't come over is getting all FIGI that I need, when trading or working with market data I use tickers, but API requires FIGI, I need to map one to the other, but I don't see any method for this in the client. How would you recommend to go ?

Decimal вместо float для цен

привет, предлагаю сменить float на Decimal для ценовых значений на основании вот этого обсуждения
https://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency

я тоже натыкался пару раз на косяки на копеечных акциях типа ВТБ — 0,033605 цена например, но сейчас не могу воспроизвести точный кейс
форкнул и попробовал реализовать сам, но не получается сделать обратную совместимость, чтобы можно было оставить float и не ломать для тех, кто уже сейчас использует либу — проблема в том, что mashumaru десериализует в указанный тип, а Union пока не реализован (если эта фича доедет, то получается изи)

вот я как сделал кастомные декодеры
https://github.com/lobziq/tinkoff-api/blob/master/tinkoff/investments/client/rest.py
https://github.com/lobziq/tinkoff-api/blob/master/tinkoff/investments/client/streaming.py

TinkoffInvestmentsUnavailableError при вызове client.portfolio.get_positions()

Добрый день, ловлю 500 ошибку, когда пытаюсь сделать простой запрос, чтобы получить информацию о портфеле:
Подозреваю, что ошибка возникает из-за того, что не передаю brokerAccountId.
Я правильно понмаю, что работая в Sandbox, я не могу получить доспут на чтение своего порфтеля? Иначе говоря - Sandbox токен позвоялет создать только тестовый брокерский аккаунт, с которым можно эксперементировать.

Код на всякий случай.

import asyncio
from datetime import datetime

from tinkoff.investments import (
    TinkoffInvestmentsRESTClient, Environment, PortfolioPosition
)

from tinkoff.investments.client.exceptions import TinkoffInvestmentsError


TOKEN = os.environ['SANDBOX_API']

async def show_your_portfolio():
    async with TinkoffInvestmentsRESTClient(token=TOKEN,environment=Environment.SANDBOX) as client:
        positions = await client.portfolio.get_positions()
        for position in positions:
            print(f'{position.name}: {position.lots} lots')

[pip install tinkoff-api]

Привет!
Вылезает ошибка при попытке установить package через pip.
Requirement already satisfied: pyyaml>=3.13 in ./venv/lib/python3.8/site-packages (from mashumaro<2.0,>=1.12->tinkoff-api) (5.3.1) Requirement already satisfied: idna>=2.0 in ./venv/lib/python3.8/site-packages (from yarl>=1.4.2->tinkoff-api) (3.0) Using legacy 'setup.py install' for tinkoff-api, since package 'wheel' is not installed. Using legacy 'setup.py install' for ciso8601, since package 'wheel' is not installed. Installing collected packages: ciso8601, aiohttp, tinkoff-api Running setup.py install for ciso8601 ... error ERROR: Command errored out with exit status 1: command: /Users/danilafominyh/Desktop/tinkoff_invest/venv/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/qx/cs3p5gf16ld8jdfczfcv4_2r0000gn/T/pip-install-npyeur95/ciso8601_2f77d31fb3b04bd69ed356480133f7d7/setup.py'"'"'; __file__='"'"'/private/var/folders/qx/cs3p5gf16ld8jdfczfcv4_2r0000gn/T/pip-install-npyeur95/ciso8601_2f77d31fb3b04bd69ed356480133f7d7/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/qx/cs3p5gf16ld8jdfczfcv4_2r0000gn/T/pip-record-phyej0m0/install-record.txt --single-version-externally-managed --compile --install-headers /Users/danilafominyh/Desktop/tinkoff_invest/venv/include/site/python3.8/ciso8601 cwd: /private/var/folders/qx/cs3p5gf16ld8jdfczfcv4_2r0000gn/T/pip-install-npyeur95/ciso8601_2f77d31fb3b04bd69ed356480133f7d7/ Complete output (17 lines): running install running build running build_py package init file 'ciso8601/__init__.py' not found (or not a regular file) creating build creating build/lib.macosx-10.15-x86_64-3.8 creating build/lib.macosx-10.15-x86_64-3.8/ciso8601 copying ciso8601/__init__.pyi -> build/lib.macosx-10.15-x86_64-3.8/ciso8601 copying ciso8601/py.typed -> build/lib.macosx-10.15-x86_64-3.8/ciso8601 running build_ext building 'ciso8601' extension creating build/temp.macosx-10.15-x86_64-3.8 clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk -I/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -DCISO8601_VERSION=2.1.2 -I/usr/local/include -I/usr/local/opt/[email protected]/include -I/usr/local/opt/sqlite/include -I/Users/danilafominyh/Desktop/tinkoff_invest/venv/include -I/usr/local/Cellar/[email protected]/3.8.5/Frameworks/Python.framework/Versions/3.8/include/python3.8 -c module.c -o build/temp.macosx-10.15-x86_64-3.8/module.o xcrun: error: active developer path ("/Applications/Xcode.app/Contents/Developer") does not exist Use sudo xcode-select --switch path/to/Xcode.appto specify the Xcode that you wish to use for command line developer tools, or usexcode-select --installto install the standalone command line developer tools. Seeman xcode-select for more details. error: command 'clang' failed with exit status 1 ---------------------------------------- ERROR: Command errored out with exit status 1: /Users/danilafominyh/Desktop/tinkoff_invest/venv/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/qx/cs3p5gf16ld8jdfczfcv4_2r0000gn/T/pip-install-npyeur95/ciso8601_2f77d31fb3b04bd69ed356480133f7d7/setup.py'"'"'; __file__='"'"'/private/var/folders/qx/cs3p5gf16ld8jdfczfcv4_2r0000gn/T/pip-install-npyeur95/ciso8601_2f77d31fb3b04bd69ed356480133f7d7/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/qx/cs3p5gf16ld8jdfczfcv4_2r0000gn/T/pip-record-phyej0m0/install-record.txt --single-version-externally-managed --compile --install-headers /Users/danilafominyh/Desktop/tinkoff_invest/venv/include/site/python3.8/ciso8601 Check the logs for full command output.

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.