Дмитрий (Автор тем)

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

Страницы: 1
Вывод по ODBC - не обновляются данные
 
Quik 7.14.1.7
Пытаюсь экспортировать таблицу параметров по ODBC. Но данные в таблицу только вставляются, но не обновляются. Т.е. если нажать "Прекратить вывод", а затем "Начать вывод", то в таблицу всё запишется правильно, но потом записи не обновляются.
В логе тоже ничего криминального не вижу:
Цитата
Цитата
07/03/18 14:43:21.122 [TID=1600] Sleep, table = QUIK_CURRENT_TABLE_PARAMS
Цитата
07/03/18 14:43:21.228 [TID=10820] Add_new_data, table = QUIK_CURRENT_TABLE_PARAMS,new_seqnumber_to_write = 8677, write_operation_type = UPD ATE DATA, sql query = UPD ATE TRADE.QUIK_CURRENT_TABLE_PARAMS SET TIME_CHANGE='12:43:21' WHERE INSTRUMENT='RTS-9.18 [FORTS: Фьючерсы]'
Цитата
07/03/18 14:43:21.228 [TID=1600] Wake up, table = QUIK_CURRENT_TABLE_PARAMS
Цитата
07/03/18 14:43:21.229 [TID=1600] After ExistData, table = QUIK_CURRENT_TABLE_PARAMS, ExistNewDataForExport = TRUE SQL statement = "UPDATE TRADE.QUIK_CURRENT_TABLE_PARAMS SE T TIME_CHANGE='12:43:21' WHERE INSTRUMENT='RTS-9.18 [FORTS: Фьючерсы]'"
Цитата
07/03/18 14:43:21.229 [TID=1600] Poke Data, table = QUIK_CURRENT_TABLE_PARAMS, henv = 01E8E698, hdbc = 01E8E718, insert_into_table = 01E8EB20, update_table = 06726FC8, delete_from_table = 06727338, hstmt = 06726FC8, SQL statement = "UPDATE TRADE.QUIK_CURRENT_TABLE_PARAMS SE T TIME_CHANGE='12:43:21' WHERE INSTRUMENT='RTS-9.18 [FORTS: Фьючерсы]'"
Цитата
07/03/18 14:43:21.229 [TID=1600]
Цитата
Duration: 0
Цитата
07/03/18 14:43:21.229 [TID=1600]
Цитата
07/03/18 14:43:21.230 [TID=1600] After ExistData, table = QUIK_CURRENT_TABLE_PARAMS, ExistNewDataForExport = FALSE SQL statement = "is absent"
Цитата
07/03/18 14:43:21.230 [TID=1600] Sleep, table = QUIK_CURRENT_TABLE_PARAMS
Экспорт в Metastock из своей программы на C#, C++ ...
 
Добрый день. Вопрос не совсем по quik, но буду благодарен, если кто-нибудь мне поможет.
Для анализа данных хочу написать свою программу, которая по нажатию кнопки будет отправлять свечу OHLC в metastock. При каждом нажатии кнопки должна появляться следующая свеча. Так сказать имитация онлайн торгов.

Ну и вопрос, как подключиться к metastock из своей программы ? Как это делает Quik ? Может можно как-то задействовать файлы winros.exe и iwr.dll из своей программы ? Может есть где-то какая-нибудь документация ? Направьте, пожалуйста меня в нужном направлении.
Каждое утро приходится вводить логин и пароль, Quik не восстанавливает соединение
 
Quik, версия 7.2.1.5. Работает круглосуточно не выключаясь. В меню "Соединения" стоит "Восстанавливать связь автоматически через 5 секунд с 11-00 до 02-00". На компьютере уральский часовой пояс. Ставил и с 11 до 23.
Каждое утро соединения нет. Приходится каждое утро нажимать на ключик и вводить заново логин и пароль. Даже после начала торгов и после 11-00 местного времени.
Торгуют роботы. Если с утра к компьютеру не подойти и не нажать на ключик, то quik так и не соединится.
Брокер ПСБ. Специально соединение никто никогда не разрывает.
В OnAllTrade (OnTrade, OnOrders) поступают только новые сделки ?
 
Для того чтобы получить все сделки сессии, обычно, мы должны открыть набор данных через CreateDataSource, пройти в цикле по этому набору данных и забрать всё что там есть. И дальше забирать все вновь поступающие сделки в OnAllTrade. А что будет если мы запустили quik в середине дня. За пол дня было совершено, допустим 100 000 сделок. Как известно, эти 100 000 сделок в наборе данных появляются не сразу, а только начинают загружаться с сервера quik. В итоге при переборе всех сделок в цикле мы будем иметь в наборе данных только, допустим 10 000 сделок. Так вот, остальные 90 000 старых сделок придут в OnAllTrade ?
Помогите принять Lua-таблицу в dll на c++
 
Допустим в Lua-скрипте есть функция, которая должна передать таблицу в функцию в dll на с++
Код
function OnQuote(class, sec )
  if class =="SPBFUT" and sec == "RIZ2" then
    ql2 = getQuoteLevel2(class, sec)
    local i = 5
    func_in_dll(i, gl2)
  end
end
Теперь функция в самой dll:
Код
[/CODE][CODE]int  func_in_dll(lua_State *L) {
Код
  int i = luaL_checkinteger(L, 1);

  -- как теперь получить таблицу ql2 ?

  return 0;
}
Так как получить таблицу ? Как работать с её элементами. В частности, в данном примере, в таблицу gl2 вложены ещё 2 таблицы:  bid и offer. Как с ними работать в c++ ?
Диапазоны типов данных номеров сделок, заявок, стоп-заявок.
 
Какое может быть максимальное значение у номеров сделок, заявок, стоп-заявок ? Int32, Int64 или double ?
В чём смысл рыночной заявки ?
 
Допустим, если взять FORTS, то при вводе заявки на покупку надо указать максимально возможную цену. И заявка будет исполнена по ближайшей самой лучшей цене. В чём тогда смысл галки "рыночная", если эта заявка в любом случае исполнится по лучшей цене.
Дата снятия стоп-заявки
 
В таблице stop_orders есть только поле
withdraw_time NUMBER Время снятия заявки

А где дата снятия заявки ? Или под датой всегда подразумевается текущая дата ? А под текущей датой подразумевается текущее время на сервере QUIK ?
Какая последняя версия заявки (стоп-заявки) в Orders и OnOrder ?
 
Допустим, начали читать таблицу Orders и в эту же секунду приходит изменение заявок в OnOrder. Имеем две версии одной и той же заявки. Как узнать, какая из них актуальная и последняя ? То же самое касается и стоп-заявок.
Что приходит в OnTransReply ?
 
Допустим есть у меня Lua-скрипт. В нём отправляется заявка, далее ждём результат в OnTransReply.
Вопрос: в OnTransReply в моём скрипте гарантированно придёт только информация о моей последней отправленной заявке в этом же скрипте ? Либо что-то ещё ? Когда я буду ждать ответа в OnTransReply, может ли туда прилететь что-то ещё ? Например от других, параллельно работающих Lua-скриптов, которые также отправляют заявки ? Либо от trc-файлов, библиотеки trans2quik.dll или ручного ввода заявки ?
Внешняя DLL + CreateDataSource + Lua - стек
 
Месяцвозился с проблемой. При обращении к функции CreateDataSource из внешней dll периодически падал quik. В цикле 100000 раз обращался к полю Size(). Причём падал совершенно в разных местах и воспроизвести однозначно проблему не получалось. Слинковал dll с qlua.dll падения прекратились, но quik просто стал намертво зависать. В ходе манипуляций выяснил, что обращаться к полям CreateDataSource нужно по стеку (lua_state), полученному из функции main, а например, не в каком-нибудь OnInit(). Сохранил указатель lua_state *L в функции main и падения квика прекратились.
Ничего тут не спрашиваю, просто предупреждаю. Ребята, имейте это ввиду, чтобы не мучались.
Как получить все сделки из ТВС ?
 
Добрый день.
Собственно вопрос в названии темы. Допустим подписаны на получение всех сделок либо через CreateDataSource, либо путём ручного открытия таблицы всех сделок по необходимым инструментам. Насколько я понимаю, функция OnAllTrade получает только новые сделки, поступающие с сервера. А как получить уже поступившие сделки с начала сессии или дня ? В  CreateDataSource нет номера сделки и её направления (покупка/продажа). Как тогда отличить сделки в  CreateDataSource от того, что насобирали в OnAllTrade, чтобы исключить дубли ? Если никак, то можно хотя бы полностью прочитать как-то открытую таблицу всех сделок ?
Синхронизация потоков в своей dll на с++
 
Добрый день. Перечитал старый форум, но внятного ответа так и не нашёл. Наверняка уже многие делали то же, что и я, и многие ещё будут делать. Поэтому хочу уточнить один важный момент.
Есть Lua - скрипт, в котором подключается своя библиотека на c++. В этой библиотеке создаётся несколько потоков.Например, 1 поток будет отправлять заявки в Quik, другой поток будет читать таблицу параметров, ещё несколько потоков будут подписываться на ТВС и перебирать все сделки через CreateDataSource (а их может быть миллионы). В общем каждый поток будет одновременно запускать какие-то Lua-функции. А Lua - стек у нас только один. Вопрос:
нужно ли синхронизировать эти потоки и гарантировать вызов lua функций из dll в одно время только однажды ? Если да, то получается, что пока какой-то поток, например перебирает все сделки в цикле (миллион), то заявки отправлять нельзя ? Параметры читать нельзя ? Все задачи будут ждать завершения какого-то одного потока ? А если нужно одновременно в разных потоках вызвать CreateDataSource, каждый со своим инструментом, и одновременно их записывать в какие-либо массивы ?
Страницы: 1
Наверх