Блог им. morefinances

Qlua: статус файла.

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

Для проверки наличия файла я использую функцию, которую сам когда-то нашел в сети, она возвращает размер файла в байтах, если файл существует и nil если не найдет его.

Qlua: статус файла.

Проверить занят ли файл, а также проверить что он не пустой можно следующей функцией:
Qlua: статус файла.

Все данные с файла C:\files\test.csv сохраняются в массив string_file, который будет глобальным и его можно использовать далее в main, например.

Основная часть программы:
Qlua: статус файла.


Если файл C:\files\test.csv существует, то скрипт выведет размер файла.
Если открыт (например в excel), то укажет, что файл занят.
Если будет пустым, то получим соответствующий статус.

Скрипт: github.com/morefinances/qlua/blob/main/status_file.lua
  • обсудить на форуме:
  • Quik Lua
★2
23 комментария
что-то какие кракозябры в коде на гите.
Что за древние кодировки?
avatar
DrManhattan, нажмите в github на кнопку «скачать файл» (справа). После чего нужно открыть файл в Notepad++. Всё должно нормально отобразиться.

Кодировка Windows-1251, иначе в терминале кириллицу не выдать сообщением.
avatar
alfacentavra, спасибо!
Очень полезная инфа,
прямо пазл сложился при работе с занятыми файлами!
avatar
alfacentavra, здравствуйте. Огромное спасибо. Есть несколько вопросов.
В первой функции запрос типа файла, это его содержимого или просто его названия?
И в первой и во второй функции происходит вызов самой себя? Не произойдёт ли зацикливание файла?
Не достаточно ли будет после открытия файла провести проверку #fale, чтобы определить его размер?
Если во второй функции открываем методом «а+» не произойдёт ли стирание содержимого файла?
avatar
Олег Леликов, добрый день.

> В первой функции запрос типа файла, это его содержимого или просто его названия?
Для вызова указываем наименование файла с путем.

>И в первой и во второй функции происходит вызов самой себя? Не произойдёт ли зацикливание файла?
В первой функции действительно есть вызов самой себя. Работает нормально, без зацикливания.
Во второй переименуйте функцию, если вас смущает. У меня она называлась FileStatusAndRead, но перед размещением решил поменять. А сейчас вижу, что используется одноименная переменная внутри.

> Не достаточно ли будет после открытия файла провести проверку #fale, чтобы определить его размер?
Попробуйте.

> Если во второй функции открываем методом «а+» не произойдёт ли стирание содержимого файла?
a+ как раз дополняет файл, не затирая предыдущую информацию. Изначально у меня еще в определенных условиях файл дополнялся строкой, но этот кусок я удалил, а формат открытия не поправил. Только чтение будет «r».

Про варианты открытия файла: 
smart-lab.ru/blog/922044.php
avatar
Спасибо. Да, по «а+» — дополнение, по «w» — стирание и новая запись.
В первом вопросе я имел ввиду необходимость данного условия: if type(file) == «string» then
avatar
Олег, это проверка что наименование file является строкой.
avatar
-------------------------------------------------------------------------------
------------------------проверка существования файла-----------------------
-------------------------------------------------------------------------------
function file_exists(name)
   local f = io.open(name, «r»)
   return f ~= nil and io.close(f)
end

короче Склифософский©

avatar
Cubigator, спасибо!
avatar
alfacentavra, Скажите пожалуйста какими способами вы пользуетесь для тестирования торговых стратегий?
avatar
Cubigator, пишу под себя модули для теста на истории.

Когда-то давно использовал TsLab. Удобный наглядный интерфейс, бесплатный для теста, работа через «кубики», которые легко и быстро освоить, но через какое-то время стал упираться в различные его технические ограничения. В принципе подобный софт не плох для теста каких-то базовых стратегий на индикаторах, анализе фигур теханализа, различных формаций, отборе фильтров, поиску временных закономерностей.

Для начинающих это неплохой вариант быстро отфильтровать множество гипотез. И увидеть, что «грааля» только на индикаторах не построить. Хотя что-то с определенными поправками и «допусками» можно брать в качестве рабочих инструментов (я лично видел хороший действующий робот, который отлично себя чувствует и на истории и в жизни, выстроенный на нескольких скользящих, но там его очень опытный человек прописывал и подход был достаточно креативным).

Отказался от стороннего софта, т.к. во-первых мне нужно было анализировать тиковые данные и с таким подходом, который уже не уложить было в конструктор стратегий с их кубиками, а необходимо было прописывать более серьезную логику. И хоть в TsLab была предусмотрена возможность программировать (на C# кажется), но мне было проще уйти от самой оболочки и начать работать с историческими данными самостоятельно.

К тому же даже работая не на тиковых, а на минутных (и выше) стратегиях иногда TsLab мог пропускать сделки. Это проверялось даже самым простым Excel, где заложив логику стратегии в макрос я получал дублирующие сигналы для проверки. TsLab часть из них мог пропускать. И речь не шла о сложной перегруженной стратегии, например, а наоборот, очень простой и лаконичной. Уверен, что подобные вещи сейчас разработчики «пофиксили», но на тот момент это точно был для меня не вариант.

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

avatar
alfacentavra, Как раз с визуализацией в pyton у меня возникли проблемы. Я не успел разобраться с matplotlib (Вы об этой библиотеке говорили?) когда мой амер брокер в 20 году забанил все аки из России, и интерес у меня к этому пропал. Зато в Quik очень просто визуализировать сделки. Одна проблема ограничение на 65к свечек. Приходится тестировать кусками. И еще отсутствие исторических данных для Quik. (найти нигде не могу)
Сегодняшний пример визуализации работы робота в Quik

avatar
Cubigator, да matplotlib.pyplot умеет в разных вариациях графики рисовать.
Такого плана например:






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


В квике есть свои плюсы, но для меня это, прежде всего, торговый терминал с возможностью запуска скриптов. Причем сами разработчики делают всё, чтобы он воспринимался исключительно как ПО для работы только внутри торгового дня (сколько лет пользователи просят, чтобы элементарные вещи были, например: история заявок и сделок).

С историческими данными здесь могут быть проблемы (начиная от того, что нужно проверять на пропуски и перезаказывать при их наличии, заканчивая глубиной истории). По моим брокерам обычно исторические данные в районе 3-3,5К свечей, максимум порядка 7К если графики давно открыты и данные «накапливались». Лично мне этого было бы мало для теста.

Мне рассказывали про людей, которые тестировали стратегии через терминал на qlua, но, как я понимаю, они обрабатывали csv файлы с историей в этом случае, чтобы не зависеть от «причуд» терминала и брокера. Но мне это проще (и быстрее) делать через тот же python. А исторические данные нужной глубины пока вполне доступны и через сайт Финама, и по iss Московской Биржи.
avatar
alfacentavra, Ограничение 3000 свечей в графике Quik было много лет назад. Сейчас 65000, но и этого мало. На минутка это примерно три месяца.
avatar
Cubigator, я перед отправкой ответа проверил специально в терминале. У меня около 3-3.5К, исключение по графикам, которые уже давно использую. Но допускаю, что где-то есть опция дозагрузки более глубокой истории.
avatar
alfacentavra, нет загрузить с сервера больше 3к нельзя, только накопленная собственноручно история может дать до 65к свечей. И что интересно, ни у брокера, ни у разработчиков Quik исторических данных нет.
avatar
Cubigator, они есть у биржи, но уже платно. 
avatar
alfacentavra, Что есть? Файлы в формате TXT,CSV? Или dat файлы в формате Quik?
avatar
Cubigator, xml и csv
avatar
Cubigator, проверил на форуме. Все что более 3К свечей это накопленная вами (открытым графиком) история, которая при перезаказе данных легко может слететь:

forum.quik.ru/forum1/topic2895/

forum.quik.ru/forum1/topic4372/
avatar
В mql5 классно, проход теста последовательно построчно по всему коду с переходами в другие файлы и функции. Здесь же, после отказа от декоды, наверное, ничего нет. Приходится переодически message ставить для хоть какого-то контроля хода.
avatar
Олег Леликов, либо использовать дополнительно PrintDbgStr, либо вывод логов в файл. А так да очень «не фрэндли».
Было бы хотя бы 2-3 крупных вендора и между ними конкуренция по терминалам, то и квик был бы совсем другим и среду для программистов сделали бы удобной, в т.ч. для поиска багов. А так здесь (в программировании на qlua) либо любители, которые в силу энтузиазма готовы закрывать глаза и со многим мериться, либо матерые профессионалы, которых разными неудобствами не удивить.
avatar
alfacentavra, полностью с вами согласен. Разработчикам почему-то оказывается не нужным програмное обеспечение quik.
avatar

теги блога alfacentavra

....все тэги



UPDONW
Новый дизайн