NiKO (Все сообщения пользователя)

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

Страницы: 1
После вызова ds:Close() не работает callback при перезаказе данных
 
Здравствуйте.

В скрипте ниже, после вызова второго CreateDataSource() не работает колбэк.
Тестировалось на QUIK 9.5.0.42, lua 5.3.5
Проверьте кто-нибудь на последней версии Квик, есть ли этот баг?
Код
stopped = false

ClassCode = "TQBR"
SecCode = "GAZP"


function OnStop(row)
    stopped = true
end

function main()
    
    ds = CreateDataSource("QJSIM", "GAZP", INTERVAL_M1)
    ds: SetUpdateCallback (cb)
    ds: Close()

    ds = CreateDataSource("QJSIM", "GAZP", INTERVAL_M1)
    ds: SetUpdateCallback (cb)
        
    while not stopped do 

    end 

end

function cb( index )
    local t = ds:T(index)
    local _str = string.format("#%d of %d\t%.4f\t%.4f\t%.4f\t%.4f\t%.4f %02d.%02d.%04d %02d:%02d:%02d.%04d\n",
    index, ds:Size(),ds:O(index), ds:H(index), ds:L(index), 
    ds:C(index), ds:V(index),
    t.day, t.month, t.year, t.hour, t.min, t.sec, t.ms)
    message(_str)
    end

Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Точка и запятая в цене, При копировании цены в exel копируется запятая и точка
 
Настройки Windows:
Панель управления\Все элементы панели управления
Региональные стандарты
Дополнительные параметры

Здесь выбрать нужные разделители.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
FCC. В Market Data Incremental Refresh поля Инструмента приходит частично в группе, частично вне группы
 
Прошу прощения. Кажется проблема с сортировкой полей в quickfix. Буду разбираться.  
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
FCC. В Market Data Incremental Refresh поля Инструмента приходит частично в группе, частично вне группы
 
Тэги 336, 387 и некоторые другие также приходят вне группы. Тоже видно на скриншоте.
В документации к FCC и Адаптеру, указано, что они должны быть в группе тэг 268
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
FCC. В Market Data Incremental Refresh поля Инструмента приходит частично в группе, частично вне группы
 
Скриншот не влезает в сообщение, по-этому даю ссылку https://s.mail.ru/k4mx/pu1giwGXa
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
FCC. В Market Data Incremental Refresh поля Инструмента приходит частично в группе, частично вне группы
 
Здравствуйте.
Ниже ответ FCC на запрос получения обезличенной сделки:
Код
8=FIX.4.29=23335=X34=7749=QFCC52=20220906-17:49:5556=CLIENT115=SUR55=ГАЗПРОМ ао63=075=20220906100=MICEX120=SUR262=AT;GAZP@MICEX326=17336=OPEN387=285106143=7261822.00268=1279=0269=248=GAZP22=8270=260.840000271=20273=14:35:0910=199

На скриншоте видно, что первая часть полей из Инструмента находится за пределами группы, 2ая часть в самой группе. Могу предположить, что первая часть тоже должна быть в группе. Прошу прокомментировать.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
FCC. Не могу получить сделки по номер заявки. Ошибка Unsupported message type для тэга 11
 
Здравствуйте.

Суть проблемы описана в заголовке.
Ниже привожу запросы и ответы клиента-сервера:
Код
Запрос на исполнение сделки
20220906-14:19:19.044 : 8=FIX.4.29=19935=D34=5849=CLIENT152=20220906-14:19:19.04356=QFCC1=L01-00000F0011=CORID-1662473923-121=122=838=1040=244=26348=GAZP54=159=060=20220906-17:19:19.042100=MICEX109=E151041=MC010020000010=105

Ответ с данными по заявке
20220906-14:19:19.062 : 8=FIX.4.29=34835=849=QFCC56=CLIENT134=9452=20220906-14:19:1937=220906-TQBR-3246518839611=CORID-1662473923-1109=E1517=220906-TQBR-ZR6cYu-0-BdM0520=0150=039=01=L01-00000F0022=848=GAZP100=MICEX207=MICEX54=138=10151=1014=040=244=26315=SUR59=032=031=0.0000006=060=20220906-14:19:18.30321=15015=52245017=-3:00:005002=324651883965060=610=104

Запрос на получение сделок по заявке
20220906-14:19:19.063 : 8=FIX.4.29=10835=AD34=5949=CLIENT152=20220906-14:19:19.06256=QFCC11=CORID-1662473923-1568=TRID-1662473923-16569=4910=126

Ответ с ошибкой
20220906-14:19:19.064 : 8=FIX.4.29=9235=349=QFCC56=CLIENT134=9552=20220906-14:19:1945=5958=Unsupported message type373=1110=239
Пробовал подставлять в тэг 11 разные значение и всегда один ответ : Unsupported message type.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
FCC. Execution Report не возвращает тэг 5080(TakeProfitPx) для стоп+тэйк заявок
 
Подскажите, как в Execution Report получить значение профита для "стоп-заявки + тэйк профит"? Спасибо!
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
FCC. Execution Report не возвращает тэг 5080(TakeProfitPx) для стоп+тэйк заявок
 
Запрос:
Код
8=FIX.4.29=24135=D34=2449=CLIENT152=20220902-22:54:26.93256=QFCC1=L01-00000F0011=1662159220-121=122=838=1040=t44=20048=GAZP54=159=060=20220903-01:54:26.93199=206.51100=MICEX109=E15211=0.15389=0.1836=0842=01041=MC01002000005080=20010=124
Ответ:
Код
8=FIX.4.29=37035=849=QFCC56=CLIENT134=6052=20220902-22:54:2637=220902-TQBR-131111=1662159220-1109=E1517=220903-TQBR-L9-0-12jFk20=0150=039=01=L01-00000F0022=848=GAZP100=MICEX207=MICEX54=138=10151=1014=040=t44=20015=SUR59=032=031=0.00000099=206.516=060=20220902-22:54:26.75221=15015=52245017=-3:00:00636=N836=0211=0.15842=0389=0.15002=13115060=3910=213
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
FCC. Execution Report не возвращает тэг 5080(TakeProfitPx) для стоп+тэйк заявок
 
Здравствуйте.
Отправляю стоп+тэйк заявку через FCC. Заявка выставляет, но Execution Report присылает данные без TakeProfitPx.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
FCC. Security Definition Request присылает ошибку "Security is locked now, try later"
 
Здравствуйте.
Столкнулся с нелогичной работой Security Definition Request.
На примере USD000000TOD@CETS_GAME

При получении всех бумаг приходит вся информацию по данной бумаге, но если сделать запрос только по этой бумаге, то приходит ответ с ошибкой Security is locked now, try later.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
FCC. Добавить версию FIX4.4
 
Здравствуйте!

"Fix Client Connector" предлагает работать по протоколу FIX 4.2, но спецификация больше схожа с FIX4.4, т.к. FIX4.2 - отсутствуют сообщения "Request for Positions", "Request for Positions Ack", "Position Report" (возможно другие, еще не всё проверил). Это вызывает большие проблемы, если использовать фреймворк, такой как quickfix и аналогичные, потому что для каждой спецификации у него описан свой набор классов и методов. Т.е. включив в работу протокол FIX42, программист не может использовать готовые классы для обработки Request for Positions, Request for Positions Ack, Position Report, т.к. они есть только в FIX44, но включив в работу протокол FIX44, возникают ошибки, тк протокол не соответствует версии на сервере.

Сейчас приходится колхозить, переносить классы и методы из фикс44 в фикс42, что сильно затрудняет разработку и адаптацию под вашу спецификацию FIX.

Предложение
Добавить в FCC возможность подключаться по протоколу FIX44(а лучше FIX5+). Т.е. не меняя функционал FCC добавить возможность получать ответы с тегом 8=FIX.4.4 и 8=FIX.4.2(для созданных систем).
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
FCC. Security Definition и MarketDataSnapshotFullRefresh разные значения тега 100 (ExDestination)
 
Да. Зарегистрируйте, пож-та.

В документации для  SecurityDefinition в место  <Инструмент> заменить на тег 100, т.к. при указании  <Инструмент> я ожидаю, что данная структура будет присутствовать (заполнена).

Хотелось бы чтобы при наличии поля <Инструмент> всегда возвращалась заполненная структура как ниже:
<component name='Instrument'>
  <field name='Symbol' required='N' />
  <field name='IDSource' required='N' /> \\\ здесь не обязательный параметр, т.к.  может отсутствовать в ответе
  <field name='SecurityID' required='N' /> \\\ так же может отсутствовать
  <field name='ExDestination' required='N' />
</component>
Я бы в нее еще добавил код рынка.

Это очень удобно конвертировать в структуру данных на С++, С# и т.п. Хотя сейчас я её дополняю самостоятельно из полей сообщения SecurityDefinition.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
FCC. Security Definition и MarketDataSnapshotFullRefresh разные значения тега 100 (ExDestination)
 
Здравствуйте.
Заказывают стакана GAZP@TQBR, а получаю GAZP@MICEX. Я понимаю, что это одно и тоже, но по какому признаку в ответе в теге 100 указывается либо код рынка, либо код класса?
Что первично для FCC: код рынка или код класса?

Пример:
1) Получаю инструмент запросом Security Definition Request (для GAZP) -> FCC возвращает теги 100 - TQBR, 308 - MICEX, 48 - GAZP
2) Длаее заказываю стакан Market Data Request (указывают тег 48-GAZP, 100-TQBR) -> получаю стакан с тегами 48-GAZP, 100-MICEX

Почему тег 100 возвращается MICEX, а не то, что я заказывал? И почему описание Инструмента отличается в ответах системы FCC?
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Усреднение цены.(ФР), Возможно ли, отключение функции "усреднение цены"?
 
Не видел терминалов, которые бы не объединяли сделки в одну позицию по инструменту. Какой в этом смысл?
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
FCC. Security Definition, группа Инструмент, тег 48 не заполнен
 
FCC Security Definition возвращает данные с пустым значением кода 48, хотя в документации указано, что по нему происходит идентификация инструмента. (версия руководство 3.6)
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Qlua. Как получить тип бумаги по инструменту?
 
Сделал через message(tostring(sec["sectype"])). Выводит nil.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Qlua. Как получить тип бумаги по инструменту?
 
Пробую делать так, выводится только первый message: (Lua 5.3)
Код
stopped = false


function OnStop(row)
   stopped = true
end


function main()
   
   
   sec = getSecurityInfo("TQBR", "GAZP")
   message(sec["name"])
   message(sec["type"])

end
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Qlua. Как получить тип бумаги по инструменту?
 
Здравствуйте!
В таблице "Инструменты" не нашел параметр отвечающий за тип бумаги (фьючерс, опцион, др)
Как определить к какому типу относится данный инструмент?
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Вылетает QUIK Junior 9.7.0.14 при подключении отладчика Visual Studio 2022 17.0.5 С++
 
Тогда вопрос: Будут ли работать lua c++ скрипты, написанные ранее? Будет ли блокировка написание таких программ в QUIK?
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Вылетает QUIK Junior 9.7.0.14 при подключении отладчика Visual Studio 2022 17.0.5 С++
 
По какой причине введено ограничение? Чтобы на lua c++ программы не писали?
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Вылетает QUIK Junior 9.7.0.14 при подключении отладчика Visual Studio 2022 17.0.5 С++
 
К сожалению, никакого файла дампа не появилось. Такое ощущение, что КВИК закрывается без ошибки.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Вылетает QUIK Junior 9.7.0.14 при подключении отладчика Visual Studio 2022 17.0.5 С++
 
Здравствуйте.
Сегодня установил QUIK Junior 9.7.0.14 для отладки своих программ, но  при поптыке подключится к процессу QUIK просто закрывается.
В боевой версии квика 9.5.0.42 такой проблемы нет.

Кто сталкивался, прошу помощи.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
onDepoLimit() после onTransReply()
 
Вопрос решен! После onTransReply() меняется параметр locked_sell. Баг в моем коде.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Улучшение! "Добавить событие отмены стакана"
 
Здравствуйте.
Столкнулся с проблемой:

Работает левый lua скрипт и мой.
Оба скрипта подписываются на стаканы.
Если остановить левый lua-скрипт, то он описывает от всех стаканов, включая стакан моего скрипта.
Сейчас я в цикле проверяют подписку и заново подписываюсь, но хотелось бы это делать по событию "Отмена стакана"

Прошу внести данную возможность в функционал квика.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
onDepoLimit() после onTransReply()
 
Здравствуйте!

После onTransReply() вызывается onDepoLimit() c теми же значениями, что и до SendTransaction().
Изменения в onDepoLimit() происходят только после вызова onOrder().
Правильно ли я понимаю, что меняются какие-то внутренние параметры в depo_limits ?
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Доработка тейк-профит, Введение дополнительного окна.
 
Разве защита спреда не решает данную проблему?
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Изучаем Qlua., "hello world"
 
После обновления с 6ки до 7.0.4.10 появилась та же проблема. Буду как-то решать.
Брокер буквально 2 недели назад сделал обновление.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Событие возвращает ошибку 1000
 
На сколько я понял, проблема заключалась в синхронизации потоков main() и onQuote().
Дело в том, что при чтении таблицы в событии onQuote(), одновременно в теле main() вызывалась функция sleep(1000) в результате стек портился и функция lua_next в onQuote обращалась по неправильному адресу. В результате этого, возникало исключение и возвращало на вершину стека время в милисекундах, которое я задавал в sleep(). Если я не прав, поправьте меня.

Сейчас все работает как часы! Николай, спасибо! Я уже больше месяца решаю эту проблему =). Пошел отмечать =)
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Событие возвращает ошибку 1000
 
Всех благодарю за помощь. Проблема решилась заменой
Код
_luafix.DoStr("while not stopped do   sleep(999)   end"; 
на
Код
while (_stopped) { Sleep(999);
Получилось:
Код
int lua_main(lua_State*st)
{
            //_luafix.DoStr("while not stopped do   sleep(999)   end";
      while (_stopped) { Sleep(999);  
   return 1;
}
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Событие возвращает ошибку 1000
 
Николай Камынин, Вы продвинули меня вперед по проблеме. Я сменил sleep(1000) на sleep(999).
Изменился вывод ошибки на 999.
Что это может значить я пока не понимаю.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Событие возвращает ошибку 1000
 
Решил проверить получение стакана из lua скрипта. Ниже мой код.

Код
function  main()
   while not stopped do   sleep(1000)   end
end

function OnQuote(class_code, sec_code)
        tb=getQuoteLevel2(class_code, sec_code)

   for i=1,tb.bid_count,1 do
            b = tb.bid[i].price
            q = tb.bid[i].quantity
       end
   for i=1,tb.offer_count,1 do
            b = tb.bid[i].price   << на эту строку ругается "test.lua:43: attempt to index field '?' (a nil value)"
       q = tb.bid[i].quantity
      end
end
Запускаем данный код, открываем 10 стаканов и ждем пока рынок начнет сильное движение.
В результате получаем ошибку скрипта
Код
test.lua:43: attempt to index field '?' (a nil value)
Ошибка иногда выскакивает сразу, иногда в течении 10 минут.
Проверьте, кто-нибудь у себя.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Событие возвращает ошибку 1000
 
Николай, я сделал как вы написали. Тип кода всегда равен 4, т.е. строка. Надеюсь я правильно Вас понял.
Constantin, спасибо за замечания, исправил код как Вы написали. Это помогло убрать вылеты КВИКА.


Более детальное изучение показало, что во время чтения ячейки price или quantity при выполнении функции
while (lua_next(st, top4) != 0) qlua.dll вызывает исключение:
First-chance exception at 0x07306684 (qlua.dll) in info.exe: 0xC0000005: Access violation reading location 0x0000001C.
First-chance exception at 0x75B0C41F in info.exe: Microsoft C++ exception: cSEHException at memory location 0x00C7C778.


После этого, событие int lua_OnQuote(lua_State *st) вызывается повторно и оно содержит на вершине стека значение 1000.

Данная проблема возникает, то при интенсивном изменении стакана, например при падении рынка.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Событие возвращает ошибку 1000
 
Ниже привожу мой код получения стакана на с++. Проверьте, пожалуйста, кто может. Будет ли возникать данная ошибка у вас. Может я в коде что-то не то делаю?

Код
typedef map<string, string> ROW;
typedef map<int, ROW> TABL;

int lua_OnQuote(lua_State *st)
{
   try
   {
      int top = lua_gettop(st);
      if (top == 0) return 0;

      string sec_code = lua_tostring(st, -1);// qlua.ToString(-1);   // код бумаги
      string class_code = lua_tostring(st, -2);// qlua.ToString(-2);// код класса

      //Quote quote = qlua.getQuoteLevel2(class_code, sec_code);
      top = lua_gettop(st);
      lua_getglobal(st, "getQuoteLevel2");
      lua_pushstring(st, class_code.c_str());
      lua_pushstring(st, sec_code.c_str());
      lua_pcall(st, 2, 1, 0);

      int top2 = lua_gettop(st);
      lua_pushnil(st);
      string key; // ключ

      int bid_count;
      int offer_count;
      TABL bid; // массив bid
      TABL offer; // массиы offer
      
      while (lua_next(st, top2) != 0) {
         int type = lua_type(st, -1);
         if (type == LUA_TNUMBER) key = to_string(lua_tointeger(st, -2));
         else key = lua_tostring(st, -2);

         type = lua_type(st, -1);
         switch (type)
         {
         case LUA_TSTRING:
            if (key == "bid_count") bid_count = lua_tointeger(st, -1);
            else offer_count = lua_tointeger(st, -1);
            break;
         case LUA_TTABLE:
            int   top3 = lua_gettop(st);
            int len;
            if (key == "bid") len = bid_count;
            else len = offer_count;

            for (int j = 1; j <= len; j++)
            {
               lua_rawgeti(st, top3, j);
               // получаем ячейки стакана
               int top4 = lua_gettop(st);
               lua_pushnil(st);
               ROW row;
               while (lua_next(st, top4) != 0) {
                  string key2 = lua_tostring(st, -2);
                  row[key2] = lua_tostring(st, -1);
                  lua_pop(st, 1);
               }
               if (key == "bid") bid[j] = row;   
               else offer[j] = row;
               lua_pop(st, 1);
            }
            break;
         }
         lua_pop(st, 1);
      }
      lua_pop(st, 1);
      if (0 != top - lua_gettop(st) - 1) LOG_ERROR << "Lua stack is changed!\n getTop=" << lua_gettop(st);
   }
   catch (...)
   {
      LOG_ERROR << "Ошибка в стакане";
      //lua_unlock(_luafix.lua);
   }


   return 0;
}
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Событие возвращает ошибку 1000
 
В отладчике в поле Output появляются следующие строки:
First-chance exception at 0x07306684 (qlua.dll) in info.exe: 0xC0000005: Access violation reading location 0x0000001C.
First-chance exception at 0x75B0C41F in info.exe: Microsoft C++ exception: cSEHException at memory location 0x00C7C778.

Что это может означать,
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
XML-файл спцификации FIX-протокола
 
Я пишу про этот файл http://www.quickfixengine.org/FIX50SP2.xml
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
XML-файл спцификации FIX-протокола
 
Приветствую.
Подскажите, где можно скачать файл спецификацию по вашему FIX-серверу?
Точнее файл FIX50SP2.xml с вашими дополнениями к описанию протокола.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Событие возвращает ошибку 1000
 
Версия квика 6.15.1.17.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Событие возвращает ошибку 1000
 
Цитата
Sergey Gorokhov пишет:
Уточните, а не в С++ тоже появляется 1000?
Думаю, в самом Lua все будет работать. Мне интересно, что это за номер, с чем это может быть связано?
Та же проблема ранее была при открытии стакана с включенной панелью инструментов.

Цитата
может быть проблема в _luafix?
По поводу _luafix -- это класс-обертка стандартных функций lua и qlua. Возможно проблема в ней, но мне не понятен смыл ошибки, по-этому не знаю где искать проблему.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Событие возвращает ошибку 1000
 
Периодически выводится ошибка "1000". Подскажите, это может значить?
Появление ошибки хаотичное.

Мой код в С++

Код
int lua_OnQuote(lua_State *st)
{

   int top = _luafix.GetTop();
   if (top == 0) return 0;
   string sec_code = _luafix.ToString(-1);   // код бумаги
   string class_code = _luafix.ToString(-2);// код класса

   TABLEQuote quote = _luafix.getQuoteLevel2(class_code, sec_code);

   _luafix.Pop(1);

   _luafix.sendQuote(quote); // здесь отправка стакана в торговый робот

   return 0;
}
 
В данном примере переменная sec_code иногда имеет значение = 1000.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
Страницы: 1
Наверх