Старатель (Все сообщения пользователя)

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

Страницы: Пред. 1 ... 36 37 38 39 40 41 42 43 44 45 46 След.
Расширение функций управления окном.
 
Цитата
ISR пишет:
Размер первого столбца, с нумерацией строк, задать невозможно - может отдельную функцию для установки ширины первого столбца.
Лучше сразу функцию, которая могла бы изменять ширину колонок, в т.ч. и нулевой, после создания таблицы. А также функцию получения текущей ширины колонки, чтобы можно было сохранить параметры таблицы для следующей сессии.
Цитата
ISR пишет:
Иногда кстати скрипт вообще не запускается при старте квика по не понятным причинам
Возможно, у вас назначен колбек на окно, который останавливает скрипт при его закрытии. Тут я рассматривал эту проблему.

Там же я поднимал вопрос:
Цитата
3) Теперь о том, что писал выше: надо чобы при запуске QUIK окна LUA открывались на тех же закладках, на котрых они работали в предыдущей сессии.
На что был дан ответ:
Цитата
Сергей Горохов, ARQA Technologies пишет:
Сергей,
п.3. это неправильное поведение программы, так не должно быть. Мы изучим этот вопрос и ответим позднее.
Надо делать так, как надо. А как не надо - делать не надо.
Заказ всех сделок, Использование CreateDataSource для заказа всех сделок
 
Цитата
Egor Zaytsev пишет:
Сергей, воспроизводить можно на скриптах в вашем первом посте?
Да, можно на них.
Перед первым запуском теста удалите файл "alltrade.dat" и очистите секцию [ALL_TRADES_DATA] в файле INFO.INI

PS: обратил внимание, что, если открыта ТВС (в ТВС могут быть выбраны бумаги, отличные от заказываемых в скрипте), то заказ всех сделок по большому числу бумаг длится гораздо дольше. При этом возрастает вероятность краха терминала во время заказа.
Надо делать так, как надо. А как не надо - делать не надо.
Ограничение на количество отображаемых свечей на графиках
 
Цитата
sam063rus пишет:
встаёт такой вопрос: а если графиков более чем один. скажем, 20-50 то тогда как? да что говорить? пусть даже 10?
Думаю, вы в состоянии оценить возможности вашего "сервера" и задать для каждого графика необходимое количество свечей.
Цитата
Серж пишет:
При этом чтобы не грузить терминал пользователь может задать в настройках "Отображать последние x свечей", что уже реализовано.
А вот эту мысль не понял:
Цитата
sam063rus пишет:
при каждом добавлении новой свечки плагин графиков приостанавливает все другие потоки, которые к нему обращаются, что заметно потому как квик начинает "замирать" в этот момент
Количество добавляемых свечей в единицу времени зависит не от количества отображаемых свечей, а от количества открытых графиков.
Надо делать так, как надо. А как не надо - делать не надо.
Ограничение на количество отображаемых свечей на графиках
 
Уберите, наконец, это ограничение на отображение максимум 3000 свечей. Неудобно анализировать историю на младших таймфреймах.
При этом чтобы не грузить терминал пользователь может задать в настройках "Отображать последние x свечей", что уже реализовано.
Надо делать так, как надо. А как не надо - делать не надо.
Заказ всех сделок, Использование CreateDataSource для заказа всех сделок
 
Цитата
sam063rus пишет:
удивляюсь, однако сколько в квике ошибок...
А я уже не удивляюсь...
Но вот упорство сотрудников ARQA, с которым они "не хотят" видеть те проблемы, о которых им рапортуют, уже бесит.

2_сотрудникам_ARQA: учитывая количество багов, найденных мной и исправленных благодаря этому, в ИТС QUIK, можно сказать, что я выполняю работу ваших бета-тестеров, которых у вас нет. Пора бы уже меня принять в штат и поставить на полное довольствие.
С кем можно пообщаться по этому поводу?

Цитата
Stanislav Tvorogov пишет:
Так как причина аварийного завершения QUIK была установлена по присланному Вами ранее файлу дампа, рекомендуем, в том числе и по указанной особенности, ожидать решения проблемы в одной из очередных версий программы.
Решение проблемы падения QUIK в результате заказа всех сделок функцией CreateDataSource не решит проблему "пропуска" сделок в результате краха QUIK по другим причинам. Поэтому рассматривать эти проблемы нужно отдельно.
Цитата
Серж пишет:
Через некоторое время QUIK падает с созданием дампа. После нескольких попыток все сделки наконец закачиваются в хранилище. Но при этом есть вероятность, что часть сделок теряется.
Я просто привёл пример, как вы можете воспроизвести описанную ситуацию. Но у меня есть основания полагать, что это не единственная ситуация, когда часть всех сделок не сохраняется.
Надо делать так, как надо. А как не надо - делать не надо.
Как насчет пинга?
 
Ваши конкуренты пошли дальше:
Цитата
А вы знаете, что...
...в 2011 году ITinvest ввела новый бесплатный сервис – мониторинг скорости подачи поручений на торговые сервера компании в режиме реального времени? Теперь каждый Клиент прямо в торговом терминале может видеть состояние того или иного сервера и планировать свою торговлю опираясь на объективную информацию об уровне загрузки системы.
Иногда полезно "подглядывать" за конкурентами.
Надо делать так, как надо. А как не надо - делать не надо.
Заказ всех сделок, Использование CreateDataSource для заказа всех сделок
 
Цитата
Серж пишет:

при падении Квика нередко часть сделок "выпадает" из БД.
Под БД я имел ввиду внутреннее хранилище Квик.
Надо делать так, как надо. А как не надо - делать не надо.
Заказ всех сделок, Использование CreateDataSource для заказа всех сделок
 
Цитата
Серж пишет:
Но при этом есть вероятность, что часть сделок теряется. Повторное переподключение к серверу не помогает. Помогает только удаление файла alltrade.dat с повторной закачкой данных.
А что насчёт этого факта? Рекомендую всё же обратить внимание на него: при падении Квика нередко часть сделок "выпадает" из БД.
В этом можно убедиться, вызвав неоднократное падение Квика во время загрузки сделок (см. пост #1) и сравнив полученное число сделок с количеством закачанных сделок при штатной загрузке.
Падение Квика при использовании Lua-скриптов - не редкое явление в текущей реализации. Посему необходимо обеспечить целостность таблицы всех сделок при загрузке.
Надо делать так, как надо. А как не надо - делать не надо.
нужно ли использовать Clear() при завершении скрипта
 
Ну вот, пришли тут и нас нафлудили...

Так кто-нибудь из разработчиков может однозначно ответить на вопросы?
Надо делать так, как надо. А как не надо - делать не надо.
Вопрос по ЛУА (округление)
 
Как вариант:
Код
local nul = 0.000000001
if math.abs(a - b) < nul then print('a == b') else print('a ~= b') end
или
Код
if math.abs(a - b) < PriceStep*0.1 then print('a == b') else print('a ~= b') end
Надо делать так, как надо. А как не надо - делать не надо.
SetTableNotificationCallback
 
Цитата
s_mike@rambler.ru пишет:
В этом случае нет проблем по окончании этой разовой работы вставитьsleep(1e10), если окно нужно держать открытым.
Что-то мне подсказывает, что при попытке остановить такой скрипт терминал зависнет.
В любом случае проще предусмотреть закрытие окна в коде, если оно более не требуется, по окончании скрипта.
Цитата
Michael Bulychev пишет:
Такая возможность действительно закладывалась. Отработал скрипт один раз и оставил таблицу, дальше она живет отдельно от скрипта.к коду она не привязана.
Считаю вполне нормальным такое поведение.
Надо делать так, как надо. А как не надо - делать не надо.
SetTableNotificationCallback
 
Цитата
s_mike@rambler.ru пишет:
Я не могу представить, с какой целью может понадобиться окно на экране, оставшееся после завершения скрипта.
А это зависит от цели создания окна.
Скрипт, например, может выполнять разовую (т.е., без цикла в main) работу длительного характера с выводом результатов работы на экран.
Надо делать так, как надо. А как не надо - делать не надо.
SetTableNotificationCallback
 
Цитата
Michael Bulychev пишет:
Чтоб бы избежать такого придется закрывать все окна созданные скриптом после его остановки.
Можно рассмотреть такое пожелание если оно устроит пользователей.
Ну вот этого уж точно не стоит делать: если пользователь сам не позаботился о закрытии окна при завершении скрипта, то значит так нужно.
Чтобы не получать колбеки от "старых" окон можно поступить, как я писал выше:
Цитата
Серж пишет:
Если не предусмотрено закрытие окна при штатной остановке скрипта и работа со "старым" окном после этого не требуется, то я обычно удаляю колбек:
Код
 SetTableNotificationCallback(hID, function()end)  
Надо делать так, как надо. А как не надо - делать не надо.
Ontrade
 
Цитата
Николай Камынин пишет:
обращается не к хранилищу, а к полученной таблице с параметрами сделки.
Хранилище здесь тоже не имеет никакого значения.
Николай Камынин, это вы для меня всё написали? Зачем? Что вы пытались этим доказать?
Пример #3 показывает, как работать с последней сделкой из колбека. Что тут не ясно?
Цитата
Николай Камынин пишет:
Т е message выводит в сообщение номер сделки в пустой ячейке таблицы.
Что до этого, то мне не понятно, откуда у nil может быть номер сделки? Не поясните?
Надо делать так, как надо. А как не надо - делать не надо.
SetTableNotificationCallback
 
Цитата
Сергей Горохов, ARQA Technologies пишет:
Это штатный функционал.
Надо делать так, как надо. А как не надо - делать не надо.
Ontrade
 
Цитата
Alexey K пишет:
почему у меня в этой части скрипта выдает ноль?
А вот если бы указал trade=getItem("trades", getNumberOf("trades")-1) то получил бы номер заявки предыдущей сделки
Потому что в хранилище Квика сделка попадает после отработки колбека. Поэтому внутри колбека getNumberOf возвращает количество сделок без учёта последней. И взять её значение из таблицы функцией getItem невозможно.
Но вот почему у вас ноль, а не nil - вот это вопрос.
Надо делать так, как надо. А как не надо - делать не надо.
Ontrade
 
Код
function OnTrade(trade_data) 
  message(tostring(trade_data["order_num"]),1) 
end 
Надо делать так, как надо. А как не надо - делать не надо.
Сохранение всех сделок
 
Дело в том, что функция CreateDataSource() заказывает данные по интересующему параметру только в том случае, если этот параметр задан вручную в настройках меню "Связь - Списки...", т.е. полной автономности скрипта в этом месте не достичь.
Надо делать так, как надо. А как не надо - делать не надо.
Сохранение всех сделок
 
Цитата
Дмитрий пишет:
А нельзя сохранить значения этих параметров по состоянию, например, на 9:55, 18:50 и 23:55 ?
А потом вычесть значение на 9:55 из значения на 18:50, затем прибавить к этой разности значение по состоянию на 23:55
Я думал об этом, точнее о получении значений параметров в заданное время с помощью функции CreateDataSource.
Но, к сожалению, она бесполезна (равно, как и вариант с запоминанием значений по времени) без шаманства в меню "Связь - Списки..." (CQ01544135).
Но, похоже, ничего другого не остаётся...
Надо делать так, как надо. А как не надо - делать не надо.
SetTableNotificationCallback
 
Я писал об этом эффекте: http://forum-archive.quik.ru/forum/lua/124592/124756/
После некоторых раздумий пришёл к выводу, что эту особенность можно использовать для работы со "старым" окном после перезапуска скрипта.   :)  
Цитата
s_mike@rambler.ru пишет:
Пробуем закрыть "мертвое" окно, оставшееся от первого запуска скрипта (или какое-то другое действие с ним)
Можно просто закрыть "мертвое" окно перед повторным запуском скрипта   ;-)  

Если не предусмотрено закрытие окна при штатной остановке скрипта и работа со "старым" окном после этого не требуется, то я обычно удаляю колбек:
Код
SetTableNotificationCallback(hID, function()end) 
Надо делать так, как надо. А как не надо - делать не надо.
Горячие клавиши
 
Реализация возможности задавать горячие клавиши для любого пункта меню, как это сделано в foobar2000, поставила бы точку в запросах такого типа.
Надо делать так, как надо. А как не надо - делать не надо.
Сохранение всех сделок
 
Цитата
Дмитрий пишет:
Проблема в том, что нет сделок за вчерашнюю вечернюю сессию?
Нет, не так.

Параметры "Кол-во сделок" и "Общее кол-во", по которым я могу сверить сделки по споту, не годятся для ФОРТС:
все сделки сохраняются за период 10:00-23:50, а указанные выше параметры учитывают сделки за период 19:00-18:45
Надо делать так, как надо. А как не надо - делать не надо.
стабильность соединения
 
Цитата
Andrey пишет:
Пробовал с того же ноута пинговать сервера брокера, все ок, потерь нет, пинг не более 12мс
Вы это делали имеено в тот момент, когда "отваливался" QUIK?
Поставьте ping на более длительное время, и для начала WiFi-роутера. Посмотрите, какие показания в момент разрыва связи с сервером.
Надо делать так, как надо. А как не надо - делать не надо.
Сохранение всех сделок
 
При экспорте всех сделок в БД обнаружилось, что в один из торговых дней из архива "выпала" часть сделок в середине дня.
Поэтому возникла необходимость проверки, все ли сделки закачаны.
Для спота это можно проверить по параметрам "Кол-во сделок" и "Общее кол-во". Для ФОРТС сложнее: с вечерней сессии отсчёт начинается по-новой.
Есть идеи, как проверить закачку всех сделок для ФОРТС?
Надо делать так, как надо. А как не надо - делать не надо.
стабильность соединения
 
Цитата
Andrey пишет:
Я так понимаю проблема с wifi? уровень сигнала отличный, потоковое видео и скорость на том же ноуте отличная, только проблема с квиком. К слову сказать квик на планшете тоже работает с перебоями.
Самое первое, что нужно сделать в этом случае, это - проверить качество WiFi-соединения, например командой ping, даже того же роутера.
Часто планшеты, телефоны теряют связь с WiFi-роутером краткосрочно. Этого достаточно, чтобы QUIK разорвал связь с сервером.
Надо делать так, как надо. А как не надо - делать не надо.
нужно ли использовать Clear() при завершении скрипта
 
Цитата
Sergey Gorokhov пишет:
Есть смысл или нет, покажет практика.
Какая практика? Разработчики не в курсе?

Вопрос автора темы изначально был:
Цитата
Дмитрий пишет:
1) Если в скрипте для вывода на экран создавалась таблица t_id, окно которой еще до завершения работы скрипта было закрыто вручную, то нужно ли после этого использовать вызов функции Clear(t_id) для очистки содержимого таблицы t_id и освобождения памяти, занятой этой таблицей?
Если ответ на этот вопрос утвердительный, то еще один вопрос:
2) Если после закрытия окна вручную скрипт сразу завершает свою работу, то есть ли смысл и в этом случае использовать функцию Clear(t_id) или же вся занятая скриптом (и в том числе таблицей t_id) память автоматически освободится после остановки скрипта?
Далее, согласно документации
Цитата
Функция закрывает окно таблицы с идентификатором «t_id».
Формат вызова:
NUMBER DestroyTable(NUMBER t_id)
Все данные для отображения при закрытии окна удаляются.
Потому и спрашиваю, есть ли смысл в использовании функции Clear() перед DestroyTable() или DestroyTable() делает то же, что и Clear()?

Вопрос в целесообразности использования функций, т.к. их вызовы в любом случае влияют на производительность.

Ответьте, пожалуйста на поставленные вопросы.
Надо делать так, как надо. А как не надо - делать не надо.
нужно ли использовать Clear() при завершении скрипта
 
Цитата
Sergey Gorokhov пишет:
Использование Clear в обоих случаях лишним не будет
Есть ли смысл в использовании функции Clear() перед DestroyTable()?
Надо делать так, как надо. А как не надо - делать не надо.
Как насчет пинга?
 
Цитата
dimka пишет:
Добавьте в квик возможность пинговки серваков хотя бы через меню списка серверов ....
Полагаю, автор имел ввиду возможность проверки качества связи со всеми серверами из списка, чтобы можно было выбрать наиболее качественное для подключения.
Надо делать так, как надо. А как не надо - делать не надо.
DestroyTable подвешивает терминал.
 
В v.6.16 есть проблемы при завершении скрипта кнопкой "Остановить":
если main() завершится раньше OnStop(), то вызов каких-либо функций QLUA из OnStop() приводит к падению терминала:
http://forum-archive.quik.ru/forum/lua/124475/124533/?page=2/#m124533
Надо делать так, как надо. А как не надо - делать не надо.
Загрузка кода из строки
 
Есть некоторая числовая переменная value и условие filter, заданное строкой, например:
Код
local value, filter = 5, " > 3"

Нужно вывести результат применения условия к переменной, как-то так:
Код
print(5 > 3)
Надо делать так, как надо. А как не надо - делать не надо.
Автоматическое переключение на другой сервер
 
Цитата
Дмитрий пишет:
А Вы попробуйте добавить в список соединений несколько одинаковых (на один и тот же сервер). Тогда он будет их перебирать столько раз, сколько Вам нужно, пока не дойдет до соединения с другим сервером.
К сожалению, это решение немногим лучше его отсутствия: сервер будет перебираться заданное количество раз только при первом обрыве связи, при последующих обрывах - всё меньшее число раз, и, в итоге, перескочит на другой сервер.
Так что вопрос остаётся открытый:
Цитата
Серж пишет:
Добавьте в настройки соединений параметр "При n неудачных попыток переключаться на другой сервер".
Надо делать так, как надо. А как не надо - делать не надо.
Поиск элемента в таблице
 
Хотя, наверное, не так. Учитывая, что при вычислении интервала времени между двумя событиями необходимо два измерения, то погрешность может составлять до 30 мс.
Надо делать так, как надо. А как не надо - делать не надо.
Поиск элемента в таблице
 
Цитата
Дмитрий пишет:
И насколько сильно варьируются (в разы или все же разницу можно измерять процентами)?
А это зависит от величины измеряемого интервала времени. Если не ошибаюсь, погрешность измерения os.clock() может быть от 0.5 до 15 мс.
Надо делать так, как надо. А как не надо - делать не надо.
Не считываются параметры инструмента
 
USE_CASE_SENSITIVE_CONSTANTS
Надо делать так, как надо. А как не надо - делать не надо.
Задержка в исполнении кода, Как оформить программную задержку
 
Цитата
Максим пишет:
Не отвечает на время задержки. Хотелось бы этого избежать, т к работа квика на это время парализована.
Тогда:
Цитата
Серж пишет:
Выставляйте заявку в теле main(), а не в колбеках.
Надо делать так, как надо. А как не надо - делать не надо.
Не работает снятие заявки на фортс по "KILL_ORDER"
 
CLASSCODE и  SECCODE не надо указывать?
Надо делать так, как надо. А как не надо - делать не надо.
Задержка в исполнении кода, Как оформить программную задержку
 
Цитата
Максим пишет:
терминал после этого виснет.
Что есть "виснет"? Не отвечает на время задержки или зависает "намертво" так, что нужно снимать задачу из диспетчера?
Надо делать так, как надо. А как не надо - делать не надо.
Как получить значение Лимита открытых позиций по фьючерсам или как получить элемент из таблицы?
 
FutLimit.cbplimit ?
Надо делать так, как надо. А как не надо - делать не надо.
Задержка в исполнении кода, Как оформить программную задержку
 
Цитата
Максим пишет:
Подскажите пожалуйста, как в исполнении кода вставить задержку, только не sleep(), иначе терминал после этого виснет.
Выставляйте заявку в теле main(), а не в колбеках.
Надо делать так, как надо. А как не надо - делать не надо.
вопрос по коллбекам, к разработчикам (ONLY)
 
Скрытый текст
sam063rus, как по-вашему, как должен повести себя скрипт, что должно произойти с формой в вашем примере?
Надо делать так, как надо. А как не надо - делать не надо.
вопрос по коллбекам, к разработчикам (ONLY)
 
Перепишите вот так функцию asd() из первого кода, будет интересней   :)  
Код
function asd()
  message('Close', 2)
  main_window:Free()
end
Надо делать так, как надо. А как не надо - делать не надо.
Заказ всех сделок, Использование CreateDataSource для заказа всех сделок
 
Цитата
Egor Zaytsev пишет:
Можете прислать файл dmp и сам скрипт для разбора?
Какой dmp? Дампы после ошибки "Internal exception happend" я отправлял. Мне ответили, что ошибка найдена и будет исправлена.

Это уже другой вопрос. После остановки скрипта
Код
function main()
  message(tostring(CreateDataSource('QJSIM', 'SBER', INTERVAL_TICK)), 2)
  while not stopped do sleep(200) end
end
function OnStop()
  stopped = true
end
кнопкой "Остановить" сбрасываются настройки всех выбранных инструментов для заказа всех сделок.
Надо делать так, как надо. А как не надо - делать не надо.
Продление тестового доступа 5508
 
Продлите, пожалуйста, тестовый доступ: UID: 81512
Надо делать так, как надо. А как не надо - делать не надо.
getSecurityInfo(ClassCode, secCode) возвращает значения nil
 
Цитата
secList = getClassSecurities(ClassCodeList[i1]
И там ещё смайлы какие-то непонятные. В коде не должно быть смайлов.
Надо делать так, как надо. А как не надо - делать не надо.
Заказ всех сделок, Использование CreateDataSource для заказа всех сделок
 
Цитата
Серж пишет:
Если не открыта ТВС или тиковый график, то при заказе всех сделок из скрипта сбрасываются настройки по уже заказанным инструментам. После остановки скрипта настройки "Заказ всех сделок..." полностью сбрасываются, как будто ничего не заказывалось (даже если функция :Close() не вызывалась).
Это ошибка или что?
Надо делать так, как надо. А как не надо - делать не надо.
T()
 
Цитата
Дмитрий пишет:
К сожалению, этого сделать не получится, так как в ТТП время записей приведено с точностью до целых секунд. Миллисекунд там нет.
Вот, правда, не проверял, что там возвращается, но из документации к v.6.16.1.15:
Цитата
s_mike@rambler.ru пишет:
Время свечи возвращается с точностью до миллисекунд в виде таблицы с полями:
{year, month, day, week_day, hour, min, sec, ms, count}
Надо делать так, как надо. А как не надо - делать не надо.
T()
 
Цитата
latrop1 пишет:
У разных источников данных (для разных параметров) в одну и туже секунду может быть разное кол-во тиков (count).
Поэтому возникает проблема, как можно синхронизировать значения разных параметров?

Например: voltoday имеет всегда большее кол-во тиков в сек, нежели numcontracts.
И определить какому значению voltoday на определенный тик соответствует какое значение numcontracts - ума не приложу как.
Я не решал подобных задач, но полагаю, что для тех параметров, которые изменяются реже одного раза в мс (а это все параметры из ТТП), можно построить таблицу соответствий вида:
Код
{par1_i, par2_i},
где par1_i, par2_i - значение каждого параметра, синхронизированные по значению ms, как заполняется Таблица изменений параметров:
Цитата
Sergey Gorokhov пишет:
Просто дизайн таблицы изменений заполняет пропуски копируя последнее изменение, в случае если в таблице несколько параметров.
Надо делать так, как надо. А как не надо - делать не надо.
вопрос по коллбекам, к разработчикам (ONLY)
 
Цитата
Michael Bulychev пишет:
OnParam и main исполняются в разных потоках OC, но при обращении к x, произойдет блокировка, изменение данных и разблокировка.
Другими словами, использование простых переменных (строковых, числовых, булевых...) потокобезопасно, в отличие от таблиц?
Надо делать так, как надо. А как не надо - делать не надо.
Автоматическое восстановление соединения при полном откзазе сервера.
 
Цитата
Дмитрий пишет:
Цитата

Цитата
Серж пишет:
В этом месте не помешала бы возможность подключения через Lua-скрипт к любому серверу и получения сообщения об ошибке подключения в том же скрипте. Тогда каждый пользователь мог бы написать для себя правила переключения на резервные сервера.
Правильнее реализовать вот это предложение:
http://forum.quik.ru/messages/forum8/message893/topic146/#message893
Egor Zaytsev,
Да уж хоть что-нибудь реализуйте. Или отреагируйте как-нибудь на предложение.
Надо делать так, как надо. А как не надо - делать не надо.
Автоматическое восстановление соединения при полном откзазе сервера.
 
Цитата
Серж пишет:
В этом месте не помешала бы возможность подключения через Lua-скрипт к любому серверу и получения сообщения об ошибке подключения в том же скрипте. Тогда каждый пользователь мог бы написать для себя правила переключения на резервные сервера.
Егор, это пожелание на доработку.
Надо делать так, как надо. А как не надо - делать не надо.
Страницы: Пред. 1 ... 36 37 38 39 40 41 42 43 44 45 46 След.
Наверх