параметр "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 счет срочного рынка).
Страницы: 1
Читают тему (гостей: 10)
Наверх