Изменение API со стороны Тинькова: не работают лимитные ордера и пустой orderBook
Closed this issue · 3 comments
- Внезапно перестали работать лимитные ордера (как раз в тот момент когда они должны были сработать :). После обращения в Тинькофф и двух недель ожидания получил ответ техподдержки, который позволил понять, что изменился парсер JSON со стороны Тинькова и то что раньше у меня работало:
{"lots":1,"operation":"Buy","price":"67.68"}
теперь должно быть записано в точности как в их сваггере (67.68 без кавычек):
{"lots":1,"operation":"Buy","price":67.68}
- orderBook пустой из-за изменения формата (теперь получаемый от Тинькова массив не ассоциативный, в нём нет quality и amount)
Я не программист, к сожалению сейчас нет времени проверить все остальные функции API, нет времени разобраться как сделать пул реквест. Прикладываю патч, который работает для меня
- You should use an integer or a float value in sendOrder method. All tests processed successfull. You perhaps use string value. Not a bug.
- Not confirmed. I have added test for GetBestPrice and it success with current code. Not a bug.
["asks":"jamesRUS52\TinkoffInvest\TIOrderBook":private]=>
array(1) {
[0]=>
object(stdClass)#2505 (2) {
["price"]=>
int(5398)
["quantity"]=>
int(10)
}
}
- You should use an integer or a float value in sendOrder method. All tests processed successfull. You perhaps use string value. Not a bug.
- Not confirmed. I have added test for GetBestPrice and it success with current code. Not a bug.
["asks":"jamesRUS52\TinkoffInvest\TIOrderBook":private]=> array(1) { [0]=> object(stdClass)#2505 (2) { ["price"]=> int(5398) ["quantity"]=> int(10) } }
По 2-му пункту проблема определенно есть.
У Вас есть два метода getHistoryOrderBook и getOrderBook. В первом случае ответ получается через rest-протокол и там ассоциативный массив. А во втором через streaming и в ответе уже не ассоциативный массив.
В итоге во 2-м случае методы getBestPriceToBuy(), getBestPriceToBuyLotCount(), getBestPriceToSell(), getBestPriceToSellLotCount() ничего не возвращают. И в var_dump будет:
["asks":"jamesRUS52\TinkoffInvest\TIOrderBook":private]=>
array(2) {
[0]=>
array(2) {
[0]=>
float(222.68)
[1]=>
int(32)
}
[1]=>
array(2) {
[0]=>
float(222.69)
[1]=>
int(21)
}
}
См. https://tinkoffcreditsystems.github.io/invest-openapi/marketdata/#orderbooksubscribe
Тестируемый код:
$orderbook = $TIClient->getOrderBook('BBG000BCSST7',2);
print 'Price to buy: '.$orderbook->getBestPriceToBuy().' Available lots: '.$orderbook->getBestPriceToBuyLotCount().
' Price to Sell: '.$orderbook->getBestPriceToSell().' Available lots: '.$orderbook->getBestPriceToSellLotCount()."\n";
getOrderBook fixed in version 1.2.3
thanks for reply