Я, вроде, уже писал подобный пост. Давно. Но, новое — хорошо забытое старое.
Очень многие неплохо владеют основами программирования, но написать 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.х, если у вас есть соответствующий порт, даст примерно аналогичную скорость, и тогда делать вообще ничего не надо.
Но все же кошернее читать/писать логи, чем создавать и удалять файлы. Чуть сложнее, зато проще ашипки отлавливать.
С уважением
Я пока слышал только у тинькова, но там это чудовищно медленно и криво.
Быстрее через Квик.
Это не считая в целом ограниченности торговли через Тиньков (малое кол-во инструментов)
Специально для подобных целей в Windows предусмотрены «Файлы данных, проецируемые в память». Джеффри Рихтер, Кристоф Назар «Windows via C/C++. Программирование на языке Visual C++» стр.550. Или Jeffrey Richter and Christophe Nasarre «Windows via C/C++. 5 ed» Chapter 17: Memory-Mapped Files.
Для конкурентной записи в одну область файла из разных потоков нужна синхронизация критическими секциями. Из разных процессов — мьютексами.
Если запись в разные области — синхронизация не нужна.
Или сокеты не проще?
Имеем и файл БД, и скорость. Но здесь для связи уже DLL нужна.
В принципе, Ram disk, это примерно тоже самое.
Для современных компов проще USB 3.x флешки уже ничего и не надо придумывать.
На счет файлов — есть некоторые опасения из-за возможной буферизации ввода-вывода.
Flash — не очень из-за ограниченного ресурса записи.
Нужен доступ к Quik из С# есть github.com/finsight/QUIKSharp
которую уже куча народу использует
Нужен доступ из Python есть новая => github.com/cia76/QuikPy которая основана на проекте QUIKSharp
Я пользовался.
В целом — работает. Но медленно. Издержки где-то по 20мс на вызов. И ещё не масштабируется, ТК необходимо синхронизировать вызовы в 1 поток.
Кстати рекомендую Java, как то это стандарт на фин рынке. Почти все библиотеки Java. Например QuikFixJ. Плюс в Java намного больше всего для низкоуровневой оптимизации