Артем (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Особенности получения значений параметров через getParamEx, Особенности получения значений параметров на примере NUMTRADES через функцию getParamEx
 
Param -  только текущее значение параметра на момент среза.
AllTrade - история сделок.

Понятно, спасибо!
Особенности получения значений параметров через getParamEx, Особенности получения значений параметров на примере NUMTRADES через функцию getParamEx
 
Добрый день!

Посредством функции getParamEx из onParam получаем значение параметра NUMNRADES.

Код:
Код
////////////////////////////////////////////////////////////////
/// \brief forLua_OnParam
/// \param L
/// \return
///
static int forLua_OnParam(lua_State* L){
    
    const char *aC = NULL;
    size_t argClassLen = 0;
    const char *aS = NULL;
    size_t argSecLen = 0;
    aC = luaL_checklstring(L, 1, &argClassLen);
    aS = luaL_checklstring(L, 2, &argSecLen);

    if (strcmp(aC, "TQBR") == 0 && strcmp(aS, "SBER") == 0)
    {
        lua_settop(L, 0);
        lua_pushstring(L, aC);
        lua_setglobal(L, "aC");
        lua_settop(L, 0);
        lua_pushstring(L, aS);
        lua_setglobal(L, "aS");

            lua_settop(L, 0);
            lua_getfield(L, LUA_GLOBALSINDEX, "getParamEx");
            lua_getglobal(L, "aC");
            lua_getglobal(L, "aS");
            lua_pushstring(L,"NUMTRADES");
            lua_pcall(L, 3, 1, 0);

            if (lua_istable(L, -1)){

                lua_pushstring(L, "param_value"); // поместить ключ на стек
                lua_rawget(L, -2);
                int test = lua_tointeger(L, -1);
                lua_pop(L, 1);
//РЕЗУЛЬТАТ
lua_getglobal(L, "PrintDbgStr");
lua_pushinteger(L, test);
lua_tostring(L,-1);
lua_pcall(L, 1, 0, 0);
            }
    }
    return 0;
}

Результаты:
Код
№   Debug   Print
1.    [8464]    32260
2.    [8464]    32260
3.    [8464]    32260
4.    [8464]    32261
5.    [8464]    32262
6.    [8464]    32263
7.    [8464]    32265
8.    [8464]    32266
9.    [8464]    32271

Если с повторяющимися значениями в строках 1,2,3 еще как-то понятно.

То что значит скачек значений в 7,8 и 8,9 строках?

Значит ли это, что я не смогу по значениям параметров из getParamEx через onParam получить ленту сделок соответствующую (по очередности и полноте)таблице обезличенных сделок через OnAllTrade?
Взаимодействие OLua и Lua под Виндой
 
Если я еще совсем не рехнулся :))), то при запуске Lua-скрипта в Quik (QLua) мы создаем отдельный main поток.
Если же мы обращаемся к функциям обратного вызова, то они исполняются в основном потоке Quik. Таким образом любая математика и т.д. в callback - это тормоз всего Quik.(больше никаких потоков вы не создадите в QLua) Это же в руководстве написано, вроде. Но и у main тоже есть предел памяти :))) Создаем "утечку" и Quik слетает.
Оптимально (ИМХО) получаем данные с Quik от функций обратного вызова и в очередь  MMF(буфер), в main же потоке можно реализовать "прием" обратной связи(те же заявки можно кидать вместо trans2QuikAPI) и передачу  CraateDataSource(для теста как раз в оффлайне пойдет с данных в Quik около 5 000 свечек по каждому ТФ, или всех тиков за сутки). А обработку данных на чем угодно реализуйте.
Изменения в добавлении и запуске Lua скриптов с обновлением версии QUIK, Подключение dll через добавление и запуск Lua скрипта
 
Цитата
Michael Bulychev написал:
Добрый день.
Считаем что 1.dll и 2.dll лежать в одном каталоге
в 1.dll должен присутствовать код, который делает примерно следующее (без обработки ошибок):
1.
Код
  bool getDllPath(char  * out_path, size_t max_size)
{
    char path[MAX_PATH]  =  {};
    HMODULE hm  =  NULL;

     if ( GetModuleHandleEx( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS  |  GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
                            (LPSTR)  & getDllPath,  & hm ) )
    {
        GetModuleFileName( hm, path, sizeof(path) );
        / * 
           тут надо обрезать из path  "1.dll"  или  "\\1.dll" , по вкусу
           и скопировать в out_path
         * /
        ..  .. .
        return   true ;
    }
     return   false ;
}  

2. При успешном выполнении к out_path приклеить "2.dll" и загрузить ее через LoadLibrary


https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms683200(v=vs.85).aspx
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms683197(v=vs.85).aspx

в path пишется абсолютный путь 1.dll !!!
Респект!
Все как и ожидалось :)))) Quik не причем, это я изменил в функции LoadLibrary() путь к 2.dll с абсолютно указанного на относительный и даже не подумал... Как-то так :)))

 
Изменения в добавлении и запуске Lua скриптов с обновлением версии QUIK, Подключение dll через добавление и запуск Lua скрипта
 
Возможно спрашиваю не по-русски :))) Попробую иначе:

Есть Quik 7.16.3.14, библиотека 1.dll для QLua, в которой есть загрузка другой библиотеки 2.dll через функцию LoadLibrary();

1. Запускаю Quik->Сервис->Lua скрипты...
->В окне "Загруженные скрипты" - пустота
2. Жму на "Добавить", выбираю свой Lua-скрипт с функцией require("1.dll")
->появляется файл моего Lua-скрипта в окне "Загруженные скрипты"
3. Выделяю его, жму "Запустить"
-> Функция LoadLibrary() в 1.dll загружает 2.dll и Lua скрипт работает
4. Жму "Остановить"
-> Lua скрипт останавливается
5. Жму "Запустить"
-> Lua скрипт работает и функция LoadLibrary() в 1.dll загружает 2.dll
6. Жму "Остановить"
-> Lua скрипт останавливается
7. Закрываю окно. Закрываю Quik.
8. Запускаю Quik->Сервис->Lua скрипты..
->В окне "Загруженные скрипты"  есть файл моего Lua-скрипта
9. Выбираю, жму "Загрузить"
-> Lua скрипт работает, 1.dll - работает, а вот функция LoadLibrary() 2.dll не загружает.... ПОЧЕМУ?
10. Жму "Остановить", "Удалить", "Добавить", выбираю свой скрипт и т.д... жму "Запустить"
-> Все опять работает до следующей перезагрузки Quik.

В предыдущих версиях Quik работало во всех случаях!
Кто сталкивался? Подскажите куда смотреть?
Что это? особенности сборки нового Quik?
Изменения в добавлении и запуске Lua скриптов с обновлением версии QUIK, Подключение dll через добавление и запуск Lua скрипта
 
Уточнение.
При повторном запуске Lua скрипта после перезапуска Quik.  
Изменения в добавлении и запуске Lua скриптов с обновлением версии QUIK, Подключение dll через добавление и запуск Lua скрипта
 
Есть собственная dll-ка, которая подключается  через Lua к Quik. В этой dll динамически подключается еще одна dll (shared memory - https://msdn.microsoft.com/en-us/library/windows/desktop/ms686958(v=vs.85).aspx - как пример).
Обновился до последней версии Quik 7.16.3.14 и как итог при повторном запуске Lua скрипта, подключающего dll, вторая dll(shared memory) не подключается:(((  Если же удалить скрипт из списка загруженных и добавить по новой, то при первом запуске все срабатывает как и в старой версии. Что могло измениться?
Страницы: 1
Наверх