Comments (16)
Более подходящий для REST будет /orders/{orderId}
(или /orders/:orderId
, кто к какой записи привык)
from invest-openapi.
Пока что нет
from invest-openapi.
@AlexanderVolkovTCS , спасибо. Появилась ли информация о примерных сроках выхода APIv2? Без возможности проверки статуса ордера написать хоть сколько-нибудь работающего бота не представляется возможным.
Рассказываю о своём супер-способе)
После создания заявок известен orderId для каждой заявки. Значит:
- Собираю список заявок, которые ещё не исполнились;
- Также собираю список FIGI от этих заявок;
- Нахожу datetime_min (дата-время самой ранней неисполнившейся заявки минус 1 минута);
- Нахожу datetime_max (дата-время самой поздней неисполнившейся заявки плюс 1 минута);
- Если есть неисполнившиеся заявки, то формирую запрос к "/operations";
а) Если в списке FIGI только одна уникальная штука, значит, указываю его при обращении к "/operations".
б) Также указываю datetime_min и datetime_max.
Так минимизируется объём ответа от API. - Получаю список и нахожу соответствие между orderId и operation.id;
- Проставляю статусы заявкам в своём списке.
Эта проверка запускается примерно каждые 30 сек.
Часто бывает так, что лимитная заявка исполняется сразу. Поэтому опрашиваю "/operations" через 10 секунд после создания заявки с указанием конкретного FIGI и datetime_min—datetime_max.
Работает)
from invest-openapi.
Это работает?
На шарпе написал следующий код, валится с ошибками:
public async Task<Models.Order> OrderIdAsync(string id)
{
var idParam = HttpUtility.UrlEncode(id);
var path = $"{Endpoints.Orders}?orderId={idParam}";
var response = await Connection.SendGetRequestAsync<Models.Order>(path).ConfigureAwait(false);
return response?.Payload;
}
В чем может быть дело, что я не так понимаю?
from invest-openapi.
@v-crys задача еще не сделана
from invest-openapi.
@NikitaMelnikov есть ли примерные сроки?
from invest-openapi.
Я крайне удивлен, что такого базового метода нет
from invest-openapi.
Тем временем, уже больше года тикету 😐
from invest-openapi.
Стоит ли удивляться, если другие базовые вещи (выдача дневных свечей через rest) до сих пор не починили? Тоже уже скоро год исполнится..
from invest-openapi.
Я думаю, это всё "когда-то" будет в версии OpenAPI v2. Практически все тикеты заканчиваются тем, что "в v2 учтём". А когда будет v2, и будет ли, уже больше года можно только гадать (
from invest-openapi.
@NikitaMelnikov , есть ли смысл ждать данный метод в OpenAPI v1 ?
from invest-openapi.
@s-golikov Добрый день, в v1 - нет.
from invest-openapi.
@AlexanderVolkovTCS , спасибо. Появилась ли информация о примерных сроках выхода APIv2? Без возможности проверки статуса ордера написать хоть сколько-нибудь работающего бота не представляется возможным.
from invest-openapi.
@s-golikov
Работаем, но к сожалению сроки не называем
@polkila
для большого количества выставленных торговых поручений алгоритм оптимальный!
from invest-openapi.
@polkila , спасибо за подробное описание! В этом алгоритме для меня слабым местом является необходимость обращения к endpoint'у /operations. Судя по тому, как работают терминал и мобильное приложение, в инфраструктуре TCS активно используются очереди, ну и как следствие имеем eventual consistency. Видимо именно очереди там являются узким местом, и в данном случае после выполнения заявки нет гарантированного временного интервала, в течение которого исполненная заявка отразится в операциях.
На данный момент я полагаюсь только на endpoint /orders, у меня одна горутина раз в секунду опрашивает этот endpoint, другая выставляет лимитную заявку и ждет, когда она исчезнет из списка активных ордеров. В таком случае моя проблема заключается в том, что я не могу снять заявку вручную - программа будет считать, что заявка исполнилась, и не могу написать нормальный алгоритм отмены заявки, т.к. опять же, нет гарантии, что заявка будет именно отменена, а не исполнена. И даже если я добавлю к этому параллельное отслеживание marketdata, все равно гарантий корректного определения статуса нет.
Использовать большие таймауты тоже нет возможности, т.к. я прорабатываю скорее скальперские стратегии, нежели свинг.
from invest-openapi.
@polkila , спасибо за подробное описание! В этом алгоритме для меня слабым местом является необходимость обращения к endpoint'у /operations. Судя по тому, как работают терминал и мобильное приложение, в инфраструктуре TCS активно используются очереди, ну и как следствие имеем eventual consistency. Видимо именно очереди там являются узким местом, и в данном случае после выполнения заявки нет гарантированного временного интервала, в течение которого исполненная заявка отразится в операциях.
На данный момент я полагаюсь только на endpoint /orders, у меня одна горутина раз в секунду опрашивает этот endpoint, другая выставляет лимитную заявку и ждет, когда она исчезнет из списка активных ордеров. В таком случае моя проблема заключается в том, что я не могу снять заявку вручную - программа будет считать, что заявка исполнилась, и не могу написать нормальный алгоритм отмены заявки, т.к. опять же, нет гарантии, что заявка будет именно отменена, а не исполнена. И даже если я добавлю к этому параллельное отслеживание marketdata, все равно гарантий корректного определения статуса нет.
Использовать большие таймауты тоже нет возможности, т.к. я прорабатываю скорее скальперские стратегии, нежели свинг.
Согласен со всем перечисленным. Ну, ждём! Пока что свинг)
from invest-openapi.
Related Issues (20)
- Для облигации "Главторг выпуск 1 (figi BBG01475RD30)" не показывается цена и НКД в getPortfolio HOT 4
- Ошибка tinvest.exceptions.UnexpectedError: 500 {"trackingId":"dba85b244643578b","payload":{"message":"Unknown account" HOT 3
- Запросы начали падать с CORS ошибкой HOT 1
- Запросы падают с CORS HOT 1
- OpenApi v1 streaming protocol (via websocket) Getting error code = 403 while connection HOT 1
- Проблема с информацией по портфелю апи v2 HOT 2
- Rest запрос к portfolio HOT 1
- Тип string для полей instrumentType, currency объекта v1Instrument
- required поля
- В списке возвращаемых операций отсутствуют операции покупки юаня CNY HOT 1
- Получить дату оферты для облигации с плавающим купоном
- В выгрузке 5-ти минутных свечей отсутствуют вечерние данные
- Странная отработка рыночных ордеров HOT 2
- Узнать через API доступен ли инструмент для покупки или шорта HOT 1
- [Bug] Неправильный OrderState в песочнице
- streaming протокол, не достаточность данных HOT 1
- Ошибка отмены ORDER_TYPE_LIMIT ордера и его исполнение через 12 минут
- Добавить при начислении/списании вариационной маржи код тикера по которому проходит списание
- Sandbox: Не открываются некоторые сделки.
- Ошибка при запуске скрипта (Ошибка tinvest.exceptions.UnexpectedError: 500 ) HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from invest-openapi.