Здравствуйте! По названиям параметров ТТП, к которым можно обращаться с помощью функции getParamEx, иногда бывает трудно однозначно понять, что эти параметры означают и/или как рассчитываются их значения. Подскажите, пожалуйста, где можно взять подробное и актуальное описание всех параметров, которые транслируются с Московской биржи? Если оно есть на сайте биржи, то подскажите ссылку.
повторное открытие окна
Пользователь
Сообщений: Регистрация: 31.01.2015
16.03.2015 16:02:27
Цитата
Серж пишет: Да неужто? Это вы где, в инструкции прочитали?
прав. Потому и задал здесь вопрос. Хотел понять - так задумано или это ошибка в терминале...
8-800-200-99-66 бесплатный телефон, указан на их сайте
В какой таблице найти информацию о short
Пользователь
Сообщений: Регистрация: 31.01.2015
14.03.2015 22:17:32
Цитата
Андрей пишет: разрешающая информация для сделки - это именно сервер, а не документы файлы, информация брокера
Ну строго говоря, на сайте и в документах можно написать все что угодно, но если то же самое не прописать в настройках сервера Quik, то работать это все равно не будет. Поэтому доверять нужно в первую очередь информации из терминала, а не с сайта. Тем более, что на сайте ее могут просто забыть или не успеть обновить.
Кстати, вы этот вопрос уже задавали три недели назад... Что мешало узнать подробности у брокера?
Цитата
Дмитрий пишет: А вот это лучше у брокера спросить. Позвоните ему, не стесняйтесь. И пусть объяснит, почему информация в квике и на сайте разная. А Вы нам потом расскажите, что Вам ответил брокер - нам тоже интересно...
Расширение функций управления окном.
Пользователь
Сообщений: Регистрация: 31.01.2015
13.03.2015 18:45:25
Поддерживаю пожелания Лично меня напрягает процесс создания с помощью небогатых средств QLua для работы с экранными таблицами таких в общем-то стандартных элементов, как кнопки, переключатели, списки выбора, поля ввода и т.п. А пользоваться сторонними библиотеками без крайней необходимости не хочу (из соображений надежности и устойчивости работы скрипта).
повторное открытие окна
Пользователь
Сообщений: Регистрация: 31.01.2015
13.03.2015 18:27:01
И еще один вопрос: Если окно было закрыто не вручную, а с помощью вызова функции DestroyTable, то какое значение после этого должна вернуть функция IsWindowClosed?
повторное открытие окна
Пользователь
Сообщений: Регистрация: 31.01.2015
13.03.2015 15:45:48
Здравствуйте! В документации в описании функции IsWindowClosed сказано, что окно может быть открыто повторно с помощью функции . В связи с этим вопрос - после закрытия окна вручную (крестиком) можно сразу вызвать повторно CreateWindow, указав в качестве ее параметра старое значение идентификатора таблицы t_id? Или все-таки при повторном открытии окна необходимо перед вызовом CreateWindow опять вызывать AllocTable для получения нового идентификатора таблицы?
вычисление логического выражения в операторах if, while и repeat, вопрос разработчикам
Пользователь
Сообщений: Регистрация: 31.01.2015
13.03.2015 02:48:26
Цитата
sam063rus пишет: Я, конечно, не спорю но, если можно, приведите примеры когда это имеет большое значение?
Цитата
Дмитрий пишет: В качестве примера можно привести такой оператор: if (t_id ~= nil) and not IsWindowClosed(t_id) then ...
Например, я подумал, а что если в результате вызова IsWindowClosed(t_id) или какой-нибудь другой функции (в том числе самописной) в таком же условном операторе при обработке ею значения параметра, равного nil, возникнет ошибка, которая приведет к аварийной остановке работы скрипта.
вычисление логического выражения в операторах if, while и repeat, вопрос разработчикам
Пользователь
Сообщений: Регистрация: 31.01.2015
13.03.2015 01:17:16
То же самое написано и в официальном описании языка.
Lua 5.1 Reference Manual : The conjunction operator and returns its first argument if this value is false or nil; otherwise, and returns its second argument. The disjunction operator or returns its first argument if this value is different from nil and false; otherwise, or returns its second argument. Both and and or use short-cut evaluation; that is, the second operand is evaluated only if necessary.
Lua 5.3 Reference Manual : The conjunction operator and returns its first argument if this value is false or nil; otherwise, and returns its second argument. The disjunction operator or returns its first argument if this value is different from nil and false; otherwise, or returns its second argument. Both and and or use short-circuit evaluation; that is, the second operand is evaluated only if necessary.
вычисление логического выражения в операторах if, while и repeat, вопрос разработчикам
Пользователь
Сообщений: Регистрация: 31.01.2015
13.03.2015 00:58:43
Цитата
Constantin Constantin пишет: Это стандарт языка, а не оптимизация. Можно смело полагаться на такое поведение.
Вы правы, судя по тому, что написано в книге Programming in Lua (first edition) by Roberto Ierusalimschy: The operator and returns its first argument if it is false; otherwise, it returns its second argument. The operator or returns its first argument if it is not false; otherwise, it returns its second argument. Both and and or use short-cut evaluation, that is, they evaluate their second operand only when necessary.
вычисление логического выражения в операторах if, while и repeat, вопрос разработчикам
А почему я не нашел ничего на эту тему в официальной документации? Или я плохо искал? Если не трудно, можете дать ссылку на упоминание об этом?
вычисление логического выражения в операторах if, while и repeat, вопрос разработчикам
Пользователь
Сообщений: Регистрация: 31.01.2015
12.03.2015 11:55:30
Спасибо! Я правильно понимаю, что это стандартное поведение для Lua? Или все же не исключено, что в разных версиях/реализациях языка поведение в данном случае может быть различным?
вычисление логического выражения в операторах if, while и repeat, вопрос разработчикам
Пользователь
Сообщений: Регистрация: 31.01.2015
11.03.2015 23:26:49
Здравствуйте! Хотелось бы узнать, всегда ли интерпретатор Lua (и в частности QLua) вычисляет логические выражения полностью в операторах if, while и repeat, или же он прерывает их вычисление в том случае, когда результат уже заведомо известен? В качестве примера можно привести такой оператор: if (t_id ~= nil) and not IsWindowClosed(t_id) then ... Если t_id == nil, то будет ли в данном случае осуществляться вызов функции IsWindowClosed(t_id)? Ведь и без этого ясно, что данное выражение будет равно false. В компиляторах языков программирования типа Pascal или C (уже не помню точно какого из них) для управления поведением программы в таком случае была опция, которая называлась кажется "complete boolean eval", поскольку иногда этот вопрос имеет большое значение. А как с этим обстоят дела в (Q)Lua?
Скользящие средние из другого таймфрейма
Пользователь
Сообщений: Регистрация: 31.01.2015
11.03.2015 16:29:34
Думаю, что нельзя, если только не писать собственный индикатор. А вы умножьте период скользящей средней, построенной по часовому графику, на число торговых часов в сутках - и получите примерно то же самое (хотя отличия конечно будут).
Опционы
Пользователь
Сообщений: Регистрация: 31.01.2015
11.03.2015 13:05:05
Цитата
Sergey Gorokhov пишет: Вам нужно попросить брокера предоставить историю графиков по волатильности.
Значит, у брокера есть возможность накапливать и затем передавать клиентам историю за предыдущие дни не только цен сделок и объемов, но и любых других параметров из ТТП?
Ограничение на количество отображаемых свечей на графиках
Пользователь
Сообщений: Регистрация: 31.01.2015
10.03.2015 21:32:54
Цитата
sam063rus пишет: точные замеры тут не имеют смысла
Отсюда надо сделать вывод, что если важна быстрая реакция на события, по которым происходят срабатывания коллбэков, то полную обработку такого события нужно делать только внутри самого коллбэка, не доверяя это функции main() ?
Ограничение на количество отображаемых свечей на графиках
Пользователь
Сообщений: Регистрация: 31.01.2015
10.03.2015 21:18:41
Цитата
sam063rus пишет: это справедливо на случай форс-мажора, т.е. при зависании одного из тредов
Значит, если сам терминал не зависнет (то есть его основной поток), то main() в описанном примере всегда сможет уже через доли секунды отреагировать на события, зафиксированные коллбэками (к примеру, не более чем через 100 мс)?
Ограничение на количество отображаемых свечей на графиках
Пользователь
Сообщений: Регистрация: 31.01.2015
10.03.2015 21:03:59
Цитата
sam063rus пишет: таким образом, чтобы не терять в потери производительности - они остановились на этом варианте
По умолчанию можно оставить ту же самую настройку, что и сейчас - не более 3000 свечей. А если кому-то надо больше (невзирая на потерю памяти и производительности) - то это будет его выбор. Главное, чтобы возможность выбора была.
Цитата
sam063rus пишет: по документации максимальное время гарантированного переключения между тредами может доходить до 5 сек, а вреальности и того больше
Это значит, что если у нас работает скрипт на QLua, в котором используются коллбэки для фиксации каких-то событий (типа изменения ТТП, приход сделки и т.п.), а затем на эти события каким-то образом должен отреагировать алгоритм, описанный в функции main() (которая работает в отдельном потоке), то фактически такая реакция может отставать на несколько секунд?
Ограничение на количество отображаемых свечей на графиках
Пользователь
Сообщений: Регистрация: 31.01.2015
10.03.2015 19:09:11
Цитата
Серж пишет: При этом чтобы не грузить терминал пользователь может задать в настройках "Отображать последние x свечей", что уже реализовано.
Если ограничение на количество свечей будет снято, то было бы хорошо добавить подобную настройку в основное меню, чтобы один раз введенное значение применялось ко всем вновь открываемым графикам. А уже при необходимости пользователь мог бы изменить его потом в свойствах отдельных графиков.
Ограничение на количество отображаемых свечей на графиках
Пользователь
Сообщений: Регистрация: 31.01.2015
10.03.2015 19:01:57
Цитата
Серж пишет: Уберите, наконец, это ограничение на отображение максимум 3000 свечей. Неудобно анализировать историю на младших таймфреймах.
Полностью поддерживаю это пожелание!
Тем более что квик сейчас вполне способен отобразить на графике как минимум в 100 раз больше свечей - это видно при построении тиковых графиков.
как прокручивать график?, графики
Пользователь
Сообщений: Регистрация: 31.01.2015
08.03.2015 21:26:31
Внизу есть полоса прокрутки, аналогичная той, которую вы видите в редакторе Ворд справа от текста. Если ее нет и кнопка "показать весь график" неактивна, то вероятно вы и так уже видите весь график.
нужно ли использовать Clear() при завершении скрипта
Пользователь
Сообщений: Регистрация: 31.01.2015
06.03.2015 10:21:50
, спасибо за исчерпывающий ответ!
Вопрос по ЛУА (округление)
Пользователь
Сообщений: Регистрация: 31.01.2015
05.03.2015 16:06:59
А то, какие выражения вы используете при сравнении этих чисел, никак не повлияет на Ваши дальнейшие вычисления, так как значения этих чисел в результате сравнения все равно не изменятся.
Вопрос по ЛУА (округление)
Пользователь
Сообщений: Регистрация: 31.01.2015
05.03.2015 16:05:04
Цитата
Максим пишет: но потом нужно делать арифметические операции, и вновь эта проблема всплывет
А что мешает делать эти операции с исходными числами, без всяких преобразований?
Отображение прибыли и убытка по конкретной сделке (и не только), доход, расход, статистика, интерфейс
Пользователь
Сообщений: Регистрация: 31.01.2015
05.03.2015 16:01:09
Не за что :) Вообще согласен с Вашим пожеланием на доработку, так как сам страдал от неудобности этого способа выставления оповещений по цене.
Отображение прибыли и убытка по конкретной сделке (и не только), доход, расход, статистика, интерфейс
Пользователь
Сообщений: Регистрация: 31.01.2015
05.03.2015 15:35:53
Не слишком удобно, но задачу отслеживания цены выполнит
Отображение прибыли и убытка по конкретной сделке (и не только), доход, расход, статистика, интерфейс
Пользователь
Сообщений: Регистрация: 31.01.2015
05.03.2015 15:34:16
Такое средство уже есть: Меню Сообщения / Оповещения / Создать оповещение / На изменение ТТП...
Вопрос по ЛУА (округление)
Пользователь
Сообщений: Регистрация: 31.01.2015
05.03.2015 15:24:54
Выражение даже можно упростить: qt.bid[i].price*PRICE_SCALE == math.floor(current_order_price_buy*PRICE_SCALE + 0.5)
Вопрос по ЛУА (округление)
Пользователь
Сообщений: Регистрация: 31.01.2015
05.03.2015 15:23:02
Тогда Вам поможет следующий вариант, уже написанный мною выше: math.floor(qt.bid[i].price*PRICE_SCALE) == math.floor(current_order_price_buy*PRICE_SCALE) или правильней так, чтобы округление было по правилам математики, а не просто отсечение дробной части: math.floor(qt.bid[i].price*PRICE_SCALE) == math.floor(current_order_price_buy*PRICE_SCALE + 0.5)
, подскажите, пожалуйста, а отдельной функции округления по правилам математики в Lua нет?
Можно вместо tonumber(qt.bid[i].price)==tonumber(current_order_price_buy) попробовать написать qt.bid[i].price == tostring(current_order_price_buy)
Вопрос по ЛУА (округление)
Пользователь
Сообщений: Регистрация: 31.01.2015
05.03.2015 15:06:13
*PRICE_SCALE - это правильно. А зачем потом делить на эту же величину? Лучше умножить на нее current_order_price_buy
Вопрос по ЛУА (округление)
Пользователь
Сообщений: Регистрация: 31.01.2015
05.03.2015 15:02:10
И кстати значение current_order_price_buy=91.7027 откуда берется? Если в результате какой-то арифметической операции, то разряды. дающие разницу между этими переменными, могут быть просто не видны, т.к. больше 6 разрядов после точки не отображается.
Вопрос по ЛУА (округление)
Пользователь
Сообщений: Регистрация: 31.01.2015
05.03.2015 14:59:11
А если умножать оба числа на 10000 перед сравнением ?
цвет уровней(цены/обема/даты)
Пользователь
Сообщений: Регистрация: 31.01.2015
05.03.2015 00:12:17
Два раза левой кнопкой мыши по пустому месту на графике щелкнули - открылось окно "настройка параметров диаграммы", закладка "параметры отрисовки", там все что Вам надо, в том числе можно выбрать шрифт и цвет шрифта.
Как отобразить все графики в quik?, Можно ли как то автоматически отобразить графики всех акций в квике? или только руками каждый график добавлять?
Пользователь
Сообщений: Регистрация: 31.01.2015
05.03.2015 00:08:40
Цитата
Андрей 77 пишет: Причем каждый раз, несмотря на заданное наименование бумаги, РУКАМИ вбивать его в форму.
ну вообще-то можно построить текущую таблицу параметров по классу "акции" и уже по каждой строчке нажимая строить график. Так что вводить названия руками нет нужды.
В какой таблице найти информацию о short
Пользователь
Сообщений: Регистрация: 31.01.2015
04.03.2015 14:57:03
Выводил все параметры, чтобы убедиться, что функция getBuySellInfo() возвращает хоть что-то, похожее на правду.
В какой таблице найти информацию о short
Пользователь
Сообщений: Регистрация: 31.01.2015
04.03.2015 14:54:59
Версия 6.16.1.15
Код
function main()
file = io.open("C:\\DATA\\test_short.txt", "w+t")
local firm_id = "XXXXXXXXXXXX"
local client_code = "XXXXX"
local sec_list = getClassSecurities("TQBR")
count = 0
for sec in string.gmatch(sec_list, "%w+") do
count = count + 1
local t = getBuySellInfo(firm_id, client_code, "TQBR", sec, 0)
if t == nil then
file:write(count .. " : " .. sec .. " - nil\n")
else
file:write(count .. " : " .. sec .. "\n")
for key, v in pairs(t) do
file:write(key .. " - " .. v .. "\n")
end
file:write("\n")
end
end
file:close()
end
В какой таблице найти информацию о short
Пользователь
Сообщений: Регистрация: 31.01.2015
04.03.2015 14:17:56
По которым разрешен шорт - указано "ДК". А получил 0 я по всем 315 акциям класса TQBR
В какой таблице найти информацию о short
Пользователь
Сообщений: Регистрация: 31.01.2015
04.03.2015 13:20:54
Цитата
Дмитрий пишет: is_margin_sec - Признак маржинальности инструмента. Возможные значения: «0» – не маржинальная; «1» – маржинальная Под маржинальной имеется в виду акция, доступная для короткой продажи (т.е. продажи в долг)?
Добрый день! Сейчас прогнал тест по всем акциям - ни одна из них не имеет значения "1" в поле is_margin_sec, хотя заведомо знаю (по таблице купить/продать), что акций, по которым разрешена короткая продажа - почти два десятка.
Сохранение всех сделок
Пользователь
Сообщений: Регистрация: 31.01.2015
04.03.2015 11:46:20
Цитата
Серж пишет: функция CreateDataSource() заказывает данные по интересующему параметру только в том случае, если этот параметр задан вручную в настройках меню "Связь - Списки..."
А если у меня включена настройка "Формировать список получаемых инструментов и параметров - Исходя из настроек открытых пользователем таблиц"? Тогда по идее терминал никак не должен реагировать на настройки в меню "Связь - Списки..." В таком случае мне нужно открывать соответствующую таблицу с нужными мне параметрами?
Сохранение всех сделок
Пользователь
Сообщений: Регистрация: 31.01.2015
04.03.2015 11:15:12
Цитата
Серж пишет: Но, к сожалению, она бесполезна (равно, как и вариант с запоминанием значений по времени) без шаманства в меню "Связь - Списки..." (CQ01544135).
А можно немного подробней - о чем в данном случае речь (почему бесполезна и что за шаманство)? По указанному номеру (CQ01544135) статей на форуме не нашел.
Сохранение всех сделок
Пользователь
Сообщений: Регистрация: 31.01.2015
03.03.2015 23:59:37
А нельзя сохранить значения этих параметров по состоянию, например, на 9:55, 18:50 и 23:55 ? А потом вычесть значение на 9:55 из значения на 18:50, затем прибавить к этой разности значение по состоянию на 23:55
Сохранение всех сделок
Пользователь
Сообщений: Регистрация: 31.01.2015
03.03.2015 23:28:22
Цитата
Серж пишет: Для ФОРТС сложнее: с вечерней сессии отсчёт начинается по-новой.
Проблема в том, что нет сделок за вчерашнюю вечернюю сессию? Если так, то включите получение всех сделок по классу FUTEVN (для фьючерсов) или OPTEVN (для опционов)
функция обратного вызова для SetUpdateCallback(), как понять, по какому инструменту она сработала?
Пользователь
Сообщений: Регистрация: 31.01.2015
03.03.2015 19:57:59
Понятно, спасибо!
функция обратного вызова для SetUpdateCallback(), как понять, по какому инструменту она сработала?
функция обратного вызова для SetUpdateCallback(), как понять, по какому инструменту она сработала?
Пользователь
Сообщений: Регистрация: 31.01.2015
03.03.2015 19:11:24
А если в приведенном примере внутри функции mycallbackforallstocks мне нужно получить номер изменившейся свечки, то нужно добавить в ее описание третий параметр index ?
Код
function mycallbackforallstocks(class,security,index,...)
message(class .. " " .. security .. " - " .. tostring(index), 1)
end
ds:SetUpdateCallback(function(...) mycallbackforallstocks(class,security,index,...) end)
нужно ли использовать Clear() при завершении скрипта
Пользователь
Сообщений: Регистрация: 31.01.2015
03.03.2015 19:05:07
А после DestroyTable() функцию Clear() вызывать нельзя?
функция обратного вызова для SetUpdateCallback(), как понять, по какому инструменту она сработала?
Пользователь
Сообщений: Регистрация: 31.01.2015
03.03.2015 19:02:56
Цитата
Sergey Gorokhov пишет: Но так как действия будут производиться одни и те же, будет удобней создать одну функцию, а через колбеки просто ее вызывать
Проблема в том, что эта функция должна как-то узнать, источником данных по какому инструменту (и таймфрейму) в данный момент она была вызвана.
, спасибо за подсказку. Только я не совсем понял, в приведенном ниже коде должны быть именно троеточия или на их месте должно стоять что-то другое:
Код
function mycallbackforallstocks(class,security,...)
message(class .. " " .. security,1)
end
function DataSource(class,security,interval)
local ds = CreateDataSource(class,security,interval)
ds:SetUpdateCallback(function(...) mycallbackforallstocks(class,security,...) end)
return ds
end