sam063rus пишет: Вы сделали поддержку нескольких мониторов. А что насчет getposition() и setposition() ?
Михаил, Вопрос не понятен, вроде все работает и на разных мониторах. что не так?
Два срабатывания onOrder при лимитной заявке
Пользователь
Сообщений: Регистрация: 23.01.2015
24.03.2015 06:51:59
Здравствуйте, onOrder срабатывает при каждом изменении заявки В данном случае, скорее всего изменением было установка UID на заявке. Это только предположение не более.
доступ к строкам таблицы изменений параметров, почему его нет?
Пользователь
Сообщений: Регистрация: 23.01.2015
20.03.2015 09:56:35
Здравствуйте!
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
Пользователь
Сообщений: Регистрация: 23.01.2015
18.03.2015 15:45:27
Николай, Прошу прощения опечатка в имени
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
Пользователь
Сообщений: Регистрация: 23.01.2015
18.03.2015 15:44:49
Николая, Проблема в логике. При первом срабатывании futures.sec_code ничего не содержит и условие while futures.sec_code ~= stroka do нормально срабатывает, когда у Вас 0.
Но при повторном срабатывании функции, в futures.sec_code уже есть запись "SiM5" так как она туда записалась при первом обращении к функции. Поэтому при повторном вызове условие "while futures.sec_code ~= stroka do" уже нарушено и цикл не выполняется. Для решения проблемы, Вам нужно обнулять futures при каждом вызове функции pos. Перепишите так:
Код
is_run = 1
fuc = "SiM5"
function OnStop()
is_run = 0
end
function pos(stroka)
local i = 0
local futures = {}
while futures.sec_code ~= stroka do
futures = getItem("futures_client_holding", i)
i = i+1
end
return futures.totalnet
end
function main()
while is_run == 1 do
j = pos(fuc)
message(tostring(j),1)
sleep(1000)
end
end
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
Пользователь
Сообщений: Регистрация: 23.01.2015
18.03.2015 13:21:34
Указанный код у нас работает. Единственное изменение, определили переменные futures={}, is_run=1 и fuc='RIM5' Уточните что Вы задаете в переменной fuc? Также, уточните какое значение Вы видите в таблице "Позиции по клиентским счетам" в колонке "Тек.Чист. Поз" и какое в итоге значение попадает в переменную j?
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
Пользователь
Сообщений: Регистрация: 23.01.2015
17.03.2015 17:35:02
Цитата
Николай Бехтерев пишет: а обращаться к таким таблицам через две точки?
В программе, перед строкой PROGRAM, добавьте строку USE_CASE_SENSITIVE_CONSTANTS
и код контракта укажите SiM3
AddLabel
Пользователь
Сообщений: Регистрация: 23.01.2015
17.03.2015 13:16:28
Здравствуйте, Если Вы про метки, то ограничение 99 символов.
Как работает
Пользователь
Сообщений: Регистрация: 23.01.2015
17.03.2015 12:57:37
Цитата
Серж пишет: Имеется ввиду хронология среди однотипных колбеков? Разнотипные колбеки придут в произвольном порядке, и не обязательно в том, в каком они бы пришли, не будь этой задержки, верно?
Да все верно сказанно
CreateDataSource()
Пользователь
Сообщений: Регистрация: 23.01.2015
17.03.2015 12:56:40
В Quik данные приезжают в хронологическом порядке. То есть 2. 0,1,2,...,n,n+1,n+2,пропуск.
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
sam063rus пишет: как ей пользоваться и все возможные к ней параметры
К сожалению, не представляется возможным, описать все возможные варианты, всех транзакций, всех бирж с которыми работает QUIK, ввиду непреодолимо гигантского их количества. Поэтому, частный случай, лучше смотреть в документаци той конкретной биржи, о которой идет речь.
Как работает
Пользователь
Сообщений: Регистрация: 23.01.2015
16.03.2015 18:01:44
Цитата
sam063rus пишет: а также, вы, таким образом, нам гарантируете, что ни один колбек не пропадёт/будет добавлен в очередь и когда-нибудь обработан?
если один колбек занял терминал, то он не получает данных с сервера. как только отвиснет, получит пропущенные данные. таким образом, хронология восстановится.
закрытие всех заявок на срочном рынке
Пользователь
Сообщений: Регистрация: 23.01.2015
16.03.2015 17:17:03
Цитата
latrop1 пишет: А где можно документацию на "P2 роутер" поглядеть? (гугл по таким словам не то выдает)
на сайте биржи
закрытие всех заявок на срочном рынке
Пользователь
Сообщений: Регистрация: 23.01.2015
16.03.2015 16:40:43
Цитата
latrop1 пишет: Спасибо за ответ, стало чуть понятнее. А почему тогда в Квике случай с "параметр не задан" не отрабатывает аналогично "P2 роутер", а требуется обязательно?
Такова реализация.
Как работает
Пользователь
Сообщений: Регистрация: 23.01.2015
16.03.2015 14:23:24
Цитата
dimka пишет: SetTableNotificationCallback() - я так понимаю устанавливает тоже колбэк на события в таблице ? Значит получается отрабатывая колбэк нажатия кнопки мыши - kill_all_order()... OnOrder() не сработает или я неправильно понял?
SetTableNotificationCallback тоже работает в основном потоке Соответственно пока работает цикл в kill_all_order остальные колбеки не придут. Соответственно, как уже было сказано, мы не рекомендуем выполнять в колбеках какие-либо тяжелые манипуляции.
Как работает
Пользователь
Сообщений: Регистрация: 23.01.2015
16.03.2015 12:45:40
Цитата
dimka пишет: 1) Во время работы kill_all_order() будут срабатывать OnOrder(),OnTrade() ?
OnOrder сработает столько раз сколько изменится статусы заявок которые Вы снимаете OnTrade вообще не сработает, так как Вы работаете с заявками а не со сделками.
Цитата
dimka пишет: 2) Если выполняется OnOrder() остальные On...()
Колбеки в LUA работают в одном потоке. пока один колбек занят остальные ждут. Именно поэтому мы не рекомендуем выполнять в колбеках какие-либо тяжелый манипуляции.
Цитата
dimka пишет: 3) Нельзя ли это осветить в документации ?
Что осветить?
CreateDataSource()
Пользователь
Сообщений: Регистрация: 23.01.2015
16.03.2015 12:40:57
Здравствуйте, После заказа данных нужно немного подождать, пока они закачаются
закрытие всех заявок на срочном рынке
Пользователь
Сообщений: Регистрация: 23.01.2015
16.03.2015 12:13:37
Здравствуйте, Вырезка из документации на P2 роутер: Если параметр code (в Quik это ACCOUNT) не задан или его значение равно ‘%%%’, то производится удаление заявок для всех клиентских счетов.
Если параметр code_vcb (в Quik это BASE_CONTRACT) не задан или его значение равно ‘%’, то производится удаление заявок для всех контрактов.
Ошибка при запуске Луа-скрипта
Пользователь
Сообщений: Регистрация: 23.01.2015
12.03.2015 13:17:53
Цитата
asteroid пишет: В скриптах поменял все пути на адекватные.
Как и в прошлый раз, не факт что проблема в lua. Проверьте все библиотеки и модули
Sergey Gorokhov пишет: Вам нужно попросить брокера предоставить историю графиков по волатильности.
Значит, у брокера есть возможность накапливать и затем передавать клиентам историю за предыдущие дни не только цен сделок и объемов, но и любых других параметров из ТТП?
абсолютно верно
Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
Пользователь
Сообщений: Регистрация: 23.01.2015
11.03.2015 07:32:15
Цитата
Николай Бехтерев пишет: Код работает, но при выключении скрипта Quik подвисает.
Открою секрет, у Вас любой код будет подвисать при выключении если Вы не опишите событии OnStop условие выхода из цикла в main.
Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
Пользователь
Сообщений: Регистрация: 23.01.2015
11.03.2015 07:29:02
Цитата
Николай Бехтерев пишет: Буду рад, если есть поделитесь справочником (с описанием всех функций) к Lua на русском
LUA не мы придумали, документация есть в интернете
Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
Объясняю. Конечный пользователь это лицо творческое, он может указать время срабатывания в произвольном формате. Может так "20:00:00" а может и так "200000" Или еще как-то. В общем как ему вздумается.
В примере показана функция FixTime которая из произвольного формата времени, делает таблицу формата функции os.time Которая в свою очередь переводит эту таблицу в количество секунд начиная с 1970 года.
Лучшим способом сравнить время является перевод его в секунды. Поэтому именно этот способ и был выбран. Ели подход не нравится, пожалуйста можете сравнивать часы и минуты отдельно, это Ваше право.
Опционы
Пользователь
Сообщений: Регистрация: 23.01.2015
11.03.2015 06:47:32
Цитата
sam063rus пишет: а график улыбки волатильности нам тоже можно построить? )) или покупать для этого Stratvolat.dll?
График улыбки есть только в модуле Stratvolat.
Опционы
Пользователь
Сообщений: Регистрация: 23.01.2015
11.03.2015 06:45:48
Цитата
Роман пишет: Проблема в том что он отражает данные только в пределах одной торговой сессии!
Здравствуйте, Это не проблема терминала QUIK. Это значит что Ваш брокер не предоставляет своим клиентам такую услугу. Вам нужно попросить брокера предоставить историю графиков по волатильности.
Обращение к индикатору с разными параметрами.
Пользователь
Сообщений: Регистрация: 23.01.2015
10.03.2015 11:45:43
Цитата
Дмитрий Минеев пишет: Как это поможет решению моего вопроса?
переписать пример так, чтобы он генерировал функции, кажется сложнее, чем переписать так, чтобы была глобальная таблица, в которой хранились бы нужные данные о предыдущих значениях. Для каждого периода своя ячейка в таблице.
Опционы
Пользователь
Сообщений: Регистрация: 23.01.2015
10.03.2015 11:26:45
Здравствуйте, График Волатильности можно построить так же как и любой другой график по параметру из Таблицы Текущих Параметров (ТТП). Первый вариант, в ТТП найти нужный опцион, найти колонку Волатильность, нажать на значении в этой колонке правой кнопкой мыши и выбрать График "Волатильность" Второй вариант. меню "Экспорт данных" - "Графики". Выбрать "Добавить график (индикатор)" Нажать там "Новый источник" в левой части окна, выбрать нужный опцион. В правой выбрать "Таблица истории значений параметров", и выделить значение "Волатильность", после чего нажать Да. Точно также можно построить график открытого интереса по фьючерсам, только параметр называется Количество открытых позиций
Обращение к индикатору с разными параметрами.
Пользователь
Сообщений: Регистрация: 23.01.2015
10.03.2015 11:07:53
Цитата
Дмитрий Минеев пишет: То, что вы описали - понятно. Но предложенный вами вариант не подходит. Пользователь в параметрах указывает интервал, за который будут считаться средние. Т.е. я заранее не знаю, сколько функций создавать. Есть ли другой выход? Или возможно как то создать динамический массив из функций?
Все зависит от Вашего воображения. Перепишите пример так чтобы он запоминал последнее значение индикатора в переменной.
Данные за последние 5 свечей с объемами, Как прописать формулу в lua из qpile?
Пользователь
Сообщений: Регистрация: 23.01.2015
10.03.2015 07:56:31
Здравствуйте, Сейчас Вы написали только пару строк обращения к элементу таблицы, чего явно не достаточно для понимания того как работает Ваш код. Если хотите получить 5 свечек, то для этого сделайте так чтобы в таблице self.PriceSeries были эти самые 5 свечек
Обращение к индикатору с разными параметрами.
Пользователь
Сообщений: Регистрация: 23.01.2015
10.03.2015 07:38:26
Здравствуйте, Особенность индикатора EMA в том что для его расчета требуется знать свое предыдущее значение. В нашем примере для этого используется механизм замыканий. Так как для разных периодов Вы используете одну функцию, то происходит пересечения, когда функция с одним периодом берет предыдущее значение из функции с другим периодом. Для решения проблемы, используйте две разные функции EMA if index == 1 then EMA3 = _EMA() EMA4 = _EMA() line = {} end
и далее по коду, для разных периодов используйте разные функции
Ускорение QPILE
Пользователь
Сообщений: Регистрация: 23.01.2015
10.03.2015 06:45:03
Цитата
Роман пишет: Скажите поддерживает ли система QPILE асинхронная обработка портфеля? Просто у меня работает два портфеля и судя по времени второй запускается после того как обработается первый.
Здравствуйте, Нет не поддерживает. И да QPILE портфели работают по очереди
Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
Пользователь
Сообщений: Регистрация: 23.01.2015
06.03.2015 16:15:24
Здравствуйте, Например так:
Код
START_TIME = "20:00:00"
WORK_DONE = false
function FixTime(V)
V=tostring(V)
local Out = os.date("!*t",os.time())
local len = string.len(V)
if len>6 then
Out.hour,Out.min,Out.sec = string.match(V,"(%d%d)%p(%d%d)%p(%d%d)")
elseif len==6 then
Out.hour,Out.min,Out.sec = string.match(V,"(%d%d)(%d%d)(%d%d)")
elseif len==5 then
Out.hour,Out.min,Out.sec = string.match(V,"(%d)(%d%d)(%d%d)")
end
return Out
end
function main()
START_TIME=FixTime(START_TIME)
while true do
if os.time()<os.time(START_TIME) then
WORK_DONE=false
elseif not WORK_DONE then
message('время работать',1)
WORK_DONE=true
end
sleep(1000)
end
end
Синхронизация состояния клиента TRANS2QUIK.dll с рабочим местом
Пользователь
Сообщений: Регистрация: 23.01.2015
05.03.2015 23:40:17
Цитата
aidan1387 пишет: Так, окей. Что вы подразумеваете под "после разрыва и установления связи, если отписать от заявок а потом подписаться и вызвать старт"? В вашем примере вы на старте приложения подписываетесь, на завершении - отписываетесь. Перезапуск приложения? Другого способа у вас там в примере нет. И, естественно, там без перезапуска ничего никуда не перезапрашивается.
Видимо мы говорим о разных примерах. Я говорю про пример который можно скачать по указанной ранее ссылке, который называется API_Tester_DLG Подписаться это кнопка "Subscribe" Отписаться это кнопка "Unsubscribe" Старт, это кнопка "Start" И на этом примере все прекрасно работает. Там же Вы найдете исходные коды.
Цитата
aidan1387 пишет: В какой момент он должен присылать мне историю?
В тот момент когда Вы ее запросите.
Еще раз повторю, посмотрите пример, потыкайте кнопки, воспроизведите разрыв связи. Потом посмотрите код у себя.
Синхронизация состояния клиента TRANS2QUIK.dll с рабочим местом
Пользователь
Сообщений: Регистрация: 23.01.2015
05.03.2015 22:58:15
Цитата
aidan1387 пишет: Если б там был рабочий пример касательно моего вопроса, я б тут не писал.
Вот именно на том примере, который там, очень легко проверить, что после разрыва и установления связи, если отписать от заявок а потом подписаться и вызвать старт, то увидите все заявки которые были до разрыва.
Синхронизация состояния клиента TRANS2QUIK.dll с рабочим местом
Пользователь
Сообщений: Регистрация: 23.01.2015
05.03.2015 22:29:38
Цитата
aidan1387 пишет: Тут возникает еще вопрос: как получить историю более чем за день? Но, хотя бы с первым разобраться.
Никак, потому что биржа ее не хранит. Ее может хранить брокер и предоставлять клиентам в виде отчета.
Цитата
aidan1387 пишет: Мне может отписываться надо когда есть соединение?
Если произошел разрыв связи, то считаем что это форс мажор, то есть аварийная ситуация. А значит лучше всего отписаться и заказать все по новой.
Цитата
aidan1387 пишет: Можно мне рабочий пример перезапроса без перезапуска моего приложения на псевдокоде хотя бы?
Все существующие примеры поставляются вместе с библиотекой. Ссылка была приведена выше.
Цитата
aidan1387 пишет: По поводу каких-то фиксов не сказано ничего. 1.2 исправит мою проблему?
Рекомендация обновить библиотеку никак не связана с описанной проблемой. Просто добрый совет, всегда использовать актуальные версии программ.
Ошибка при запуске Луа-скрипта
Пользователь
Сообщений: Регистрация: 23.01.2015
05.03.2015 20:19:50
Цитата
sam063rus пишет: ))))))))))))))))))))))а я нигде не сказал, что я его использую. это всё Ваши мысли )))))))))))))))))))))))
Я не в курсе обстоятельств озвученной проблемы. Поэтому если не затруднит, уточните тему письма которое писали или дайте ссылку где Вы описывали суть проблемы.
Синхронизация состояния клиента TRANS2QUIK.dll с рабочим местом
Пользователь
Сообщений: Регистрация: 23.01.2015
05.03.2015 20:15:45
Цитата
aidan1387 пишет: Первый - запросить текущий стейт у рабочего места. Но, функции запроса текущей позиции или списка заявок и сделок нет.
Здравствуйте, Есть TRANS2QUIK_START_ORDERS для получения текущих заявок и тоже для сделок TRANS2QUIK_START_TRADES
Sergey Gorokhov пишет: Но как только путь где-либо поменять (например открыть другой скрипт из другой папки), то первый теряет свою папку и после перезапуска уже не запускается.
включаю квик, никаких других путей/открытых файлов/скриптов - НЕТ. возникает ошибка. алгоритм действий - отправить файл для анализа в арку->получить ответ, что у них это не воспроизводится->технично похерить тему.
То что у нас проблема не воспроизводится, не значит что мы ее закрыли. Это значит что у нас не достаточно информации для определения причин сбоя. Это могут быть какие-либо нюансы, которые Вы не указали, но они приводят к проблеме (может использование любимого Вами IDA Pro?) А также просьба (пока еще) сдерживать эмоции и общаться культурно.
В какой таблице найти информацию о short
Пользователь
Сообщений: Регистрация: 23.01.2015
05.03.2015 19:27:33
Здравствуйте,
Информация получена, проблема изучается. Постараемся в ближайшее время дать ответ.
Тогда мы не будем отвечать на поставленные вопросы, потому что они касаются внутренней архитектуры терминала
info.exe
Пользователь
Сообщений: Регистрация: 23.01.2015
05.03.2015 17:14:31
Цитата
sam063rus пишет: Вопрос[ы]: 1. Для чего в главном файле квика info.exe секция экспорта? 2. значит ли это, что это сделано для того, что часть кода/плагинов писалась независимыми разработчиками и, соответственно, компания просто не стала раскрывать все исходники, а ограничилась лишь интерфейсом взаимодействия лишь с самыми необходимыми функциями? 3. значит ли это, что так сказать, IPluginContext - не совершенен?
Вы имеете в виду пункт меню Экспорт данных? Если так то он для экспорта данных. Но скорее всего имеется в виду что то другое, не так ли?
стабильность соединения
Пользователь
Сообщений: Регистрация: 23.01.2015
03.03.2015 21:43:25
Цитата
Andrey пишет: Эм почему-то ПК по вайфаю не подключается...))))точнее к сети подрубился, но без доступа к интернету, подвисает на идентификации и висит. При этом планшеты и телефоны, и ноут по вайфаю работают))))
ну это уже не к нам :)
стабильность соединения
Пользователь
Сообщений: Регистрация: 23.01.2015
03.03.2015 21:17:18
Здравствуйте, Виноват ли Wifi или нет, проверить достаточно просто. Достаточно через кабель подключить ноутбук (на котором также наблюдается проблема) и протестировать некоторое время.
Раньше мы уже встречали ситуации когда именно при работе через WiFi возникали похожие проблемы (можно поискать на старом форуме) И качество WiFi связи тут абсолютно не причем. Скорее проблема в каких-либо специфичных настройках на стороне самого роутера.
Ошибка при попытке получить значение из таблицы OnTrade()
Смотря чего Вы хотите добиться. Сейчас, в событии OnTransReply, Вы присваиваете значение table_order из переменной order, которая не существует. То что она есть в событии OnTrade не значит что ее можно использовать где попало.
Ошибка при попытке получить значение из таблицы OnTrade()
Пользователь
Сообщений: Регистрация: 23.01.2015
03.03.2015 20:07:59
Цитата
Николай Бехтерев пишет: Когда это table_order превращается в nil?
Вот здесь
Код
function OnTransReply()
table_order = order
end
функция обратного вызова для SetUpdateCallback(), как понять, по какому инструменту она сработала?
Пользователь
Сообщений: Регистрация: 23.01.2015
03.03.2015 19:44:01
Цитата
Дмитрий пишет: А как же это? Значит, можно и без них?
Троеточие означает переменное количество аргументов. Можно с ними можно и без них. Я привел пример без троеточий
функция обратного вызова для SetUpdateCallback(), как понять, по какому инструменту она сработала?
Пользователь
Сообщений: Регистрация: 23.01.2015
03.03.2015 19:21:32
пример функции от Михаила
Код
function mycallbackforallstocks(index,class,security)
message(tostring(index).. " " ..class .. " " .. security,1)
end
function DataSource(class,security,interval)
local ds = CreateDataSource(class,security,interval)
ds:SetUpdateCallback(function(index) mycallbackforallstocks(index,class,security) end)
return ds
end
function main()
DataSource("TQBR","LKOH",INTERVAL_TICK)
while not_stopped do
sleep(1000)
end
end