Взаимодействие с LUA от външен софтуер. (Страница 1 от 2)

Страници един 2 Напред

За да публикувате отговор, трябва да влезете или да се регистрирате

Мнения 1 до 25 от 46

1 Тема от ubase 2013-02-11 22:11:05 (2013-02-11 22:37:38, редактирано от ubase)

  • ubase
  • Член
  • Неактивен
  • Регистриран: 2013-02-11
  • Публикации: 31

Тема: Взаимодействие с LUA от външен софтуер.

С Lua разработчиците Quick са очевидно прекалено умни. Не просто да излагате Quik API и да пишете на какъвто език или среда искате. Дали в Java или VBScript, но дори в същата Lua. И едва ли е възможно да се напише сложен MTS в Lua. Е, поне е много трудно.
Като цяло не познавам Луа и не ми се иска да го науча, но ще трябва да си взаимодействам с него.
Така че имаме MTS, написан на C # за терминал с пълен API. Животът ви принуждава постепенно да преминете към използването на Quick.
Тук и Луа пристигна навреме.
Първоначално възникна идеята да се напише интерфейс DLL и изглежда, че всички проблеми са решени.
Включително тук - Извикване на C ++ DLL от LUA взаимодействието на Lua с dll е добре описано. Но, за съжаление, само един начин - извикване на dll функции от Lua. И това решава само един проблем - експортиране на терминални събития чрез DLL в нашата програма.
Между другото, решението също не е много лесно, т.к. за събитието Lua, нашата програма вече трябва да генерира своето събитие и едва сега можем да получим данни.
Е, да кажем, че по някакъв начин сме решили този проблем. Но програмата трябва самостоятелно да изиска някои данни от терминала, например, да види приложението - как е там. И как?
Оптималното решение би било да включите скрипта Lua във вашата програма C # и да го стартирате от програмата и всички функции и променливи на Lua са достъпни за нас без ограничения. И тогава DLL изобщо не е необходим. lua_open (). и напред.
В стандартна среда това се случва в даден момент. Но QLUA всъщност не е LUA. И как да го стартирате в Quick?

2 Отговор от администратор 2013-02-11 23:05:40

  • администратор
  • Администратор
  • Неактивен
  • Регистриран: 2012-09-21
  • Публикации: 218

Re: Взаимодействие с LUA от външен софтуер.

Мисля, че трябва да се опитате да промените мирогледа.
Сега имате готов MTS, с който искате да управлявате терминал за търговия, като го използвате всъщност само като транспорт за получаване на данни и изпращане на транзакции на борсата.

Lua в QUIK предоставя мощен модел на събитие, при който самият терминал (или по-скоро събитията, възникващи на борсата) са контролни сигнали за MTS. Например не е нужно да проверявате „какво има с приложението“. Достатъчно е да напишете манипулатор OnOrder и той ще бъде извикан по време на поставянето, по време на изпълнението или оттеглянето на поръчката. Тези. не е необходимо да проверявате състоянието на приложението, достатъчно е да обработите сигнала за промяната в състоянието на това приложение, това е всичко.

Разбирам, че това изисква усилия за преработване на съществуващия MTS, освен това често изисква промяна в собствения възглед за архитектурата на изграждането на система. Но все пак съм убеден, че такъв модел на събитие отваря значително повече възможности и дава повече гъвкавост. Просто се опитайте да поставите "на преден план" не вашия MTS, който работи според определен строго детерминиран алгоритъм, а QUIK, който генерира различни сигнали за вас, които от своя страна вече обработвате в MTS на всеки език (а Lua е много добре тук), приемане на вземане на решения и извършване на каквито и да е действия: поставяне на нови поръчки, отмяна на тези с активни поръчки или просто изчакване на следващите сигнали.

Куп Lua и C # е напълно възможно да се организират.

Включително тук - Обаждането на DLL в C ++ от LUA добре описва взаимодействието на Lua с dll. Но, за съжаление, само един начин - извикване на dll функции от Lua. И това решава само един проблем - експортиране на терминални събития чрез DLL в нашата програма.

Намеквате ли, че би било хубаво да добавите описание на извикване на функции на Lua от външен dll? Страхотна идея, благодаря. Със сигурност ще добавя. Въпреки че в мрежата има много материали, като цяло не е трудно да се намери това.

3 Отговор от ubase 2013-02-12 00:14:56

  • ubase
  • Член
  • Неактивен
  • Регистриран: 2013-02-11
  • Публикации: 31

Re: Взаимодействие с LUA от външен софтуер.

Мисля, че трябва да се опитате да промените мирогледа.
Сега имате готов MTS, с който искате да управлявате терминал за търговия, като го използвате всъщност само като транспорт за получаване на данни и изпращане на транзакции на борсата.

Разбирам, че това изисква усилия за преработване на съществуващия MTS, освен това често изисква промяна в собствения възглед за архитектурата на изграждането на система. Но все пак съм убеден, че такъв модел на събитие отваря значително повече възможности и дава повече гъвкавост. Просто се опитайте да поставите "на преден план" не вашия MTS, който работи според определен строго детерминиран алгоритъм, а QUIK, който генерира различни сигнали за вас, които от своя страна вече обработвате в MTS на всеки език (и Lua е много добре тук), приемане на вземане на решения и извършване на каквито и да е действия: поставяне на нови поръчки, отмяна на тези с активни поръчки или просто изчакване на следващите сигнали.

Изобщо не съм против Луа. Но защо да променим разработения обектно-ориентиран език и среда за разработка (било то C ++, C # или VB.NET) за нещо подобно на C? Предлагате ли всичко това без ООП? Като цяло това е невъзможно.
Lua е добър скриптов език, заема собствена ниша, но защо трябва да пишете сложни програми на него.

Lua в QUIK предоставя мощен модел на събития, при който самият терминал (или по-скоро събитията, възникващи на борсата) са контролни сигнали за MTS. Например не е нужно да проверявате „какво има с приложението“. Достатъчно е да напишете манипулатор OnOrder и той ще бъде извикан по време на поставянето, по време на изпълнението или оттеглянето на поръчката. Тези. не е необходимо да проверявате състоянието на приложението, достатъчно е да обработите сигнала за промяната в състоянието на това приложение, това е всичко.

Всичко е така разбира се. Нека проверим нещо друго, печалба за позиция, например, или време за отваряне, търгувайки на ценна книга. Нуждаем се от много информация, когато имаме нужда от нея, а не през цялото време. Трябва да има минимум процесори и само да ги напрягате, за да получите информацията, от която наистина се нуждаете. И преди да подадете поръчка, проверете дали продължава търговията на хартия или вземете текущата цена и разпространение, защо ни е необходима през цялото време.

Куп Lua и C # е напълно възможно да се организират.

Да, в Интернет има библиотеки. Засега всичко е ясно. Стандартната Lua се изпълнява изцяло от C #. Този скрипт ще се изпълнява в Quick като включване в C код от C #. Main беше изпълнен, данните бяха взети и вече не са необходими. Самата Lua не на последно място е предназначена за това, а не за автономна работа. Въпросът е как да пъхнете скрипта в бързата машина и да го стартирате отвън.

Включително тук - Обаждането на DLL в C ++ от LUA добре описва взаимодействието на Lua с dll. Но, за съжаление, само един начин - извикване на dll функции от Lua. И това решава само един проблем - експортиране на терминални събития чрез DLL в нашата програма.

Намеквате ли, че би било хубаво да добавите описание на извикване на функции на Lua от външен dll? Страхотна идея, благодаря. Със сигурност ще добавя. Въпреки че в мрежата има много материали, като цяло това не е трудно да се намери.

Благодаря ви, би било чудесно. В интернет наистина има много материали, но срещнах обаждания само от включения код чрез C API Това е от документацията -

Тази глава разглежда Lua C API. С този набор от C функции, програмата хост може да осъществи достъп до средата и функционалността на Lua. Всички API функции и съответните типове и константи са описани в заглавния файл lua.h. http://www.lua.ru/doc/3.html

Ако това можеше да се реализира в Quick, нямаше да има цена. Отново трябва да успеете да стартирате скрипта отвън на бързата машина.