если я уберу flush при каждой записи, не появятся ли чрезмерные риски того, что какая-то часть данных не запишется? Ну например я принудительно остановил скрипт. Ведь в этом случае какие-то строчки потеряются? Или не потеряются?
При останове скрипта луа машина, встроенная в терминал, автоматически закрывает все файлы посредством close(). Это происходит с версии qlua 6.xx вроде.
Вызов close() всегда подразумевает flush() - так устроена библиотека С.
Поэтому вы ничем не рискуете.
flush() имеет смысл только в том случае, если вы в реальном времени другой программой читаете создаваемый файл. Flush() сбрасывает файловый буфер на диск немедленно. Без него файловые операции кешируются в памяти. В момент закртытия файла все буферы сбрасываются на диск.
Пасхалочка для Алексея Иванникова:
Получить разрешение монитора - Lua
Пользователь
Сообщений: Регистрация: 30.01.2015
29.04.2018 11:22:56
Поправлюсь.
print(bot4sale.ScreenResolution())
Пасхалочка для Алексея Иванникова:
Получить разрешение монитора - Lua
Пользователь
Сообщений: Регистрация: 30.01.2015
29.04.2018 10:42:07
Цитата
Archie_ написал: Здравствуйте ! Подскажите пожалуйста: Как при помощи LUA получить разрешения монитора (рабочего стола) height , width = в пикселях
Спасибо !!!
Впрямую из луа возможности нет. Вы можете сами написать расширение на С++ используя функцию GetSystemMetrics или поискать подходящую готовую библиотеку, в которой эта функция используется. Среди прочих можете вытряхнуть их архива библиотку dot4sale.dll
require "bot4sale" print(ScreenResolution())
Пасхалочка для Алексея Иванникова:
Можно ли одним скриптом луа запустить другой.?
Пользователь
Сообщений: Регистрация: 30.01.2015
29.04.2018 06:43:52
Цитата
Igor Golovin написал: Можно ли одним скриптом луа запустить другой.? Пример идет скальпинг, и есть таблица визуализации итогов. Нужно, что бы скальпинг жил своей быстрой жизнью, а таблица своей медленной (дабы не тормозить процесс) . Можно за пустить два разных скрипта,.... Но можно ли сделать из одного (один скрипт загружает другой) ?
нельзя.
можно запустить 2 скрипта заранее. Первый работает, а второй крутится вхолостую иоемурсы не кушает. А нужный момент первый создаёт сигнал второму, что пора просыпаться. Сигналом может быть все что угодно - мьютекс, memorymappedfile и так далее. В простейшем случае файл.
Пасхалочка для Алексея Иванникова:
R(RStudio) + QUIK, Хотелось бы получить все данные из QUIK в R
Пользователь
Сообщений: Регистрация: 30.01.2015
26.04.2018 20:19:55
Цитата
Ivan написал: Делал ли кто-нибудь интеграцию R с QUIK? Хотелось бы получать состояние своего портфеля и получить возможность создавать заявки.
В частности, можно попробовать
Пасхалочка для Алексея Иванникова:
Как получить "Демо" капча не работает
Пользователь
Сообщений: Регистрация: 30.01.2015
23.04.2018 14:56:41
Цитата
Дмитрий написал: Капчу прохожу, галочка "Я не робот" ставится, но после нажатия "Отправить" всегда появляется надпись "Подтвердите что вы не робот"
Ошибка найдена и обязательно будет исправлена в одной из будущих версий ПО. Об этом мы писали в теме письма:
О какой из ошибок там шла речь?
В той ветке сообщалось о двух ошибках - setlabelparams и ondestroy
Пасхалочка для Алексея Иванникова:
Ondstroy и режим связанных окон
Пользователь
Сообщений: Регистрация: 30.01.2015
18.04.2018 12:03:37
Здравствуйте.
я уже дважды поднимал вопрос об отсутствии вызова omdestroy в индикаторах в режиме связанных окон.
при смене инструмента в этом режиме функция ondrstroy не вызывается.
оба раза я получал ответ в виде " абажите, щаса напишем скрипт для проверки и саапчим".
Но не саапчили.
Что имеем то по вопросу?
Пасхалочка для Алексея Иванникова:
Странная типизация результата
Пользователь
Сообщений: Регистрация: 30.01.2015
15.04.2018 17:10:03
Можно руководствоваться следующими принципами.
Присваивание всегда делается точно.
i = 3 i == 3 после этого всегда даст true
арифметика плюс/минус между целыми числами, хранчщимтся в формате double, в 99.99 случаях даст целое, если сумма не представится большим числом, в котором будет переполнение мантиссы.
умножение и деление, не говоря уже о всяких корнях, в большинстве случаев уже даст накопившуюся ошибку.
Пасхалочка для Алексея Иванникова:
Странная типизация результата
Пользователь
Сообщений: Регистрация: 30.01.2015
15.04.2018 07:52:09
Андрей.
в луа нет типа integer. Тип значения number плавающий с точкой.
Пасхалочка для Алексея Иванникова:
Можно ли в Квике настроить контекстное меню к своей таблице?
написал: можно отслеживать клик на таблице и открывать по этому клику новое окошко, в котором есть ваше контекстное меню.
Интересно, один ответ "нельзя", второй ответ "можно", а какой функцией или методом или свойством можно отследить клик по таблице, не подскажете?
settablenotificationcallback
Пасхалочка для Алексея Иванникова:
Можно ли в Квике настроить контекстное меню к своей таблице?
Пользователь
Сообщений: Регистрация: 30.01.2015
12.04.2018 12:49:02
Цитата
Zoya Skvorcova написал: Андрей ,добрый день. Такая возможность отсутствует.
можно отслеживать клик на таблице и открывать по этому клику новое окошко, в котором есть ваше контекстное меню.
Пасхалочка для Алексея Иванникова:
Защита кода QLua от компрометации, Есть ли возможность исключить доступ к коду на QLua брокера и разработчиков Quik
Пользователь
Сообщений: Регистрация: 30.01.2015
10.04.2018 09:47:11
Цитата
Алексей Ч написал: для защиты использую обфускатор . Код на луа сначала "прогоняю" через него, потом пакую в luac.
аккуратнее с этим обфускатором. Не будет работать в длинном ряде случаев. Самомодифицируемый код - один из примеров. Любые функции типа dofile использующие upvalues, будут обработаны некорректно и так далее.
Пасхалочка для Алексея Иванникова:
Защита кода QLua от компрометации, Есть ли возможность исключить доступ к коду на QLua брокера и разработчиков Quik
Как Вам вариант с генерацией файла типа pid индикатором? Имя файла - уникальный key. Внутри можно или просто датавремя последнего тика писать. Тогда настройки в отдельный файл при перезапуске индикатора сохранять. Либо датавремя+настройки дампить прямо в key-файл.
здравствуйте.
с файлом проблемы три.
1. При аварийном завершении терминала файлы останутся на диске. Можно попробовать поиграться с temporary files
2. Дата время внутрь файла не вариант. Существуют инструменты с двумя сделками за торговую сессию
3. Все это крайне медленно...
Пасхалочка для Алексея Иванникова:
Идентификация индикаторов
Пользователь
Сообщений: Регистрация: 30.01.2015
09.04.2018 19:45:40
Добавлю.
Есть некая shared область памяти, куда каждая запущенная копия индикатора должна дописывать свою запись в виде key=data/ key должен быть уникальным. При уничтожении индикатора запись должна уничтожаться.
Читая эту область памяти, внешнее ПО должно получатьсписок ключей (то есть запущенныхкопий индикатора) и данные, к этой копии относящиеся. При удалении индикатора данные должны уничтожаться.
Пасхалочка для Алексея Иванникова:
Идентификация индикаторов
Пользователь
Сообщений: Регистрация: 30.01.2015
09.04.2018 19:39:43
Здравствуйте.
Вопрос скорее к разработчикам.
Есть индикатор, одновременно запущенный на несколшьких разных инструментах (или одинаковых), с разными или одинаковыми настройкками, на произвольных таймфреймах и т.п.
Необходимо:
Найти способ для каждой запущенной копии индикатора сгенерировать свой ключ (строка, число) для установления связи между этой конкретной копией индикатора и внешним ПО. Основная проблема - получение внешним ПО информации о закрытии индикатора (тем или иным способом), закрытии терминала и корректная работа при перезапуске индикатора (например в режиме связанных окон).
Допустимы любые быстрые способы - средства терминала, winapi и так далее. У меня не хватает фантазии пока.
Спасибо.
Пасхалочка для Алексея Иванникова:
Защита кода QLua от компрометации, Есть ли возможность исключить доступ к коду на QLua брокера и разработчиков Quik
Пользователь
Сообщений: Регистрация: 30.01.2015
09.04.2018 15:46:10
Инструмент, засовывающий любой скрипт луа вовнутрь dll давно написан. Рассказывать подробности не стану.
Пасхалочка для Алексея Иванникова:
Защита кода QLua от компрометации, Есть ли возможность исключить доступ к коду на QLua брокера и разработчиков Quik
то-есть, моя мысль состоит в том, чтобы спрятать написанный на Lua скрипт внутрь скомпилированной библиотеки, но при этом код останется тем же, какой можно напрямую запустить через диалог скриптов в Quik...
как бы это сделать по-человечески?...
ну собственно так оно и делается. Все возможности для этого в C API имеются.
если это будет необходимо, пишите, спрячу ваш готовый скрипт в dll, дело на пару минут.
Пасхалочка для Алексея Иванникова:
Защита кода QLua от компрометации, Есть ли возможность исключить доступ к коду на QLua брокера и разработчиков Quik
написал: если вы хотите большей надёжности, наиболее правильный путь это встраивание скрипта на луа в dll. Этим способом пользуюсь сам.
А можно поподробнее?... и как всё это прикручивается к Quik в конечном счёте.
есть такая штука - lua C Api.
позаолчет писать dll для луа скриптов.
в числе прочего можно создать функцию в длл и вызывать ее из скрипта. Можно также вызывать из длл функции скрипта.
ну а дальше - простор для фантазии...
Пасхалочка для Алексея Иванникова:
Защита кода QLua от компрометации, Есть ли возможность исключить доступ к коду на QLua брокера и разработчиков Quik
Пользователь
Сообщений: Регистрация: 30.01.2015
08.04.2018 21:27:26
Существуют декомпиляторы luac->lua.
Мое знакомство с некоторыми из них привело к осознанию, что никто не написал грамотного декомпилятора, который качественно восстанавливает текст скрипта из скопилированно варианта.
однако части скрипта можно увидеть прекрасно.
поэтому полагаться на компиляцию скрипта в luac вид можно условно.
если вы хотите большей надёжности, наиболее правильный путь это встраивание скрипта на луа в dll. Этим способом пользуюсь сам.
Пасхалочка для Алексея Иванникова:
Идентификатор графика
Пользователь
Сообщений: Регистрация: 30.01.2015
07.04.2018 21:56:08
Цитата
Алексей написал: Создана текущая таблица торгов с десятком выбранных инструментов. Она закреплена (в связке) с окном графика, так чтобы при выборе нужного инструмента менялся и график. Вопрос: можно ли реализовать возможность изменения идентификатора графика при смене инструмента? Необходимо для выполнения скриптов.
невозможно
Пасхалочка для Алексея Иванникова:
SetLabelParams
Пользователь
Сообщений: Регистрация: 30.01.2015
06.04.2018 13:44:00
Алексей Ч привел вам код индикатора, иллюстрирующий проблему отсутствия вызова ondestroy.
"Проверили у себя на вашем скрипте. Версия рабочего места 7.16.3. Проблема не воспроизвелась"
каким образом у вас не воспроизводится проблема - одному богу известно. Если ondestroy в режиме связанных окон не вызывается - вы не можете не получить размножение меток. Только или не пробовать ))
Я же изначально вам писал о проблеме, которая возникает при выставлении меток из скрипта. Если вызов setlabelparams приходится на момент перерисовки графика с требуемым идентификатором, то происходят непредсказуемые вещи. Метка может оаздвоитьмя, может не раздвоиться. Setlabelparams возвратит false, самочувствие дескриптора метки также нельзя предсказать
Пасхалочка для Алексея Иванникова:
какт просто определить число строк вLUA
Пользователь
Сообщений: Регистрация: 30.01.2015
05.04.2018 17:42:09
Пропустил параметр для gmatch
string.gmatch(f:read("*a"),"\n")
Пасхалочка для Алексея Иванникова:
какт просто определить число строк вLUA
Пользователь
Сообщений: Регистрация: 30.01.2015
05.04.2018 17:40:09
Навскидку:
f,i=io.open(file,"r"),0 for _ in string.gmatch(f:read("*a")) do i=i+1 end f:close()
Если из скрипта переустанавливать на графике скществующую метку, а в это время идёт перерисовка графика при смене инструмента, метка не только не переустанавливать я, но ещё и вовсе пропадает из таблиц терминала, делая невозможными любые последующие с ней действия.
Смена инструмента осуществляется при помощи настроек диаграммы? Можете выложить Ваш скрипт. На вопрос выше ответим позднее.
скрипт можно написать так.
создаем скриптом метку на графике с идентификатором xxx.
далее с периодичностью скажем в 100 миллисек ее перерисовываем посредством setlabelparams
все работает, проблем нет.
теперь любым способом из пользовательского интерфейса руками заставляем обновиться график с идентификатором xxx.
в части случаев (когда везёт) метка продолжает переустанавоиваться.
А вот если переустановка попала на момент перерисовки графика, там получается эффект непредсказуемый.
метка по своему номеру становится недоступной, setlabelparams возвращает false, изображение метки на диаграмме или остаётся или исчезает, непредсказуемо.
Пасхалочка для Алексея Иванникова:
Можно ли по графику определить таймфрейм этого графика?, Можно ли по графику определить таймфрейм этого графика?
Пользователь
Сообщений: Регистрация: 30.01.2015
03.04.2018 11:47:19
На текущий момент другого способа не наблюдается.
Впрочем, брать разницу между двумя произвольными соседними свечами тоже неправильно - между ними может быть промежуток более чем в длительность интервала (например, ночью)
Более надежно делать так: но и этот способ не гарантирует результат во всех случаях.
Пасхалочка для Алексея Иванникова:
Оповещения на индикаторы
Пользователь
Сообщений: Регистрация: 30.01.2015
02.04.2018 23:12:13
Да, можно. Сторонними средствами
Пасхалочка для Алексея Иванникова:
SetLabelParams
Пользователь
Сообщений: Регистрация: 30.01.2015
02.04.2018 18:27:34
Замечен такой эффект. Если из скрипта переустанавливать на графике скществующую метку, а в это время идёт перерисовка графика при смене инструмента, метка не только не переустанавливать я, но ещё и вовсе пропадает из таблиц терминала, делая невозможными любые последующие с ней действия.
это правильное поведение?
Пасхалочка для Алексея Иванникова:
SetLabelParams
Пользователь
Сообщений: Регистрация: 30.01.2015
02.04.2018 14:48:54
Здравствуйте.
Не могу понять, что происходит с метками в момент обновления окна в режиме связанных окон.
насколько я могу предположить, что после обновления окна идентификатор остается тем же и функция Setlabelparams должна метку найти и переставить. если запрос setlabelparams происходит в момент обновления окна, там может произойти что-то неясное и, как я думаю, происходит. Но что?
Каков должен быть алгоритм работы по перестановке метки из скрипта посредством setlabelparams? чтобы он работал в режиме связанных окон?
Напоминаю также о ошибке, заключающейся в отсутствии вызова ondestroy индикатора в том же режиме связанных окон. Это серьезная проблема - невозможно исполнить финализацию (закрыть процессы, удалить файлы, отвязаться от апишных дел и прочего)
Пасхалочка для Алексея Иванникова:
Объемы покупки / продажи на графике
Пользователь
Сообщений: Регистрация: 30.01.2015
02.04.2018 14:41:04
Андрей,
да, возможно.
Пасхалочка для Алексея Иванникова:
CreateDataSource return code
Пользователь
Сообщений: Регистрация: 30.01.2015
21.03.2018 13:41:01
Кстати, и это тоже.
приходится перед crrsyedatasource вызывать getsecurityinfo, чтобы проверять есть ли инструмент, да и это при запуске скрипта вместе с терминалом не помогает.
Пасхалочка для Алексея Иванникова:
CreateDataSource return code
Пользователь
Сообщений: Регистрация: 30.01.2015
19.03.2018 08:24:20
Здравствуйте.
Что обусловлено отсутствие колбеков от Createdate source при условии, что последний вернул код успеха? Эффект проявляется при запуске терминала с работающим скриптом.
Эффект никогда не проявляется при запуске скрипта при уже работающем терминале.
Пасхалочка для Алексея Иванникова:
Метки в новой версии 7.14, В новой версии изменились метки, где описание новых параметров?
Пользователь
Сообщений: Регистрация: 30.01.2015
16.03.2018 09:06:25
Цитата
Михаил Понамаренко написал: Здравствуйте! А моё пожелание уже не меняется уже более 10 лет. Возможность привязки метки к координатам окна диаграммы. Это позволит фиксировать надписи, например, к левому верхнему краю.
это не поможет фиксировать надписи у левого ВЕРХНЕГО края диаграммы, так как происходит постоянное масштабирование по вертикали и надписи будут либо спускаться вниз или уходить на верхний край.
длч решения такой задачи необходимо иметь механизм низкоуровневого рисования, как это например реализовано в программах теханализа и других более дружественных терминалах ( например метатрейдер)
этому пожеланию очень много лет, больше 10. Не делают, ведимо невозможно.
Пасхалочка для Алексея Иванникова:
OnChangeSettings
Пользователь
Сообщений: Регистрация: 30.01.2015
16.03.2018 06:55:05
Цитата
Sergey Gorokhov написал: , Михаил, не понятно какого ответа Вы ожидаете. Позиция уже была озвучена
Цитата
Sergey Gorokhov написал: это пожелание на доработку, которое мы можем предложить зарегистрировать.
Я уже писал - регистрируйте.
Вообще я в удивлении от происходящего.
Пасхалочка для Алексея Иванникова:
OnChangeSettings
Пользователь
Сообщений: Регистрация: 30.01.2015
16.03.2018 06:49:04
Даже в случае, когда на графике всего одна свеча, использовать этот колбек невозможно. Расчет индикатора может явно зависеть от выбранного таймфрейма, а при изменении этого таймфрейма индикатор об этом ничего не узнает и будет работать неправильно.
Пасхалочка для Алексея Иванникова:
OnChangeSettings
Пользователь
Сообщений: Регистрация: 30.01.2015
16.03.2018 06:42:51
Сергей.
А какой в этом смысл? какую полезность можно вынуть из этого колбека, который сигнализирует о начале полного пересчета только в половине случаев из всех возможных?
отлавливать перерасчет свечей необходимо не только при изменении параметров, но и при смене таймфрейма.
узнать о смене таймфрейма-то мы не можем: колбека на изменение таймфрейма нет.
Пасхалочка для Алексея Иванникова:
OnChangeSettings
Пользователь
Сообщений: Регистрация: 30.01.2015
16.03.2018 06:27:17
Цитата
Sergey Gorokhov написал: , Михаил, То что функция не срабатывает при изменении таймфрейма не значит что ее нельзя использовать. Да она не решает конкретно одну описанную задачу, но она и не должна ее решать согласно документации. А значит, это пожелание на доработку, которое мы можем предложить зарегистрировать.
Регистрируйте.
А сможете привести пример полезного использования этого колбека? Для чего его можно использовать?
Пасхалочка для Алексея Иванникова:
Как в LUA осуществить поиск файла в заданной папке с заданным именем ?
for f in io.popen ( string.format ( "dir \" %s \" \\*.csv /b" ,PATH)):lines() do
message (f)
end
Работоспособность будет зависеть от билда ОС: ненадежно. Лучше использовать готовую библиотеку lfs или самому написать расширение на С++
Пасхалочка для Алексея Иванникова:
OnChangeSettings
Пользователь
Сообщений: Регистрация: 30.01.2015
16.03.2018 06:08:46
Да, не указано. И я собственно именно об этом.
Я не могу придумать, как этот колбек вообще можно применить.
Как я понимаю, смысл этого колбека предполагался в отслеживании момента начала процедуры пересчета всех свечей в индикаторе, начиная с первой. Основное назначение - отличить начало пересчета от повторных расчетов первой свечи, если она единственная.
Но если этот колбек не вызывается при смене таймфрейма - его использовать для этой заявленной цели невозможно: таймфрейм сменился, полный перерасчет всех свечей начался, а колбека-то нет!
Пасхалочка для Алексея Иванникова:
OnChangeSettings
Пользователь
Сообщений: Регистрация: 30.01.2015
15.03.2018 17:38:18
Недавно был добавлен колбен OnChangeSettings
Посмотрел.
Или я чего-то не понял, или вы добавили его так, что он бесполезен
Во первых, он не вызывается при старте индикатора. Но это обойти еще можно
Главное - он не вызывается при смене таймфрейма, что приводит его полной бесполезности .
Или я неправ?
Пасхалочка для Алексея Иванникова:
понять демо или реальный qlua
Пользователь
Сообщений: Регистрация: 30.01.2015
14.03.2018 06:00:19
Цитата
Sergey Gorokhov написал: , Михаил, но IP адрес у нашего демо только один. Даже если речь не про наш демо, а про брокерский, можно проверить ip и на всякий случай еще порт IPPORT
Сергей.
причем тут ваш сервер?
речь идёт о способе отличить реальные торги от учебных в общем случае / у любого брокера, а не про количество учебных серверов у вас.
Пасхалочка для Алексея Иванникова:
понять демо или реальный qlua
Пользователь
Сообщений: Регистрация: 30.01.2015
14.03.2018 05:56:54
Цитата
Sergey Gorokhov написал: , Михаил, но IP адрес у нашего демо только один. Даже если речь не про наш демо, а про брокерский, можно проверить ip и на всякий случай еще порт IPPORT
Пасхалочка для Алексея Иванникова:
понять демо или реальный qlua
Пользователь
Сообщений: Регистрация: 30.01.2015
14.03.2018 05:13:20
Цитата
Sergey Gorokhov написал: Андрей , Здравствуйте, Самый надежный способ по IP адресу. Для этого используйте функцию getInfoParam с параметром IPADDRESS Подробнее в документации QLUA.chm глава "Сервисные функции", раздел "getInfoParam"
странный совет.
вот написал я скрипт и раздал его десяти разным людям. Скрипту хочется знать, запущен ли он на демо или на реальных торгах.
как скрипт, получив ip адрес, должен понять, демо это или нет? Брокеров куча, демонстрационных площадок тоже немало.
надо только добавить, что так можно делать только если часовой пояс вашего компьютера совпадает с часовым поясом биржи или Квик настроен на трансляцию времени в локальном поясном времени. В остальных случаях будет по прежнему несостыковка
Пасхалочка для Алексея Иванникова:
Реальная цена открытия позиции.
Пользователь
Сообщений: Регистрация: 30.01.2015
24.02.2018 16:04:58
Цитата
Андрей написал: Доброго времени суток. Хотелось бы узнать, как получить реальную цену открытия позиции, а не цену открытия позиции после клиринга ?
Т.е. что бы допустим, я запустил робота, прошел клиринг, а он смог бы узнать реальную цену открытия. или же вдруг на сервере произошла перезагрузка, терминал был выключен после запускаю все заново и робот смог бы опять подхватить реальную цену открытия. (интересует как срочный рынок, так и фондовый) и желательно без костылей вроде сохранения цены открытия в базе данных и прочего...
вы хотите то, чего не может быть в природе. Вы можете открывать позицию одной сделкой, несколькими сделками, увеличивать ее, уменьшать и так далее, все по разным ценам. Это множество цифр совершения сделок. Какую из них вы назовёте ценой открытия - никто не знает.
поэтому максимум что можно пробовать спросить у терминала это текущую себестоимость. Себестоимость тоже можно считать разными способами и не факт, что используемый в терминале способ будет тем, что нужен вам.
поэтому берите стамеску и строгайте "костыль"
Пасхалочка для Алексея Иванникова:
Получение значений из функции getClassSecurities по индексу переменной
Пользователь
Сообщений: Регистрация: 30.01.2015
24.02.2018 00:08:59
Цитата
Алексей написал: Подскажите мне балбесу,как из функции getClassSecurities взять к примеру первое значение ,проблема в том что переменная содержит запятые и поэтому выражение message(sec_list[1],1) выводит nil