Блог им. 3Qu

Связь Lua -> ваша программа. RAM Disk.

    • 11 мая 2021, 21:33
    • |
    • 3Qu
  • Еще
Я, вроде, уже писал подобный пост. Давно. Но, новое — хорошо забытое старое.
Очень многие неплохо владеют основами программирования, но написать DLL, связь через TCP или что-то другое для экспорта-импорта в Lua — это достаточно сложная процедура, и требует дополнительных знаний и много времени. Однако, если такую связь как-то по простому реализовать, то решились бы многие проблемы обмена данными с C#, Python и другими средами, и не надо вникать во всяческие C-API и прочие премудрости.
Однако, есть достаточно простой и доступный способ — обмен данными через файлы. Например, так:
1. программа Lua пишет строку (строки) данных в формате CSV в файл data.csv,
2. программа Lua создает пустой файл flag.ddd,
3. ваша программа проверяет наличие файла flag.ddd, что означает, что данные готовы к чтению,
4. при наличии файла flag.ddd программа читает данные файла data.csv и удаляет файл flag.ddd,
5. программа Lua проверяет наличие файла flag.ddd, и если этот файл отсутствует пишет строку (строки) данных в файл data.csv (см. п.1)
При обратном обмене происходит все тоже самое, только имена файлов другие.
Вот и весь обмен данными вашей программы с Lua.
Да, скажите вы, но файловый обмен оч медленный.
Да, это так, но не совсем. Мы можем организовать в памяти компьютера небольшой диск (RAM Disk), скажем, мегабайт 20, или больше, если вам недостаточно. И обмен файлами станет оч быстрым. По тестам на хорошем компьютере скорость обмена с RAM Disk — где-то до 1-2 ГБ/c.
Одно из решений для организации диска в памяти компьютера: официальный сайт AMD - http://www.radeonramdisk.com/software_downloads.php, качаем бесплатную версию, устанавливаем, выделяем нужный объем памяти под сам RAM Disk. Работаем. Все.
Есть и другие варианты RAM дисков от других разработчиков, но это уже сами найдете.

PS Забыл добавить. Флешка с USB 3.х, если у вас есть соответствующий порт,  даст примерно аналогичную скорость, и тогда делать вообще ничего не надо.
  • обсудить на форуме:
  • Quik Lua
4.4К | ★18
29 комментариев
Нахера? Когда есть API у брокеров. 
avatar
Dancing Orange Hyena, уже ответил в тексте топика — многие работают с Quik-Lua, а с API, даже если более-менее знаешь программирование, еще и разбираться надо, и далеко не всем это доступно. А с файловым обменом это делается в три прихлопа. Простой, и, главное, общедоступный способ обмена данными.
avatar
3Qu, согласен на 100% (если это не 10-100 раз в секунду)

Но все же кошернее читать/писать логи, чем создавать и удалять файлы. Чуть сложнее, зато проще ашипки отлавливать.

С уважением
Мальчик Buybuy, я часто использую БД SQLite в памяти. Точнее, почти в памяти — при соответствующих настройках pragma БД становится почти в памяти. Скорость запись/чтение строки 5 мс.
avatar
Dancing Orange Hyena, дайте пример нормального API.
Я пока слышал только у тинькова, но там это чудовищно медленно и криво.
Быстрее через Квик.
Это не считая в целом ограниченности торговли через Тиньков (малое кол-во инструментов)
avatar
Дедал,  https://alor.dev/docs
avatar
Dancing Orange Hyena, круто! Надо будет посмотреть, это намного лучше костыльных подключений через квик
avatar
Dancing Orange Hyena,  api же есть вроде только у алор и тинькова или я ошибаюсь.
avatar
ANTI_Finsov, у финама транзак API.
avatar
Спасибо, я как раз передачу данных через файлы реализовываю как пилотный проект. Только я смотрю в строну tri-файлов. Нашел в сети коннектор 10-ти летней давности, там excel срастили с квиком. Довольно-таки бодрая штукенция.
avatar
Устройство RAM диска на своём ПК — это своего рода диверсия.
Специально для подобных целей в Windows предусмотрены «Файлы данных, проецируемые в память». Джеффри Рихтер, Кристоф Назар «Windows via C/C++. Программирование на языке Visual C++» стр.550. Или Jeffrey Richter and Christophe Nasarre «Windows via C/C++. 5 ed» Chapter 17: Memory-Mapped Files.
Для конкурентной записи в одну область файла из разных потоков нужна синхронизация критическими секциями. Из разных процессов — мьютексами.
Если запись в разные области — синхронизация не нужна.
Rostislav Kudryashov, у нас уже есть мьютекс — файл flag.ddd. Именно эту роль он и выполняет. Вы что-то недочитали.)
avatar
Почему бы не запихнуть программу в длл? Или она не на с++?

Или сокеты не проще?
avatar
:), либо вы шутите, либо что-то не понимаете про SQLite.
avatar
Отличный вариант для начала)). Кстати скорость обмена приемлимая. В пределах 1 сек происходит запись файла в qlua, получение данных из файла, парсинг, обсчёт, выгрузка данных в файл, загрузка в qlua и выставление заявки. Причем без использования ram диска. Для неторопливого бота вполне приемлимо. Единственное если есть какие-то коитичные данные, например состояние бота и его параметров, то лучше дублировать запись навсякий случай по мимо ram. Ещё как вариант рассматриваю возможность использования SQLite in memory. Вроде тоже должна взлететь, и это также не сильно сложно.
avatar
zam, не только в memory. Уже писал в комменте, что при соответствующих настройках pragma SQLite дает скорость сравнимую с БД в memory.
Имеем и файл БД, и скорость. Но здесь для связи уже DLL нужна.
avatar
Вроде есть библиотека для lua по SQLite. Правда не знаю работает ли она в Квике. Если не работает, то конечно печально и тогда нужно самому dll делать. Тогда конечно для начинающих это не катит)
avatar
zam, я пробовал какие-то либы для Луа, еще под 3-ку.  Не ставятся они на комп. В причинах не разбирался. Проще ДЛЛ написать. Да и сами Луа либы никаких проблем в целом не решают.
avatar
3Qu, Понятно. Печалька ((
avatar
zam, Собственно, никакой печальки.) У меня вся система в ДЛЛ. Связь с Луа малая часть, всего несколько функций. Непосредственно, связь Луа -> БД и не оч нужна.
avatar
3Qu, Да за Вас то печальки нет) просто если уже человек сам длл может написать, то уже у него нет печали с квиком))
avatar
zam, это, да. Под С++ шаблон ДЛЛ под VC 2017 для связи с Луа есть в моих топиках. Используйте, если с С++ работаете.
avatar
помнится в студенческую бытность в начале нулевых в вычислительном центре давали 5 Мб на диске под файлы (всякие там паскалики и прочая ересть), а в кваку хотелось поиграть… так вот, играть в первую до максимум урезанную кваку (архив около 10 Мб!!!) приходилось заливать на RAM и играть, играть, играть ))))
lua может работать с named pipe? 
avatar
bwc, из коробки, нет. Слышал, что, вроде, есть библиотека. Но достоверно не знаю.
В принципе, Ram disk, это примерно тоже самое.
Для современных компов проще USB 3.x флешки уже ничего и не надо придумывать.
avatar
3Qu, идея в том, чтобы снаружи создать named pipe и в lua открыть его как обычный файл с именем "\\?\%my-pipe%", т. е. без дополнительных модулей.
На счет файлов — есть некоторые опасения из-за возможной буферизации ввода-вывода.
Flash — не очень из-за ограниченного ресурса записи.
avatar
Нахрена делать очередной велосипед?
Нужен доступ к Quik из С# есть github.com/finsight/QUIKSharp
которую уже куча народу использует
Нужен доступ из Python есть новая => github.com/cia76/QuikPy  которая основана на проекте QUIKSharp
avatar
Sergeyka, есть ещё на Java тоже самое.
Я пользовался.
В целом — работает. Но медленно. Издержки где-то по 20мс на вызов. И ещё не масштабируется, ТК необходимо синхронизировать вызовы в 1 поток.

Кстати рекомендую Java, как то это стандарт на фин рынке. Почти все библиотеки Java. Например QuikFixJ. Плюс в Java намного больше всего для низкоуровневой оптимизации
avatar

Читайте на SMART-LAB:
Облигации на пальцах: как устроен главный инструмент инвестора
Если у вас все еще нет облигаций в портфеле — вы либо неверно инвестируете, либо не совсем понимаете, зачем они нужны и по какому принципу...
Фото
Каждый инвестор желает знать, где сидит доходность? Взгляд Goldman Sachs на инвестиции до конца года
Если вы инвестируете свой капитал на фондовом рынке, то каждый год легко может принести вам как большие потери, так и несметные богатства....
Опыт Х5: Как меняются программы лояльности в ритейле
Наш управляющий директор «Х5 Клиентский опыт» Михаил Ярцев в интервью Ведомостям подробно рассказал, как в текущих реалиях меняется поведение...
Фото
Башнефть: есть шанс на переоценку, но нужно запастись терпением. Прогноз сошелся с фактом в высокой точностью, ищем инвест идею
Башнефть отчиталась по МСФО за 2025 год — внимание, квартальных отчетов в прошлом году не было вообще! Традицицинно сравниваем прогноз...

теги блога 3Qu

....все тэги



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