Блог им. 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.7К | ★4
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

Читайте на SMART-LAB:
Фото
Опять о дефолтах ВДО
Только закончились Агродом и СибАвтоТранс, тут же начался СОБИ-Лизинг. Вчера ЛК сообщила представителю владельцев облигаций, что полноценно...
Фото
Идея от аналитиков БКС: облигации Полипласта с доходом до 23% за год
Полипласт в среду, 20 мая, будет собирать книгу заявок на биржевые рублевые облигации серии П02-БО-16 со сроком обращения три года (1080 дней)....
Фото
Есть ли шансы на дивиденды Газпрома в 2026–2027
Игорь Галактионов Последний раз Газпром выплачивал инвесторам дивиденды в 2022 году. После рекордных выплат в размере 51,03 руб. на акцию...
Фото
Сети. Кто сейчас самый дешевый? Сводный пост по сетевым компаниям по отчетам РСБУ за Q1 26г.
Введение Россети Центр Россети Ленэнерго Россети Московский регион Россети Волга Сводные таблицы Введение Все...

теги блога alfacentavra

....все тэги



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