Юрий Коробейников написал: 1. Почему в таблице котировок указаны только крайние десять позиций для каждой акции? Есть ли возможность отобразить все доступные котировки или хотя бы большее их число?
Размер стакана настраивает биржа, по своим каким-то договоренностям с брокером.
Здравствуйте, В старых версиях действительно была такая проблема. Однако ее уже давно починили. На актуальной версии (сейчас это 7.5.) такой проблемы не должно быть
Здравствуйте, Вы говорите про инструмент "линейка" В текущей версии такой возможности нет. Однако, ранее мы уже регистрировали от других пользователей пожелания на его реализацию.
Космонавт, Для расчета EMA требуется прогнать значения от первого до последнего. Настоятельно рекомендуем посмотреть пример, который описан в файле readme_LuaIndicators.txt
Космонавт написал: Ведь ds будет всё время принимать значение новой бумаги и будет каша.
Ничего не мешает сделать несколько ds, для каждой бумаги свой. Например если вместо переменной использовать таблицу ds[sec] = CreateDataSource("TQBR", sec, INTERVAL_M1)
Какие колбеки? и зачем Вы их выносите? Вы же сами сказали что не хотите подписываться на свечки в цикле. Так не подписывайтесь. Про колбеки никто ничего не говорил.
Здравствуйте, Согласно коду, проверяется первая строка в ограничениях по клиентским счетам, параметр "Лимит открытых позиций" Соответственно, надо в терминале QUIK проверить а есть ли данные в этом параметре у этой таблицы, в первой строке. К слову, фильтры и сортировка таблиц не влияют на получаемые данные, а значит таблицу следует смотреть без них.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Космонавт написал: Сергей, спасибо за пример, но не понятно как функции OnCalculate(i) удаётся обратиться ко всем требуемым 9 свечкам. Что передаётся в переменную i ?
Sergey Gorokhov написал: SUM_TMP =(SUM_TMP[i-1] or 0)+C(i)
Сергей, спасибо за интересный пример. Обратил внимание на вот эту конструкцию. А Вы не могли бы пояснить, как он работает? как она обрабатывает оператор OR в данном случае? Если я правильно понимаю, она суммирует либо то, что перед ним, либо то что после, но по какому критерию?
Если SUM_TMP[i-1] не существует (nil) то вместо него берется 0
Здравствуйте, У нас есть такой пример индикатора без циклов, он не адаптирован под CreateDataSource, но может дать идею решения:
Скрытый текст
Код
Settings = {
Name = "*SMA",
Period = 9,
line = {{Name = "SMA1",Type = TYPE_LINE, Color = RGB(255, 0, 0)}}
}
function Init()
SUM_TMP={}
return #Settings.line
end
function OnCalculate(i)
local Out = nil
P=Settings.Period
if i==1 then SUM_TMP={} end
SUM_TMP[i]=(SUM_TMP[i-1] or 0)+C(i)
if i >= P then
Out = (SUM_TMP[i]-(SUM_TMP[i-P] or 0))/P
end
return Out
end
Александр Правилов написал: Я же написал наверху. Сначала поставил 13, потом снем, поставил 10, потом поставил 13. (все проф, лицензии)
Да написали, версии, но не сборки. У нас описанное поведение не воспроизводится (да и от других пользователей таких проблем не поступало). В связи с чем можем заключить что проблема в каких-то специфичных настройках на локальной машине. К сожалению затруднимся помочь с решением.
Александр Правилов, Какой именно офис Вы тестировали? Ранее были ситуации когда на версии Offise 2010 Starter (сокращенная версия офиса), DDE не работал. На остальных должен работать, с такими проблемами ранее никто не обращался. А на счет 13го, к сожалению подсказать затруднимся
Здравствуйте, В самом Excel, в параметрах, не должно быть галки "Игнорировать DDE-запросы от других приложений" Где эта галка расположена в Вашей версии Excel, к сожалению подсказать затруднимся.
Sergey Gorokhov написал: Если данные строковые, то передавать в кавычках надо
или переписать пример, тогда будет работать как со строками так и с числами:
Код
function pack(...)
return arg
end
function str2tbl(str)
return assert(loadstring("return pack('"..string.gsub(str, ",", "','").."')"))()
end
function str2tbl2(str)
return string.gmatch(str, "([^,]+)")
end
tbl = str2tbl("TQBR,TQTF,RTSIDX,INDX")
Русский написал: Ваш способ либо не работает, либо я делаю что-то неправильно. Так как условие if не выполняется.
Это был пример не более (предоставляется как есть) и этот пример изначально предназначался для числовых данных. Если данные строковые, то передавать в кавычках надо tbl = str2tbl("'TQBR','TQTF','RTSIDX','INDX'")
Старатель написал: Вопрос разработчикам: верно ли, что в QUIK, как таковой, многопоточности нет?
В QUIK есть многопоточность
Цитата
Старатель написал: Да, есть два потока: основной и main. Но в каждый момент времени работают команды только из одного потока. Просто происходит переключение между потоками на уровне ОС.
так обрабатывается ситуация при одновременном доступе к одному ресурсу
Как уже было сказано, в QUIK нет возможности регулировать количество разрядов после запятой на Lua индикаторах. Ни через интерфейс, ни в коде индикатора, ни как-то иначе. Да в коде, Вы можете самостоятельно округлить числа до нужного количества знаков, но установить разрядность нельзя.
Sergey Denegin написал: одиночное нажатие мышки с нажатой кнопкой Ctrl
Прошу прощения, не заметили что Вы нажимаете Ctrl с клавишей мыши. Действительно, в таком варианте решить задачу в одном событии нельзя, разве что помнить предыдущие. Мы зарегистрировали пожелание на добавление события поднятия клавиш клавиатуры. Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
По второму вопросу проблема не воспроизводится. Вот наш код:
Скрытый текст
Код
work=true
function f_cb(t_id,msg,par1,par2) --событие на нажатие клавиш
message("msg= "..msg.." par1="..par1.." par2="..par2)
if (msg==QTABLE_CHAR) and (par2==19) then --сохранить в CSV файл текущее состояние таблицы нужно нажать комбинацию клавиш Ctrl+S
message("Нажали Ctrl+S")
end
if (msg==QTABLE_VKEY) and (par2==116) then --функция принудительного обновления таблицы при нажатии клавиши Ctrl+F5
message("Нажали Ctrl+F5")
end
if msg==QTABLE_CLOSE then
OnStop()
end
end
function OnStop()
work=false
DestroyTable(t_id)
end
function main()
t_id=AllocTable()
AddColumn(t_id,1,"INT1",true,QTABLE_INT_TYPE,10)
CreateWindow(t_id)
SetWindowCaption(t_id,"Script message.")
SetTableNotificationCallback(t_id, f_cb)
tmp=InsertRow(t_id,-1)
SetCell(t_id,tmp,1,"1",1)
while work do
sleep(500)
end
end
Приведите Ваш пример при котором проблема повторяется
Не приходят события OnAllTrade при закрытой Таблице обезличенных сделок, События OnAllTrade приходят только при открытой таблице, в настройках все заказал.
Sergey Denegin написал: Где я потом смогу получить нужные мне данные обезличенных сделок?
Везде где это возможно. В том числе и в OnAllTrade. После заказа она будет наполняться с самого начала до текущего момента, и все это будет сыпаться в OnAllTrade.
Не приходят события OnAllTrade при закрытой Таблице обезличенных сделок, События OnAllTrade приходят только при открытой таблице, в настройках все заказал.
Потому что данные в таблице обезличенных сделок слишком большого объема. Если бы они заказывались все сразу без разбора, это был бы просто гигантский объем информации, до нескольких гигабайт. Пользователям это не то что не нужно, а даже вредно. Поэтому для таблицы обезличенных сделок, данные не едут пока пользователь сам их не запросит тем или иным способом.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Здравствуйте, Менять цвет Lua индикатора в зависимости от условия можно уже сейчас. Путем создания нескольких одинаковых линий, но с разным цветом и далее, от условия рисовать только нужную линию. Однако, в текущей реализации через Lua нельзя создавать график в виде свечей. Вернее можно, но это будут не свечи, а линии (т.к значение можно указать только одно, а для свечи нужно 5). Таким образом, можем предложить зарегистрировать пожелание на добавление возможности рисовать свечи через Lua.
Sergey Denegin написал: А как она по скорости? Быстрее чем обычный message?
PrintDbgStr быстрее чем message
Цитата
Sergey Denegin написал: И если я правильно понял, то если использовать DebugView, то значения переменных будут выводиться там, а обычные сообщения в обычном окне для message, и лично мне кажется, будет сложно совмещать по времени, что после чего следовало. Или такой проблемы не возникает?
Если хотите знать кто раньше, ничего не мешает добавить какой-нибудь порядковый номер.
Егор Масалкин написал: если у datetime отдельно секунды, часы, минуты и прочее, а у метки эти параметры объединены?
Взять отдельно секунды, часы, минуты и прочее и объединить
И по какому принципу они объединяются? Вроде простейший инструмент, но почему-то требуется множество дополнительных действий чтобы поставить метку на график...
Формат времени для меток это строка HHMMSS. datetime это таблица содержащая отдельно часы минуты и секунды. Вам нужно их взять из этой таблицы и просто объединить как строку. time = x.datetime.hour..x.datetime.min..x.datetime.sec
Почему так, объясняется тем что метки появились задолго до появления Lua в терминале. И тек исторически сложилось, что у них формат даты времени у них именно такой. Возможно, в будущем это как-то изменится, но сейчас работает именно так.
lokust написал: НЕответили на пару конкретнных вопросов,
На какие конкретные вопросы не было ответа?
Цитата
lokust написал: только отФутболиваете то к Брокеру, то на Биржу.
Потому что нам не известно и не может быть что и как у них настроено. Сервера QUIK находятся у брокеров, у нас нет к ним доступа. Брокер сам договаривается с биржей, на каких условиях нам тоже не известно. В некоторых вопросах мы можем помочь, но не то что касается взаимодействия между брокером и биржей, и взаимодействия между клиентом и брокером.
lokust, Наш разговор зашел в тупик. Вы не воспринимаете то что Вам говорят, не только мы но и другие пользователи. А Ваши аргументы уже давно парированы. Не считаю должным дальше повторять то что и так уже было не один раз сказано.
Здравствуйте, Описание функций для работы с файлами можно найти в интернете, например ссылка lua.ru Для построчного чтения можно использовать io.lines или file:lines
Здравствуйте, Вынуждены еще раз повторить то что уже было сказано. Большой поток данных это нормально. Появление из-за этого ошибки о нехватке памяти это не нормально. И если есть баг в терминале из-за которого возникает ошибка, то в первую очередь следует обновить терминал, так как скорее всего эта ошибка уже давно исправлена. Версия терминала 6.12 является сильно устаревшей. С тех пор прошло уже 2 с лишним года. Выполните обновление терминала QUIK. Если Вам нужно уменьшить поток данных, в первую очередь обратитесь к брокеру. Касаемо вопроса к бирже, рекомендуем его задать специалистам биржи.
Михаил Понамаренко (pmntrade.ru) написал: Горячие клавиши нужны будут для вызова добавленных возможностей, например, экспорта DDE.
Если пожелание на экспорт будет реализовано (станет понятно после рассмотрения), то стандартные горячие клавиши и контекстное меню для него также появятся.
Михаил Понамаренко (pmntrade.ru) написал: 1. Запускаю скрипт, создаётся таблица QLUA, сохраняю координаты окна таблицы, перехожу на другую вкладку, перезапускаю QUIK, таблица появляется на том же месте, НО НА ТЕКУЩЕЙ ВКЛАДКЕ, А НЕ НА ТОЙ, ГДЕ ОНА БЫЛА ОТКРЫТА. Есть ли возможность "запомнить" вкладку?
К большому сожалению в QLUA нет функционала позволяющего указывать на какой вкладке открывать таблицу. Мы зарегистрировали от Вас пожелание на добавление такой возможности.
Михаил Понамаренко (pmntrade.ru) написал: • таблицы не сохраняются в файл конфигурации (решилась бы проблема сохранения вкладок);
Нет, в данном месте решение другое. Добавить возможность через QLUA указывать на какой вкладке создавать таблицу, о чем сказано в первом пункте. Касаемо сохранения в файл, ничего не мешает запрограммировать это в самом коде скрипта.
Некоторые пункты контекстного меню в будущем будут добавлены, например то же редактирование, или экспорт данных (если будут добавлены). Если речь про добавление своих собственных пунктов просьба уточнить. Если речь про какие-то конкретные стандартные пункты, также просьба уточнить.
Михаил Понамаренко (pmntrade.ru) написал: • отсутствует экспорт данных из таблицы (особенно важен DDE экспорт, т.к. функциями DDE LUA пользоваться непривычно и неудобно);
Мы зарегистрировали от Вас пожелание на добавление такой возможности.
Этот пункт не понятен. Вы легко можете сами запрограммировать горячие клавиши. Для этого есть функция SetTableNotificationCallback
Мы постараемся рассмотреть зарегистрированные пожелания и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.