sendTransaction выдает ошибку для облигаций

Страницы: 1
RSS
sendTransaction выдает ошибку для облигаций, sendTransaction выдает ошибку для облигаций (хотя работает для фьючерсов)
 
Доброго времени суток!
sendTransaction() работает для фьючерсов но не для облигаций

Код:
Код
LastOrderId = 1234

function BuyBonds(quantity)
   LastOrderId = LastOrderId + 1
   
   local order = {}
   order["TRANS_ID"] = tostring(LastOrderId)
   order["CLASSCODE"] = "TQCB"
   order["ACTION"] = "Ввод заявки"
   order["Торговый счет"] = "L01-00000F00"
   order["К/П"] = "Покупка"
   order["Тип"] = "Лимитированная"
   order["Класс"] = "МБ ФР: Т+: Облигации"
   order["Инструмент"] = "АЛЬФАБ2Р10"
   order["Цена"] = "98.10"
   order["Количество"] = tostring(quantity)
   order["Условие исполнения"] = "Поставить в очередь"

   local trxResult = sendTransaction(order)
   
   return trxResult
end

function main()
   local trxResult = BuyBonds(10)
   message(tostring(trxResult))

   local fileStream = io.open("result.txt", "a")
   fileStream:write(trxResult .. "\n")
   fileStream:close();
end

Ошибку выдает рандомно одну из следующих:
Код
Не найдено поле "Количество" для транзакции "Ввод заявки" по классу "МБ ФР: Т+: Облигации"
Не найдено поле "Класс" для транзакции "Ввод заявки" по классу "МБ ФР: Т+: Облигации"
Не найдено поле "Условие исполнения" для транзакции "Ввод заявки" по классу "МБ ФР: Т+: Облигации"

На случай если нужны детали по инструменту:
Код
base_active_seccode: 
list_level: 1
face_unit: SUR
nextcoupon: 20230823
settle_date: 20230727
isin_code: RU000A102S80
stock_name: 
exp_date: 0
code: RU000A102S80
ric_code: 
base_active_classcode: 
accruedint: 26.5
sec_code: RU000A102S80
first_curr_qty_scale: 0
buybackdate: 0
second_curr_qty_scale: 0
mat_date: 20240222
sedol_code: 
cfi_code: 
face_value: 1000.0
couponperiod: 183
settlecode: Y1
cusip_code: 
stock_code: 
qty_multiplier: 1
min_price_step: 0.01
buybackprice: 0.0
option_strike: 0.0
second_currcode: 
scale: 2
class_name: МБ ФР: Т+: Облигации
lot_size: 1
first_currcode: 
yieldatprevwaprice: 875.0
bsid: 
step_price_currency: 
class_code: TQCB
couponvalue: 3108.0
short_name: АЛЬФАБ2Р10
trade_currency: SUR
regnumber: 4B02-10-01326-B-002P
qty_scale: 0
name: АЛЬФА-БАНК Б2Р10
 
Хоть разработчики и декларируют, что доступно описание полей на русском,  но все же стоит описывать транзакцию через поля, описанные в  документации в английской нотации. И только те поля, что не имеют  английской нотации на русском, полученные через сохранение формата  транзакций из кармана транзакций. Правда придется такой квест проделать,  чтобы выявить такие поля.

Впрочем, видимо, не нравится поле Класс. В пишется код класса, а не имя.
 
Цитата
Nikolay написал:
Хоть разработчики и декларируют, что доступно описание полей на русском,  но все же стоит описывать транзакцию через поля, описанные в  документации в английской нотации. И только те поля, что не имеют  английской нотации на русском, полученные через сохранение формата  транзакций из кармана транзакций. Правда придется такой квест проделать,  чтобы выявить такие поля.

Впрочем, видимо, не нравится поле Класс. В пишется код класса, а не имя.
Заменил "Торговый счет" на "ACCOUNT", получил ошибку
Код
Не найдено поле "ACCOUNT" для транзакции "Ввод заявки" по классу "МБ ФР: Т+: Облигации"
Так понял что ошибки выше говорят о том что те три поля ("Количество", "Класс", "Условие исполнения") типа не нужны. Закоментировал их, получил error "Не указан код клиента"
А когда добавляю поле
Код
order["Код клиента"] = "113..."
То получаю ошибку что поле лишнее
Код
Не найдено поле "Код клиента" для транзакции "Ввод заявки" по классу "МБ ФР: Т+: Облигации"
 
РоманВ, добрый день.

Проблема в указанных названиях параметров и их значениях:

Цитата
order["К/П"] = "Покупка"
- верно указать значение "Купля";

Цитата
  order["Тип"] = "Лимитированная"
- верно указать значение "Лимитная";

Цитата
  order["Класс"] = "МБ ФР: Т+: Облигации"
- параметр "Класс" недопустим для этой транзакции. Код класса уже указан в параметре "CLASSCODE";

Цитата
  order["Инструмент"] = "АЛЬФАБ2Р10"
- необходимо указать код инструмента, а не его название;

Цитата
  order["Количество"] = tostring(quantity)
- вместо "Количество" необходимо указать параметр "Лоты";

Цитата
  order["Условие исполнения"] = "Поставить в очередь"
- корректное название параметра - "Тип по остатку".

То есть, описание транзакции в данном случае должно быть задано следующим образом:
Код
order["TRANS_ID"] = tostring(LastOrderId)
order["CLASSCODE"] = "TQCB"
order["ACTION"] = "Ввод заявки"
order["Торговый счет"] = "L01+00000F00"
order["К/П"] = "Купля"
order["Тип"] = "Лимитная"
order["Инструмент"] = "RU000A102S80"
order["Цена"] = "98.10"
order["Лоты"] = tostring(quantity)
order["Тип по остатку"] = "Поставить в очередь"

Код клиента можно передать в параметре "Примечание".

При использовании универсального формата описания параметров транзакции рекомендуем получать список параметров и их значений из "Кармана транзакций": создайте таблицу "Карман транзакций", добавьте транзакцию с необходимыми параметрами, а затем сохраните транзакцию в tri-файл.
 
Цитата
Anton Belonogov написал:
Примечание
Спасибо большое Антон, всё работает  :smile:
Про карман транзакций не знал - буду дальше использовать  :cool:  
 
Не по теме, просто пришлось к слову. Товарищи разработчики, а что надо было курить, чтобы нагромоздить такую вот дикую мешанину из параметров, когда часть из них на одном языке, часть на другом, и вся эта хрень еще зависит от языка интерфейса программы?! В английском словаре слов не нашли что ли, раз понадобилось притащить в КОД русский язык?
 
Можно и как-то так:
Код
order["TRANS_ID"] = tostring(LastOrderId)
order["CLASSCODE"] = "TQCB"
order["ACTION"] = "NEW_ORDER"
order["ACCOUNT"] = "L01+00000F00"
order["OPERATION"] = "B"
order["SECCODE"] = "RU000A102S80"
order["PRICE"] = "98.10"
order["QUANTITY"] = tostring(quantity)
order["EXECUTION_CONDITION"] = "PUT_IN_QUEUE"
Страницы: 1
Читают тему
Наверх