Sergey (Автор тем)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Путь к скриптам Lua
 
QUIK 8.7.1.3
У меня есть основной скрипт и еще несколько дополнительных, которые основной подключает через requare. Все скрипты расположены в отдельной папке но не внутри директирии QUIK (так нужно). При добавлении и запуске основного скрипта в QUIK все работает нормально, до момента пока QUIK не перезапускается. После перезапуска QUIK и попытке запуска скрипта получаю "module ... not found' с перечнем папок, где QUIK пытался искать подключаемый скрипт. Чтобы снова заработало нужно в окне "Lua скрипты" удалить мой основной скрипт и заново добавить.
Такое впечатление, что сразу после добавления скрипта к путям, по которым происходит поиск подключаемых скриптов добавляется папка из которой запускается скрипт, а после перезагрузки QUIK в этой папке уже не ищет.
Как можно исправить эту ситуацию? Добавить еще один путь для поиска скриптов, или указать, чтобы requare искал скрипты в папке нахождения основного скрипта?
Значение индикатора на графике
 
Добрый день.
Если на графике навести курсор на индикатор EMA, то появляется всплывающее меню с его значением. Но что делать, если индикатор совпадает со свечей графика (значение лини EMA внутри свечи), при наведении курсора отображаются данные свечи, как отобразить значение индикатора?  
QUIK Сбербанк, часовые свечи не соответствуют данным московской биржи
 
Добрый день.
Подскажите почему данные на графике QUIK Сбербанка могут не соответствовать данным московской биржи?
Пример:
Инструмент ЗПИФ ФПР, идентификатор: RU000A101NK4
Выставляю часовые свечи, цена закрытия свечи 07.07.2021 18:00
В QUIK: 2797
На MOEX: 2811
Т.е. разница в 14 рублей, примерно 0,5%
Синхронизация потоков
 
Добрый день.
Прошу помочь в синхронизации потоков.
Есть глобальная таблица
Код
Trades = {}
В нее добавляются и из нее удаляются элементы в потоке main и колбеках функциями:
Код
table.sremove(Trades, i) 
table.sinsert(Trades, trade)

Проблема в том, что перед добавлением/удалинием элементов происходит перебор элементов таблицы в цикле для поиска нужного индекса. Если нужный элемент найден, а другой поток удалит элемент с меньшим индексом, то индексы сдвинутся и получится ерунда, т.е. нужно синхронизировать потоки. В с++ я бы использовал mutex, в lua я нашел подобие mutex (возможно ошибаюсь), функции:
https://www.lua.org/manual/2.1/section3_5.html
Код
int        lua_lock (void);
lua_Object lua_getlocked  (int ref);
void       lua_pushlocked (int ref);
void       lua_unlock (int ref);
но я не понимаю как их использовать и не могу найти примеры (судя по объявлению функций это вообще с++).
Подскажите как можно решить проблему или где найти примеры/описание?
Пустой brokerref в OnTransReply ACTION = "KILL_ORDER"
 
Добрый день, прошу помочь разобраться.
Отправляю "KILL_ORDER" заполнив поле CLIENT_CODE, при этом заявка снимается но brokerref в OnTransReply приходит пустым. Такое поведение постоянно, использую ваш тестовый сервер.
В случае KILL_ORDER brokerref в OnTransReply должен быть пустым, или я делаю что-то не так?
Функция создающая транзакцию:
Код
function SE_KillOrder(
   account,    -- Код счета
   class_code, -- Код класса
   sec_code,   -- Код инструмента    
    order_key      --Код заявки
)
   -- Получает ID для следующей транзакции
   SE_trans_id = SE_trans_id + 1
   -- Заполняет структуру для отправки транзакции
   local Transaction={
      ['TRANS_ID']   = tostring(SE_trans_id),-- Номер транзакции
      ['ACCOUNT']   = account,              -- Код счета
      ['CLASSCODE']  = class_code,           -- Код класса
      ['SECCODE']    = sec_code,             -- Код инструмента
      ['ACTION']     = 'KILL_ORDER',          -- Тип транзакции ('NEW_ORDER' - новая заявка)      
      ['ORDER_KEY'] = tostring(order_key),   -- код транзакции
      ['CLIENT_CODE']= 'SE_'..sec_code       -- Комментарий к транзакции, который будет виден в транзакциях, заявках и сделках в поле brokerref      
   }
    --LogWrite(Transaction)
    
   -- Отправляет транзакцию
   local Res = sendTransaction(Transaction)
   -- Если при отправке транзакции возникла ошибка
   if Res ~= '' then
      -- Вызывает функцию обратного вызова (если она объявлена)
      if SE_OnTransSendError ~= nil then
         local trans = {}
         trans.trans_id = SE_trans_id
         trans.transaction = Transaction
         trans.result_msg = Res
         SE_OnTransSendError(trans)
      end
      -- Возвращает номер транзакции и сообщение об ошибке
      return SE_trans_id, Res
   end
   -- Если транзакция отправлена, возвращает ее номер
   return SE_trans_id
end
Страницы: 1
Наверх