Иногда бывает необходимо учесть в программе, что файл с которым собираетесь работать отсутствует, занят другой программой или пуст.
Для проверки наличия файла я использую функцию, которую сам когда-то нашел в сети, она возвращает размер файла в байтах, если файл существует и nil если не найдет его.
Проверить занят ли файл, а также проверить что он не пустой можно следующей функцией:
Все данные с файла C:\files\test.csv сохраняются в массив string_file, который будет глобальным и его можно использовать далее в main, например.
Основная часть программы:
Если файл C:\files\test.csv существует, то скрипт выведет размер файла.
Если открыт (например в excel), то укажет, что файл занят.
Если будет пустым, то получим соответствующий статус.
Скрипт:
github.com/morefinances/qlua/blob/main/status_file.lua
Что за древние кодировки?
Кодировка Windows-1251, иначе в терминале кириллицу не выдать сообщением.
Очень полезная инфа,
прямо пазл сложился при работе с занятыми файлами!
В первой функции запрос типа файла, это его содержимого или просто его названия?
И в первой и во второй функции происходит вызов самой себя? Не произойдёт ли зацикливание файла?
Не достаточно ли будет после открытия файла провести проверку #fale, чтобы определить его размер?
Если во второй функции открываем методом «а+» не произойдёт ли стирание содержимого файла?
> В первой функции запрос типа файла, это его содержимого или просто его названия?
Для вызова указываем наименование файла с путем.
>И в первой и во второй функции происходит вызов самой себя? Не произойдёт ли зацикливание файла?
В первой функции действительно есть вызов самой себя. Работает нормально, без зацикливания.
Во второй переименуйте функцию, если вас смущает. У меня она называлась FileStatusAndRead, но перед размещением решил поменять. А сейчас вижу, что используется одноименная переменная внутри.
> Не достаточно ли будет после открытия файла провести проверку #fale, чтобы определить его размер?
Попробуйте.
> Если во второй функции открываем методом «а+» не произойдёт ли стирание содержимого файла?
a+ как раз дополняет файл, не затирая предыдущую информацию. Изначально у меня еще в определенных условиях файл дополнялся строкой, но этот кусок я удалил, а формат открытия не поправил. Только чтение будет «r».
Про варианты открытия файла:
smart-lab.ru/blog/922044.php
В первом вопросе я имел ввиду необходимость данного условия: if type(file) == «string» then
------------------------проверка существования файла-----------------------
-------------------------------------------------------------------------------
function file_exists(name)
local f = io.open(name, «r»)
return f ~= nil and io.close(f)
end
короче Склифософский©
Когда-то давно использовал TsLab. Удобный наглядный интерфейс, бесплатный для теста, работа через «кубики», которые легко и быстро освоить, но через какое-то время стал упираться в различные его технические ограничения. В принципе подобный софт не плох для теста каких-то базовых стратегий на индикаторах, анализе фигур теханализа, различных формаций, отборе фильтров, поиску временных закономерностей.
Для начинающих это неплохой вариант быстро отфильтровать множество гипотез. И увидеть, что «грааля» только на индикаторах не построить. Хотя что-то с определенными поправками и «допусками» можно брать в качестве рабочих инструментов (я лично видел хороший действующий робот, который отлично себя чувствует и на истории и в жизни, выстроенный на нескольких скользящих, но там его очень опытный человек прописывал и подход был достаточно креативным).
Отказался от стороннего софта, т.к. во-первых мне нужно было анализировать тиковые данные и с таким подходом, который уже не уложить было в конструктор стратегий с их кубиками, а необходимо было прописывать более серьезную логику. И хоть в TsLab была предусмотрена возможность программировать (на C# кажется), но мне было проще уйти от самой оболочки и начать работать с историческими данными самостоятельно.
К тому же даже работая не на тиковых, а на минутных (и выше) стратегиях иногда TsLab мог пропускать сделки. Это проверялось даже самым простым Excel, где заложив логику стратегии в макрос я получал дублирующие сигналы для проверки. TsLab часть из них мог пропускать. И речь не шла о сложной перегруженной стратегии, например, а наоборот, очень простой и лаконичной. Уверен, что подобные вещи сейчас разработчики «пофиксили», но на тот момент это точно был для меня не вариант.
Сейчас стараюсь задействовать python, благо и визуализация легкая и быстрая, и библиотек удобных много, и быстродействие меня устраивает.
Сегодняшний пример визуализации работы робота в Quik
Такого плана например:
И удобно для сравнения сразу матрицу различных результатов, например, выводить.
В квике есть свои плюсы, но для меня это, прежде всего, торговый терминал с возможностью запуска скриптов. Причем сами разработчики делают всё, чтобы он воспринимался исключительно как ПО для работы только внутри торгового дня (сколько лет пользователи просят, чтобы элементарные вещи были, например: история заявок и сделок).
С историческими данными здесь могут быть проблемы (начиная от того, что нужно проверять на пропуски и перезаказывать при их наличии, заканчивая глубиной истории). По моим брокерам обычно исторические данные в районе 3-3,5К свечей, максимум порядка 7К если графики давно открыты и данные «накапливались». Лично мне этого было бы мало для теста.
Мне рассказывали про людей, которые тестировали стратегии через терминал на qlua, но, как я понимаю, они обрабатывали csv файлы с историей в этом случае, чтобы не зависеть от «причуд» терминала и брокера. Но мне это проще (и быстрее) делать через тот же python. А исторические данные нужной глубины пока вполне доступны и через сайт Финама, и по iss Московской Биржи.
forum.quik.ru/forum1/topic2895/
forum.quik.ru/forum1/topic4372/
Было бы хотя бы 2-3 крупных вендора и между ними конкуренция по терминалам, то и квик был бы совсем другим и среду для программистов сделали бы удобной, в т.ч. для поиска багов. А так здесь (в программировании на qlua) либо любители, которые в силу энтузиазма готовы закрывать глаза и со многим мериться, либо матерые профессионалы, которых разными неудобствами не удивить.