параметр "ACCOUNT" в sendTransaction

Страницы: 1
RSS
параметр "ACCOUNT" в sendTransaction, особенности его применения на QUIK с субсчетами.
 
Интерпретатор языка Lua.pdf, стр.33, 3.11 Функции для работы с заявками.
читаем:
STRING result sendTransaction(TABLE transaction)
В качестве параметра принимает таблицу, в которой имена и значения полей соответствуют параметрам tri-файла
(см. Руководство пользователя QUIK, Раздел 6 «Совместная работа с другими приложениями», п. 6.11.3).
Там этот пункт отсутствует. Догадываемся, что следует читать п. 6.9.3.
ACCOUNT Номер счета Трейдера. Параметр обязателен при «ACTION» = «KILL_ALL_FUTURES_ORDERS».
В самом деле, при сделках купли-продажи в этом параметре может быть все, что угодно, его может и не быть вовсе. Но возник теоретический (т.к. на практике нет субсчетов) вопрос: как делать заявки при наличии нескольких субсчетов ФОРТС на одном QUIK?
Lbot3D
 
XXM, добрый день!

Цитата
XXM написал:
Там этот пункт отсутствует. Догадываемся, что следует читать п. 6.9.3.
Проблема изучается. Постараемся в ближайшее время дать ответ.

Цитата
XXM написал:
В самом деле, при сделках купли-продажи в этом параметре может быть все, что угодно, его может и не быть вовсе.
Уточните пожалуйста, почему Вы так решили? В случае отсутствия параметра ACCOUNT при отправке транзакции на выставление заявки (на покупку/продажу), либо указания в нем "чего угодно", функция sendTransaction вернет следующие сообщения об ошибке:

1) Не указали параметр

2) Указали неверный счет


Цитата
XXM написал:
Но возник теоретический (т.к. на практике нет субсчетов) вопрос: как делать заявки при наличии нескольких субсчетов ФОРТС на одном QUIK?
Указывать данный счет в параметре ACCOUNT.
 
Roman Azarov, программа QUIK - удивительная!  :)


Поэкспериментировал, весь код программы тут: https://pastebin.com/uPmCUqS1 (код старый, 2016 года, настройки счетов делал на демо-QUIK сегодняшний)

Заявку делал нажимая "купить --" и при rus = false
Код
function send_order(client, class, seccode, account, operation, quantity, price)
   account = 'blablabla'
   local mes = 'send_order, client = '..client..', class = '.. class..', seccode = '..seccode..', account = '..account ..', quantity = '..quantity.. ', operation = '..operation.. ', price = '..price
   message(mes)
   local trans_id = get_trans_id()
   rus = false
   --rus = true
   if rus then
      trans_params = {
         CLASSCODE = class,
         CLIENT_CODE = client,
         SECCODE = seccode,
         ACCOUNT = account,
         TYPE = new_type,
         TRANS_ID = trans_id,
         OPERATION = operation,
         QUANTITY = tostring(quantity),
         PRICE = tostring(price),
         ACTION = "NEW_ORDER"
         }
   else
      if operation == "B" then
         operation = 'Покупка'
      else
         operation = 'Продажа'
      end
      trans_params = {
         ["TRANS_ID"] = trans_id,
         ["Комментарий"] = client,
         ["ACTION"] = "Ввод заявки",
         ["CLASSCODE"] = class,
         ["Тип"] = "Лимитированная",
         ["Условие исполнения"] = "Поставить в очередь",
         ["Класс"] = class,
         ["Инструмент"] = seccode,
         ["Количество"] = tostring(quantity),
         ["Цена"] = tostring(price),
         ['К/П'] = operation,
         ["Торговый счет"] = account
         }
   end
   return sendTransaction(trans_params)
end

заявка без ошибок регистрируется при account = 'blablabla'.
Вроде так быть не должно?

Но при rus = true реагирует должным образом! :lol:

Решение, в общем, найдено. Но хотелось бы ваших комментариев, Roman Azarov.
Lbot3D
 
XXM, добрый день!

Цитата
XXM написал:
заявка без ошибок регистрируется при account = 'blablabla'.Вроде так быть не должно?
Пришлите, пожалуйста, снимки экрана с сообщением об успешно выставленной заявке и таблицей заявок, в которой данную заявку видно (в частности, поле "Счет").
Будем разбираться.
 
XXM,

Что касается опечатки ранее описанных опечаток в документации, документация будет исправлена в одной из очередных версий ПО.
Приносим извинения за причиненные неудобства.
 
1. скриншот. Отчетливо видно, что в заявке account = blablabla
OnTransReply подтверждает указанный account. Но вот OnOrder и OnTrade молча игнорируют команду трейдера и делают то, что делают: меняют account на тот, который считают нужным! Это ли не удивительно?

Скрытый текст

2. Код программы:

Скрытый текст

3. По опечаткам: в документе "6 Работа с другими приложениями.pdf" их несколько. Что еще попались: 6.11.4, 6.12.23
Lbot3D
 
Я полагал:
Цитата
XXM написал:
Но при rus = true реагирует должным образом!  

Решение, в общем, найдено. Но хотелось бы ваших комментариев, Roman Azarov.
Ситуация намного печальнее:

1. если вместо account = 'SPBFUT001ad'  написать account = 'blablabla', мы увидим сообщение:
Ошибка:  Указанный счет депо не найден: "blablabla", OpenLong, SiH1, B, 1, price=74260.0
2. если вместо account = 'SPBFUT001ad'  написать account = nil, мы увидим сообщение:
Ошибка:  Не указано значение поля "Торговый счет", OpenLong, SiH1, B, 1, price=74253.0
3. если вместо account = 'SPBFUT001ad'  написать account = 'NL0011100043', мы увидим сообщения:
send_order, client = OpenLong, class = SPBFUT, seccode = SiH1, account = NL0011100043, quantity = 1, operation = B, price = 74248.0, trans_id = 144248072
SiH1; OnTrans, order_num = 1892954054859215491, 74248 x 1, t_id = 144248072, account = NL0011100043
Заявка 1892954054859215491 успешно зарегистрирована.
SiH1; OnOrder, B, order_num = 1892954054859215491 (74248.0x1.0), t_id = 144248072, flag = 25, OpenLong, balance = 1.0, active, account = SPBFUT001ad

Прошу прояснить, что не так в вашем (нашем) QUIK?
Lbot3D
 
XXM, добрый день!

Прошу прощения, в прошлый раз дал не совсем полный ответ.
В том, и только в том, случае, если Вам (как UID) выданы права на 1 счет срочного рынка (именно так и есть на нашем учебном сервере), то он будет автоматически подставляться при попытке выставить заявку по срочному рынку, если указать счет фондового рынка. В ином случае, Вы получите сообщение вида "Указанный счет депо не найден: "blablabla".

Исходя из этого:
Цитата
XXM написал:
1. если вместо account = 'SPBFUT001ad'  написать account = 'blablabla', мы увидим сообщение:
Ошибка:  Указанный счет депо не найден: "blablabla", OpenLong, SiH1, B, 1, price=74260.0
Корректно

Цитата
XXM написал:
2. если вместо account = 'SPBFUT001ad'  написать account = nil, мы увидим сообщение:
Ошибка:  Не указано значение поля "Торговый счет", OpenLong, SiH1, B, 1, price=74253.0
Корректно

Цитата
XXM написал:
3. если вместо account = 'SPBFUT001ad'  написать account = 'NL0011100043', мы увидим сообщения:
Заявка 1892954054859215491 успешно зарегистрирована.
...account = SPBFUT001ad
Тоже корректно (при условии, что Вам доступны права лишь на 1 счет срочного рынка).
 
XXM, добрый день.

Описанная в данном инциденте ошибка была исправлена в версии 8.12.0 терминала QUIK. Рекомендуем вам обновить версию программы.

Приносим извинения за причиненные неудобства.
 
Evgeniy Karnaukhov, версию обновил. Руководство пользователя поправили, увидел.
Теперь понимаю, что при одном счете ФОРТС в UID в сделках при ошибке в заявке account = 'blablabla' QUIK автоматически подставляет значение account этого счета и заявка идет на исполнение.
Хотя считаю, что ответ "Ошибка:  Указанный счет депо не найден" был правильным.
Lbot3D
 
Цитата
Evgeniy Karnaukhov написал:
XXM, добрый день.
Описанная в данном инциденте ошибка была исправлена в версии 8.12.0 терминала QUIK. Рекомендуем вам обновить версию программы.
Приносим извинения за причиненные неудобства.
Вы поторопились с отчетом и извинениями:



Уточню свой предыдущий ответ:
Теперь понимаю, что при одном счете ФОРТС в UID в сделках при ошибке в заявке account = 'blablabla' QUIK автоматически подставляет значение account этого счета и заявка идет на исполнение.
Хотя считаю, что ответ "Ошибка:  Указанный счет депо не найден" был бы правильным.
Lbot3D
 
Цитата
XXM написал:
Вы поторопились с отчетом и извинениями:
Да,  действительно наблюдаем опечатку, естественно, должно быть написано   "6.10.23". Данную ситуацию разбираем, документацию исправим в одной из   очередных версий ПО.

Цитата
XXM написал:
Теперь понимаю, что при одном счете ФОРТС в UID в сделках при ошибке в заявке account = 'blablabla' QUIK автоматически подставляет значение account этого счета и заявка идет на исполнение.Хотя считаю, что ответ "Ошибка:  Указанный счет депо не найден" был бы правильным.
Давайте уточним. Инцидент регистрировался на тему опечатки в документации, которые Вы привели в первых сообщениях. По поводу ответа на правильный/неправильный ввод данных в "account" Вам было отвечено ранее в #8, что все ответы корректны. Ответ  "Ошибка:  Указанный счет депо не найден" уже возвращается, если Вы в "account" вводите некорректное название счета.
Уточните, пожалуйста, что Вы имели в виду, возможно могли не совсем правильно Вас понять.
 
1.
Цитата
Evgeniy Karnaukhov написал:
Да,  действительно наблюдаем опечатку, естественно, должно быть написано   "6.10.23". Данную ситуацию разбираем, документацию исправим в одной из   очередных версий ПО.
Ясно.

2.
Цитата
Evgeniy Karnaukhov написал:
Давайте уточним. Инцидент регистрировался на тему опечатки в документации, которые Вы привели в первых сообщениях. По поводу ответа на правильный/неправильный ввод данных в "account" Вам было отвечено ранее в #8, что все ответы корректны. Ответ  "Ошибка:  Указанный счет депо не найден"  уже  возвращается, если Вы в "account" вводите некорректное название счета.
Уточните, пожалуйста, что Вы имели в виду, возможно могли не совсем правильно Вас понять.
Тема опечатки меня волновала в 135-ю очередь, там я, как писал, уже догадался, ЧТО именно следут читать:
Цитата
XXM написал: "6.11.3 ... Там этот пункт отсутствует. Догадываемся, что следует читать п. 6.9.3."

3.
Цитата
Evgeniy Karnaukhov написал:
По поводу ответа на правильный/неправильный ввод данных в "account" Вам было отвечено ранее в #8, что все ответы корректны. Ответ  "Ошибка:  Указанный счет депо не найден"  уже  возвращается, если Вы в "account" вводите некорректное название счета.
Уточните, пожалуйста, что Вы имели в виду, возможно могли не совсем правильно Вас понять.
"было отвечено ранее в #8, что все ответы корректны" тоже читал, понял.
Также прочитал, что " Ответ "Ошибка: Указанный счет депо не найден" уже возвращается, если Вы в "account" вводите некорректное название счета."  
Мое уточнение будет состоять в том, вышесказанное вами НЕВЕРНО в случае одного счета в рабочем QUIK.
И в сообщении #6 привожу скриншот (Отчетливо видно, что в заявке account = blablabla
OnTransReply подтверждает указанный account. Но вот OnOrder и OnTrade молча игнорируют команду трейдера и делают то, что делают: меняют account на тот, который считают нужным!). И сделка, поданная с "account = blablabla" проходит, как будто так и должно быть, и не важно, account <> blablabla!
Считаю верным во всех случаях ошибочного указания параметра account возвращать ответ  "Ошибка: Указанный счет депо не найден", а не будет "автоматически подставлять"  счет срочного рынка.
Lbot3D
 
Цитата
Roman Azarov написал:
XXM, добрый день!

Прошу прощения, в прошлый раз дал не совсем полный ответ.
В том, и только в том, случае, если Вам (как UID) выданы права на   1   счет срочного рынка (именно так и есть на нашем учебном сервере), то он будет автоматически подставляться при попытке выставить заявку по срочному рынку, если указать счет фондового рынка. В ином случае, Вы получите сообщение вида "Указанный счет депо не найден: "blablabla".
А вот это уже не правильно., как было сказано выше. Указан не правильный счет, заявка не должна выставляться. Да-же при том если разрешение выдано только на один счет для фондового. Ситуации бывают разные. И не важно, нужно проверять условия посланной команды и если не соответствуют, выдавать причину ошибки. Без подставки/изменения счета. На крайний случай можно в описании ошибки написать, что у вас разрешение для торговли на этом рынке выдано на счет БЛАБЛАБЛА.
Ну это было бы логичней.
 
Цитата
Константин написал:
... Указан не правильный счет, заявка не должна выставляться...
Именно так!
----------------
Одна функция позволяет себе заменить счет в заявке на такой, как ему кажется, БОЛЕЕ правильный счет, а другой тогда можно будет и количество подправить? :lol:  
Lbot3D
 
Тоже самое происходит и при подаче заявки руками через форму заявки
Вы этого просто не замечаете
 
Речь идет в ветке "Программирование на языке Lua".
При подаче  заявки руками через форму заявки мы не сможем ошибочно ввести аккаунт "blablabla" в поле "Торговый счет". Поэтому говорить "тоже самое происходит и при подаче заявки руками" не корректно.
Lbot3D
 
Цитата
XXM написал:
Мое уточнение будет состоять в том, вышесказанное вами НЕВЕРНО в случае одного счета в рабочем QUIK.И в сообщении #6 привожу скриншот (Отчетливо видно, что в заявке account = blablablaOnTransReply подтверждает указанный account. Но вот OnOrder и OnTrade молча игнорируют команду трейдера и делают то, что делают: меняют account на тот, который считают нужным!). И сделка, поданная с "account = blablabla" проходит, как будто так и должно быть, и не важно, account <> blablabla!Считаю верным во всех случаях ошибочного указания параметра account возвращать ответ  "Ошибка: Указанный счет депо не найден", а не будет "автоматически подставлять"  счет срочного рынка.
В сообщении #6 Вы прислали скриншот, на котором ввод "blablabla" в account приводит к тому, что введенное значение игнорируется и подставляется счет срочного рынка. Далее, в сообщении #7 Вы привели:
Цитата
XXM написал:
1. если вместо account = 'SPBFUT001ad'  написать account = 'blablabla', мы увидим сообщение:Ошибка:  Указанный счет депо не найден: "blablabla", OpenLong, SiH1, B, 1, price=74260.0
Просьба уточнить, что подразумевалось под этим пунктом?
 
Цитата
Evgeniy Karnaukhov написал:
... в сообщении #7 Вы привели:
Цитата
XXM написал:
1. если вместо account = 'SPBFUT001ad'  написать account = 'blablabla', мы увидим сообщение:Ошибка:  Указанный счет депо не найден: "blablabla", OpenLong, SiH1, B, 1, price=74260.0
Просьба уточнить, что подразумевалось под этим пунктом?

В сообщении #6 в п.2 приведен код программы SuperScalp.lua
Если выставить в function send_order() параметр account = 'blablabla', то при выставлении заявки при rus = true trans_params{} будет таким:
Код
trans_params = {
   CLASSCODE = class,
   CLIENT_CODE = client,
   SECCODE = seccode,
   ACCOUNT = account,
   TYPE = new_type,
   TRANS_ID = trans_id,
   OPERATION = operation,
   QUANTITY = tostring(quantity),
   PRICE = tostring(price),
   ACTION = "NEW_ORDER"
   }
и будет такой отклик:
Код
17:38:01; SiH1; нажато: купить, 1
17:38:01; send_order, client = OpenLong, class = SPBFUT, seccode = SiH1, account = blablabla,
quantity = 1, operation = B, price = 74081.0, trans_id = 173801588
17:38:01; send_order, ошибка:  Указанный счет депо не найден: "blablabla", OpenLong, SiH1, B, 1, price=74081.0
а при rus = false:
Код
if operation == "B" then
   operation = 'Покупка'
else
   operation = 'Продажа'
end
trans_params = {
   ["TRANS_ID"] = trans_id,
   ["Комментарий"] = client,
   ["ACTION"] = "Ввод заявки",
   ["CLASSCODE"] = class,
   ["Тип"] = "Лимитированная",
   ["Условие исполнения"] = "Поставить в очередь",
   ["Класс"] = class,
   ["Инструмент"] = seccode,
   ["Количество"] = tostring(quantity),
   ["Цена"] = tostring(price),
   ['К/П'] = operation,
   ["Торговый счет"] = account
   }
и сделка проходит с указанным нами активом, в указанную сторону указанным количеством  и с ошибочным account:
Код
17:38:26; SiH1; нажато: купить, 1
17:38:26; send_order, client = OpenLong, class = SPBFUT, seccode = SiH1, account = blablabla,
quantity = 1, operation = B, price = 74100.0, trans_id = 173826276
17:38:27; SiH1; OnTrans, order_num = 1892954205183352395, 74100 x 1, t_id = 173826276, account = blablabla
17:38:27; SiH1; OnTrade, order_num = 1892954205183352395, t_n = 1892954205182815332 (74045.0x1.0), account = SPBFUT000tr
17:38:27; SiH1; OnOrder, B, order_num = 1892954205183352395 (74100.0x1.0),
t_id = 0, flag = 24, OpenLong, balance = 0.0, filled, account = SPBFUT000tr
17:38:27; SiH1; OnOrder, B, order_num = 1892954205183352395 (74100.0x1.0),
t_id = 173826276, flag = 24, OpenLong, balance = 0.0, filled, account = SPBFUT000tr
То есть в сообщении #7 был приведен момент работы SuperScalp.lua при account = 'blablabla' и  rus = true.
Lbot3D
 
XXM, благодарим за пояснения. В ходе изучения ситуации пришли к предположению, что текст "Ошибка: Указанный счет депо не найден..." вероятно появляется в результате работы Вашего скрипта. Так как по умолчанию при неправильно введенном счете для срочного рынка он автоматически заменяется на корректный при условии, что у клиента есть только один торговый счет для срочного рынка.
 
XXM, добрый день!

Описанная в данной теме опечатка в документации была исправлена в версии 8.13.0 терминала QUIK.
Приносим извинения за причиненные неудобства.
Страницы: 1
Читают тему (гостей: 2)
Наверх