Egor Zaytsev пишет: Максимально возможное количество бумаг в заявке на продажу этого инструмента на этом классе, исходя из лучшей цены спроса.
Извините, но я так и не понял - количество зависит от имеющихся у меня средств или от объема встречных заявок на продажу, которые есть сейчас в стакане? И почему именно исходя из лучшей цены спроса, если в документации сказано "по указанной цене", которую можно задать в параметре price при вызове функции?
Под маржинальной имеется в виду акция, доступная для короткой продажи (т.е. продажи в долг)?
can_buy - Оценка количества лотов, доступных на покупку по указанной цене Имеется в виду сколько я могу купить с учетом имеющихся у меня собственных и заемных средств? Или это количество лотов, которое имеется сейчас в стакане по заданной цене?
функция обратного вызова для SetUpdateCallback(), как понять, по какому инструменту она сработала?
Пользователь
Сообщений: Регистрация: 31.01.2015
03.03.2015 14:46:52
Здравствуйте! Если я использую одинаковые действия в функциях обратного вызова, заданных с помощью SetUpdateCallback() для разных источников данных, но внутри этих функций необходимо учитывать, по какому инструменту произошло обновление свечи (и, возможно, на каком таймфрейме), то есть ли способ использовать одну и ту же функцию для разных источников данных по разным инструментам? Или же нужно создавать отдельные экземпляры однотипных функций для каждого источника данных с жестко прописанными внутри кодами инструментов и таймфреймов?
В какой таблице найти информацию о short
Пользователь
Сообщений: Регистрация: 31.01.2015
03.03.2015 13:55:44
Цитата
Дмитрий пишет: В таблице "Клиентский портфель" нажмите право кнопкой мыши на любой строке и выберите пункт контекстного меню "Открыть таблицу [Купить/Продать]. В открывшейся таблице для тех акций, которые доступны для short, в колонке "Тип" присутствует буква К.
Подскажите, пожалуйста, есть ли возможность получить значения из этой таблицы [Купить/Продать] в скрипте, написанном на QLua?
нужно ли использовать Clear() при завершении скрипта
Пользователь
Сообщений: Регистрация: 31.01.2015
03.03.2015 13:22:11
Здравствуйте! 1) Если в скрипте для вывода на экран создавалась таблица t_id, окно которой еще до завершения работы скрипта было закрыто вручную, то нужно ли после этого использовать вызов функции Clear(t_id) для очистки содержимого таблицы t_id и освобождения памяти, занятой этой таблицей? Если ответ на этот вопрос утвердительный, то еще один вопрос: 2) Если после закрытия окна вручную скрипт сразу завершает свою работу, то есть ли смысл и в этом случае использовать функцию Clear(t_id) или же вся занятая скриптом (и в том числе таблицей t_id) память автоматически освободится после остановки скрипта?
Ошибка при попытке получить значение из таблицы OnTrade()
Пользователь
Сообщений: Регистрация: 31.01.2015
03.03.2015 00:15:16
А, это я просто невнимательно прочитал Ваши ответы :)
Ошибка при попытке получить значение из таблицы OnTrade()
Разве не надо было подобный оператор разместить в теле самой функции OnTrade(), а не в main() ?
Глубина истории
Пользователь
Сообщений: Регистрация: 31.01.2015
02.03.2015 11:47:46
Вы имеете в виду историю изменений параметров? Тогда другого выхода, кроме как копить самому, нет. На реале она тоже только за текущий день хранится в терминале.
Оборот по бумаге
Пользователь
Сообщений: Регистрация: 31.01.2015
01.03.2015 21:57:13
class_code = "TQBR" -- МБ ФР: Т+ Акции и ДР sec_code = "SBER" -- Сбербанк
t = getParamEx (class_code, sec_code, "VALTODAY") -- Оборот в деньгах message(t.param_value, 1)
t = getParamEx (class_code, sec_code, "VOLTODAY") -- Количество бумаг во всех сделках message(t.param_value, 1)
info.exe
Пользователь
Сообщений: Регистрация: 31.01.2015
01.03.2015 18:50:38
Думаю, Sofia Fedurina могла бы в данном случае помочь, удалив все сообщения, кроме первого.
info.exe
Пользователь
Сообщений: Регистрация: 31.01.2015
01.03.2015 18:28:42
, я букву ё не пишу (вот даже не сразу нашел ее сейчас), но давно понял, что Nikolz со старого форума и - совершенно разные люди.
Цитата
сергей пишет: не ищите чёрную кошку...она ведь не нужна Вам
;-)
Закрытие позиции во внеторговое время
Пользователь
Сообщений: Регистрация: 31.01.2015
01.03.2015 18:07:54
Цитата
Андрей пишет: насчёт первого пункта: не надо впадать в крайность: если память не изменет то даже если объявят делистинг - у вас ещё будет минимум месяц, если не ошибаюсь, чтоб избавиться от своих бумаг
Это значит, что еще месяц ваши акции будут торговаться на бирже.
Lua и связь - списки - фильтры, Нужно узнать, какие class_name или name отфильтрованы пользователем
Пользователь
Сообщений: Регистрация: 31.01.2015
01.03.2015 15:55:47
Добрый день! Прямой возможности сделать это нет. Можно только косвенно догадываться об этом, проверив, по каким инструментам не приходят обновления значений параметров.
Цветовая настройка таблицы текущих параметров
Пользователь
Сообщений: Регистрация: 31.01.2015
01.03.2015 13:49:39
Подведите мышь к заголовку соответствующего столбца (по которому хотите определять цвет) и щелкните левой кнопкой по появившемуся там значку Ab. Откроется окно "условное форматирование", где вы сможете настроить цвет и шрифт ячеек или всей строки в зависимости от значений параметра из этого столбца.
Подсобите с битовыми флагами на примере выяснения позиции из таблицы OnTrade( )?
Пользователь
Сообщений: Регистрация: 31.01.2015
01.03.2015 12:58:19
Нашел ее описание в руководстве по QLua, раздел "Функции для работы с битовыми масками в структурах данных":
Функция возвращает результат битовой операции AND над аргументами. Аргументов может быть несколько, при этом обязательные аргументы x1 и x2. NUMBER bit.band(NUMBER x1, NUMBER x2, ...)
Подсобите с битовыми флагами на примере выяснения позиции из таблицы OnTrade( )?
Пользователь
Сообщений: Регистрация: 31.01.2015
01.03.2015 12:16:29
Цитата
Руслан Руслан пишет: бит 2 (0x4)Заявка на продажу, иначе – на покупку. Данный флаг для сделок и сделок для исполнения определяет направление сделки (BUY/SELL)- т.е. вам надо проверить состояние 4го бита - (0х4)
Почему же надо проверять состояния 4-го бита, если в документации идет речь о 2-м? (0х4) - это не номер бита, а значение числа, имеющего единицу в данном бите и нули во всех остальных.
В Lua я не очень силен, поэтому подскажите плиз, функция bit.band - это стандартная функция Lua или она из какой-то библиотеки сторонних разработчиков? Где можно увидеть ее описание?
Получение свечи по дате
Пользователь
Сообщений: Регистрация: 31.01.2015
01.03.2015 12:07:04
Подробную информацию можно прочитать в Руководстве пользователя QLua (файл QLUA.chm в папке с терминалом). Раздел "Функции взаимодействия скрипта Lua и Рабочего места QUIK / Функции для работы с графиками"
Получение свечи по дате
Пользователь
Сообщений: Регистрация: 31.01.2015
01.03.2015 12:04:47
Цитата
Руслан Чигниев пишет: Есть ли какой нибудь простой способов без лишних телодвижений получить свечу или массив свечей на определенную дату? к примеру: t = {} t = нужнаяфункция(бумага, кодбумаги, дата)
Нет такого способа, насколько я знаю. Есть способ получить эту информацию только перебрав, начиная с самой первой, свечи с графика или из источника данных, открытого с помощью CreateDataSource , и выбрав при этом те, которые имеют нужную дату (если для заданного таймфрейма эта дата еще доступна на сервере)..
Закрытие позиции во внеторговое время
Пользователь
Сообщений: Регистрация: 31.01.2015
01.03.2015 11:58:33
Цитата
Андрей пишет: имея лоты акции, которая завтра (или уже сегодня) не торгуется на рынке и еще долго не будет (делистинг?). Если в течении месяца можно закрыть позицию связавшись с менеджером
Если акция уже завтра не торгуется, то закрыть позицию можно только сегодня, неважно каким способом.
Цитата
Андрей пишет: Если ... можно закрыть позицию связавшись с менеджером 1) Можно ли закрывать позиции заявкой через Quik
Если позицию можно закрыть, связавшись с менеджером, то ее можно закрыть и через Quik в обычном порядке, без всяких премудростей.
Цитата
Андрей пишет: Можно ли закрывать позиции ... в любое время в т.ч. во внеторговое?
Во внеторговое - нельзя. Можно только выставить стоп-заявку, которая сработает когда начнутся торги.
Получение свечи по дате
Пользователь
Сообщений: Регистрация: 31.01.2015
28.02.2015 22:29:16
Цитата
Руслан Чигниев пишет: Что такое колбеки? прпвильно ли я понимаю, что процедуру обработки событий, происходящих в терминали, по типу OnQuote, OnOrderи т.д.
Правильно. Колбек - это написание русскими буквами слова callback, которое переводится в том числе как "функция обратного вызова" (к которым и относятся OnQuote, OnOrder и т.д.)
StratVolat.dll и ещё...
Пользователь
Сообщений: Регистрация: 31.01.2015
28.02.2015 19:28:19
Цитата
Дмитрий пишет: Есть ли способ избавиться от запуска winros.exe и при этом не получать каждый раз сообщения о якобы появившейся новой версии программы при подключении к серверу? Только не советуйте отключать автоматическую проверку появления новой версии...
Цитата
Egor Zaytsev пишет: Дмитрий, к сожаление, другого способа нет, только отключать автоматическую проверку появления новой версии.
Строго говоря, такой способ есть, хоть и не слишком красивый - найти в файле iwr.dll слово winros.exe и заменить его, например, на winros-exe. Только делать это аккуратно, таким редактором, который точно не изменит в двоичном файле ничего лишнего. Убедиться в успешности сделанных изменений можно с помощью команды вида: fc /b iwr.dll iwr.bak Если FC выдаст сообщение о том, что эти файлы различаются только в одном байте, то все ок. После этого winros.exe перестанет запускаться, а терминал не будет выдавать сообщения о том, что версии программы на сервере и на компьютере различаются. Правда при запуске терминала будет выдаваться сообщение "Ошибка экспорта в MetaStock : произошла ошибка с кодом IWR_CANNOT_START". Но на работе терминала это никак не отразится (если конечно нет необходимости использовать экспорт данных в системы технического анализа).
Не показывает смайлы
Пользователь
Сообщений: Регистрация: 31.01.2015
28.02.2015 17:34:56
, может в этой ветке смайлы и убрались, а вот в другой как-то не совсем:
Попробуйте процитировать текст в первом сообщении по ссылке, даже убрав предварительно галочку "показывать смайлы". Во-первых, при редактировании сообщения смайл будет отображаться. Во-вторых, после размещения этого сообщения смайла не будет, но с обеих сторон от символов :\ появятся пробелы, что видно из следующего сообщения по ссылке.
Не выводятся свечные графики, Сбой QUIK. Не выводятся данные вчерашнего дня.
Не выводятся свечные графики, Сбой QUIK. Не выводятся данные вчерашнего дня.
Пользователь
Сообщений: Регистрация: 31.01.2015
28.02.2015 17:31:20
C:\WINDOWS Сорри, это тест
Не показывает смайлы
Пользователь
Сообщений: Регистрация: 31.01.2015
28.02.2015 17:26:58
C:\ ("a")
Автоматическое переключение на другой сервер
Пользователь
Сообщений: Регистрация: 31.01.2015
28.02.2015 15:33:55
1) У меня была мысль, что значение переменной timeout должно быть больше значения параметра check-tmo из файла info.ini, поскольку при появлении сообщений "вы уже работаете в системе" повторное подключение к серверу возможно не ранее чем через check-tmo секунд. 2) С другой стороны, если обнаружение обрыва связи и вызов функции OnDisconnected() происходят только по истечении check-tmo секунд с момента прекращения обмена данными с сервером, то значение переменной timeout можно задавать без оглядки на значение параметра check-tmo.
Было бы очень хорошо, если бы разработчики пояснили, какой из двух приведенных выше вариантов будет верным.
Автоматическое переключение на другой сервер
Пользователь
Сообщений: Регистрация: 31.01.2015
28.02.2015 14:59:54
1. Поддерживаю пожелание о доработке терминала Quik.
2. , пока наше пожелание о доработке терминала не будет реализовано, Вашу проблему можно попробовать решить другим способом (при условии, что на всех серверах подключение производится на порт с одинаковым номером и с использованием одинакового ключа сервера). В приведенном ниже варианте решения этой проблемы задается не число попыток подключения к одному серверу, а время, в течение которого терминал будет пытаться к нему подключиться до принятия решения о переключении на другой сервер. 1) Добавляем в терминале в список доступных соединений (Связь / Доступные соединения) новое, в поле "Сетевой адрес" которого указываем virtual.srv (описание соединения можно использовать любое). Включаем настройку "использовать только параметры последнего соединения". 2) Добавляем в файл C :\ WINDOWS\system32\drivers\etc\hosts строку следующего вида: xxx.xxx.xxx.xxx virtual.srv где xxx.xxx.xxx.xxx - айпи адрес одного из ваших серверов 3) Копируем файл C :\ WINDOWS\system32\drivers\etc\hosts в файл hosts.s2 в том же каталоге. В файле hosts.s2 заменяем строку xxx.xxx.xxx.xxx virtual.srv на yyy.yyy.yyy.yyy virtual.srv где yyy.yyy.yyy.yyy - айпи адрес второго вашего сервера 4) Запускаем на терминале приведенный ниже скрипт (его можно запустить один раз и больше не трогать, тогда при каждом перезапуске терминала этот скрипт будет запускаться автоматически):
Код
-- скрипт обеспечивает последовательное переключение между двумя серверами при потере связи
-- и невозможности восстановить подключение к текущему серверу в течение timeout секунд
timeout = 240 -- задержка (в секундах) перед сменой сервера
function OnInit(script_path)
stopped = false
count = -1 -- отсчет времени до переключения на другой сервер сейчас не ведется
local sys_root = os.getenv("SystemRoot") -- определяем расположение каталога с работающей сейчас системой Windows
if sys_root == nil then
message("Не удалось найти каталог Windows", 2)
stopped = true
else
Directory = sys_root .. "\\system32\\drivers\\etc\\" -- каталог с файлом hosts
end
end
function OnStop(stop_flag)
stopped = true
end
function OnDisconnected()
count = timeout -- запускаем отсчет времени до переключения на другой сервер
end
function OnConnected()
count = -1 -- останавливаем отсчет времени до переключения на другой сервер
end
-- Функция проверяет существование файла с заданным именем fname. Если файл существует, возвращает true, иначе - false
function exist(fname)
local file = io.open(fname, "r") -- пытаемся открыть файл для чтения
if file == nil then -- скорей всего файла с таким именем нет
return false
else -- файл с таким именем существует
file:close()
return true
end
end
function switch_server()
local f_old = ""
local f_new = ""
if exist(Directory .. "hosts.s2") and (not exist(Directory .. "hosts.s1")) and exist(Directory .. "hosts") then
f_old = "hosts.s1" -- имя файла, используемого сейчас
f_new = "hosts.s2" -- имя файла, который будем использовать
elseif exist(Directory .. "hosts.s1") and (not exist(Directory .. "hosts.s2")) and exist(Directory .. "hosts") then
f_old = "hosts.s2" -- имя файла, используемого сейчас
f_new = "hosts.s1" -- имя файла, который будем использовать
end
if f_old ~= "" then
local res, err = os.rename(Directory .. "hosts", Directory .. f_old) -- переименовываем файл hosts в hosts.s1 или hosts.s2
if res == nil then
message("Ошибка при переименовании файла " .. err, 2)
else
res, err = os.rename(Directory .. f_new, Directory .. "hosts") -- переименовываем файл hosts.s1 или hosts.s2 в hosts
if res == nil then
message("Ошибка при переименовании файла " .. err, 2)
else
message("Переключаемся на другой сервер", 1)
end
end
end
count = timeout -- запускаем отсчет по-новой
end
function main()
while not stopped do
if count >= 0 then
count = count - 1
end
if count == 0 then
switch_server()
end
sleep(1000)
end
end
5) Подключаемся к созданному нами новому соединению (у которого в поле "Сетевой адрес" указано virtual.srv).
P.S.: Если вы используете Windows 7, то терминал нужно запускать от имени администратора, иначе он не сможет переименовывать файлы в каталоге WINDOWS\system32\drivers\etc
DestroyTable подвешивает терминал.
Пользователь
Сообщений: Регистрация: 31.01.2015
27.02.2015 23:52:53
Цитата
lergen пишет: Если из этого блока убратьDestroyTable(t.t_id) и поместить в конец тела main() то скрипт останавливается заметно медленнее и таблица очищается но не закрывается.
Цитата
Серж пишет: Функции работы с таблицами, в т.ч. DestroyTable() не работают после нажатия кнопки "Остановить", поэтому их вызов надо размещать в колбеке OnStop().
Поиск элемента в таблице
Пользователь
Сообщений: Регистрация: 31.01.2015
27.02.2015 23:06:37
15 миллисекунд - это интервал обновления времени в операционной системе?
Поиск элемента в таблице
Пользователь
Сообщений: Регистрация: 31.01.2015
27.02.2015 12:18:08
Цитата
sam063rus пишет: показания на основе os.clock - каждый раз, разные и сильно варьируются.
А почему так происходит? И насколько сильно варьируются (в разы или все же разницу можно измерять процентами)?
Глупый вопрос! Механизм совершения сделок!, Механизм совершения сделок!
Пользователь
Сообщений: Регистрация: 31.01.2015
27.02.2015 11:30:18
Разница уйдет Вам. То есть фактически вы купите часть акций дешевле, чем хотели.
Таких слов я еще не знаю, так что наверняка нет :D
Поиск элемента в таблице
Пользователь
Сообщений: Регистрация: 31.01.2015
26.02.2015 12:16:58
А приведенный мною код позволит получить из таблицы test_table таблицу test_table1 ?
Код
test_table1 = {}
for k, v in pairs(test_table) do
test_table1[v] = true
end
Нестандартный таймфрейм
Пользователь
Сообщений: Регистрация: 31.01.2015
26.02.2015 12:13:18
Цитата
Блюз пишет: был бы хороший выход для тех, у кого сильно тормозит тиковый график
А в чем это проявляется? Новые тики видны позже, чем изменение цены закрытия последней свечки (к примеру, на минутном графике)? Или просто терминал вообще подвисает?
, спасибо за примеры! Ваши function check1(t, str) и function check3(t, str) замечательны тем, что их даже не обязательно оформлять в виде отдельных функций, а операторы из них можно непосредственно использовать в нужном месте основной программы.
Вот только не очень понял про таблицу test_table1={["qwe"]=true, ["1qweasd"]=true, ["zxc"]=true} Здесь значения строк используются в качестве индексов элементов таблицы? Если так, то можно вместо набора столь мудреной конструкции вручную получить эту таблицу из test_table следующим образом?
Код
test_table1 = {}
for k, v in pairs(test_table) do
test_table1[v] = true
end
Поиск элемента в таблице
Пользователь
Сообщений: Регистрация: 31.01.2015
25.02.2015 20:55:12
Понятно. Спасибо, что избавили от необходимости тратить время на поиски в документации того, чего не существует :)
Поиск элемента в таблице
Пользователь
Сообщений: Регистрация: 31.01.2015
25.02.2015 19:48:32
Тут стоит вопрос не об оптимизации скорости работы скрипта, а о минимизации и упрощении его текста. Ну и по работе со строками как таковыми мне все более-менее понятно, а вот о средствах Lua для поиска среди элементов таблицы я пока мало что знаю (кроме тупого перебора их в цикле).
Поиск элемента в таблице
Пользователь
Сообщений: Регистрация: 31.01.2015
25.02.2015 17:39:07
Добрый день! В скрипте используется таблица Tab, каждый элемент которой является строкой. Есть также отдельная переменная S, значение которой также является строкой. Существует ли в Lua простой способ проверить наличие или отсутствие в таблице Tab элемента, значение которого равно значению переменной S ? То есть способ сделать это без использования оператора цикла с проверкой каждого отдельного элемента таблицы.
StratVolat.dll и ещё...
Пользователь
Сообщений: Регистрация: 31.01.2015
25.02.2015 14:48:11
Цитата
Egor Zaytsev пишет: В случае если на клиентском месте QUIK не предполагается использовать экспорта данных в системы технического анализа, то из директории с программой можно удалить файлы вида winros.exe и iwr.dll.
Хороший совет, я поспешил воспользоваться им (а то надоел этот winros.exe, постоянно смущающий брандмауэр, а также остающийся в памяти до выключения компа после аварийных падений терминала). Но теперь программа при каждом соединении с сервером говорит, что там появилась новая версия, хотя по факту вся новизна лишь в наличии на сервере двух файлов, удаленных мною по вашему совету. Есть ли способ избавиться от запуска winros.exe и при этом не получать каждый раз сообщения о якобы появившейся новой версии программы при подключении к серверу? Только не советуйте отключать автоматическую проверку появления новой версии...
Но зато в цитируемом тексте добавляются лишние пробелы (там, где во время набора сообщения виден смайл)
Не показывает смайлы
Пользователь
Сообщений: Регистрация: 31.01.2015
25.02.2015 11:18:39
Цитата
Дмитрий пишет: Смайлы - это хорошо... А нельзя ли сделать так, чтобы их можно было отключить в цитируемом тексте? А то вот какая фигня выходит (см. выше).
Нет, не выходит... Она только при просмотре сообщения перед отправкой выходила.
Смайлы - это хорошо... А нельзя ли сделать так, чтобы их можно было отключить в цитируемом тексте? А то вот какая фигня выходит (см. выше).
Деинсталлировать Quik
Пользователь
Сообщений: Регистрация: 31.01.2015
25.02.2015 11:16:04
то есть RD /S "c:\program files\quik"
Не показывает смайлы
Пользователь
Сообщений: Регистрация: 31.01.2015
25.02.2015 11:15:05
"c:\program files\quik"
Деинсталлировать Quik
Пользователь
Сообщений: Регистрация: 31.01.2015
25.02.2015 11:12:51
А вообще если уж пользоваться командной строкой, то в данном случае лучше использовать команду вида: RD /S "c :\ program files\quik" Тогда от этой папки точно ничего не останется.
Деинсталлировать Quik
Пользователь
Сообщений: Регистрация: 31.01.2015
25.02.2015 11:03:49
Цитата
GTS пишет: укажите другой путь вместо "c :\ program files\quik"
Это понятно :) Только не проще ли удалить папку с программой без использования командной строки (из проводника или другого файлового менеджера)? К тому же такой командой не удалятся находящиеся в этой папке подкаталоги (и файлы в них).
Не срабатывает пример graph.lua: Total 0 candles 0 lines
Пользователь
Сообщений: Регистрация: 31.01.2015
25.02.2015 10:50:12
Цитата
Николай Бехтерев пишет: Я решил, что идентификатор это наименование в свойствах графика, это единственный параметр, который подходил
Вы имеете в виду Настройки графика / Общие / Подпись? Тогда это неправильно. "ZZZ" нужно писать в поле Идентификатор на закладке "Дополнительно"
В какой таблице найти информацию о short
Пользователь
Сообщений: Регистрация: 31.01.2015
25.02.2015 00:26:07
А вот это лучше у брокера спросить. Позвоните ему, не стесняйтесь. И пусть объяснит, почему информация в квике и на сайте разная. А Вы нам потом расскажите, что Вам ответил брокер - нам тоже интересно...
Не срабатывает пример graph.lua: Total 0 candles 0 lines