sendTransaction не вернула ошибку

Страницы: 1
RSS
sendTransaction не вернула ошибку, Поведение sendTransaction не по документации
 
Добрый день


Простой код снятия стоп-заявки, в момент вызова стоп-заявка исполняется

function drop_stop_order(p_trans_id)
   --
  local bs, res = {}, ""
 
  message('Begin drop_stop_order trans_id=' .. p_trans_id)
 
  for i=0,(tonumber(getNumberOf("stop_orders"))-1) do    
    bs=getItem("stop_orders",i)
    if bit.band(bs.flags, 1)~=0  and bs.trans_id == p_trans_id then
      message('Send drop stop-order trans_id='..bs.trans_id);        
      local Transaction={
       ["TRANS_ID"]     = tostring(bs.trans_id),
       ["ACTION"]       = "KILL_STOP_ORDER",
       ["CLASSCODE"]    = 'SPBFUT',
       ["SECCODE"]      = 'SiH5', -- инструмент
       ["STOP_ORDER_KEY"] = tostring(bs.ordernum),
       ["ACCOUNT"]        = 'SPBFUTxxx'
       }
    -- Если функция вернула строку диагностики ошибки, то значит транзакция не прошла    
      local Result = sendTransaction(Transaction);
      if Result ~= "" then
        message("Drop stop-order error!\nОШИБКА: "..tostring(Result));
      end

    end  
 endend    


В терминале сообщения:
Begin drop_stop_order trans_id=142604
Send drop stop-order trans_id=142604
и в обход скрипта насколько понял сообщение: Не удается снять стоп-заявку N [1217138444]

То есть сообщения "Drop stop-order error!\nОШИБКА: "..tostring(Result) нет, а должно судя по документации.
Почему sendTransaction не вернула ошибку??
 
Цитата
ЭД написал:
Добрый день


Простой код снятия стоп-заявки, в момент вызова стоп-заявка исполняется

function drop_stop_order(p_trans_id)  
    --  
   local bs, res = {}, ""
   
   message('Begin drop_stop_order trans_id=' .. p_trans_id)
   
   for i=0,(tonumber(getNumberOf("stop_orders"))-1) do    
     bs=getItem("stop_orders",i)
     if bit.band(bs.flags, 1)~=0  and bs.trans_id == p_trans_id then
       message('Send drop stop-order trans_id='..bs.trans_id);          
       local Transaction={
        ["TRANS_ID"]     = tostring(bs.trans_id),  
        ["ACTION"]       = "KILL_STOP_ORDER",
        ["CLASSCODE"]    = 'SPBFUT',
        ["SECCODE"]      = 'SiH5', -- инструмент
        ["STOP_ORDER_KEY"] = tostring(bs.ordernum),
        ["ACCOUNT"]        = 'SPBFUTxxx'
        }
     -- Если функция вернула строку диагностики ошибки, то значит транзакция не прошла    
       local Result = sendTransaction(Transaction);
       if Result ~= "" then
         message("Drop stop-order error!\nОШИБКА: "..tostring(Result));
       end  

     end    
  end  end    


В терминале сообщения:
Begin drop_stop_order trans_id=142604
Send drop stop-order trans_id=142604
и в обход скрипта насколько понял сообщение:  Не удается снять стоп-заявку N [1217138444]

То есть сообщения  "Drop stop-order error!\nОШИБКА: "..tostring(Result)  нет, а должно судя по документации.
Почему sendTransaction не вернула ошибку??
sendTransaction  возвращает ошибки обнаруженные  терминалом,
а полученную Вами ошибку прислала биржа.
Вы ее получите в колбеке.
 
Спасибо.
Нет у вас хорошего примера под рукой OnTransReply) ?
 
ЭД, добрый день.

Примеры использования OnTransReply см. сс.35-40 документа "Использование Lua в Рабочем местеQUIK".
 
Цитата
ЭД написал:
Спасибо.
Нет у вас хорошего примера под рукой OnTransReply) ?
У меня этот колбек реализован так:
Код
local t_mes={
"отправлена серверу",
"получена на сервер QUIK от клиента",
"ошибка при передаче транзакции в торговую систему. Так как отсутствует подключение шлюза Московской Биржи",
"выполнена",
"не выполнена торговой системой. Более подробное описание ошибки отражается в поле «Сообщение»",
"не прошла проверку сервера QUIK по каким-либо критериям. Например, проверку на наличие прав у пользователя на отправку транзакции данного типа",
"не прошла проверку лимитов сервера QUIK",
"не поддерживается торговой системой",
"не прошла проверку правильности электронной цифровой подписи",
"не удалось дождаться ответа на транзакцию, т.к. истек таймаут ожидания",
"отвергнута, так как ее выполнение могло привести к кросс-сделке",
"не прошла контроль дополнительных ограничений, установленных брокером",
"принята после нарушения дополнительных ограничений, установленных брокером",
"отменена пользователем в ходе проверки дополнительных ограничений, установленных брокером" }

function OnTransReply(t)
   local x=t.status
   if Log then Log:write("status="..x..": транзакция "..t_mes[x+1]..">"..msg.."\n"); Log:flush();end
   if x==3 or 2>x or x==15 then return end
   ---удаляем ошибочные транзакции сделок
   local _id=t.trans_id; local e,j,M;
   for n=1,2 do
      e=tor[n]; j=0; M=#e; while M>j do j=j+1; u=e[j];
         if u[1]==id_ then if M>j then e[j]=e[M]; end  e[M]=nil; e[0]=e[0]-1
         if Log then Log:write("transReply "..",e[0]="..e[0]..",#e="..#e.."\n");Log:flush(); end
         return; end  --отменяем выставление заявки
         if #u==3 and u[3]==id_ then u[3]=nil ;e[0]=e[0]-1
         if Log then Log:write("transReply "..",e[0]="..e[0]..",#e="..#e.."\n");Log:flush(); end
         return; end  -- отменяем удаление
      end
   end
end
 
Спасибо всем.
Страницы: 1
Читают тему
Наверх