Quik Lua

Сайт продукта: https://forum.quik.ru/forum10/
Lua — язык программирования, который используется в программировании торговых роботов под популярный в России терминал Quik.
  1. Аватар Grafta
    Lua индикатор для Quik, Bollinger Bands %b Oscillator
    Доброго времени всем.
    Ищу Lua индикатор для Quik, Bollinger Bands %b (Bollinger Bands %BB Oscillator).  На MT4 есть в открытом виде. Возможно у кого-то уже есть переделанный в lua. Буду очень признателен в помощи его отыскать. Если не найду, придется переписывать самому в lua...(

    Авто-репост. Читать в блоге >>>
  2. Аватар Евгений
    Прошу написать простой индикатор
    Приветствую, сильно увлекся арбитражем, на данный момент прошу написать код простого индикатора на Lua, который просто будет считать разницу между по ценами 2-х инструментов.
    Например есть Сбербанк и Сбербанк преф.
    Нужно посчитать разницу между ценам закрытия свечей и вывести ее в виде графика.
    Условно цена закрытия бара на Сбер 190 руб, цена закрытия бара Себер преф 170 руб, соответственно на графике должен быть результат 20 руб.
    Соответственно эти расчеты могут уходить в минус, что означает, что условно цена Сбера стала меньше цены Сбера преф.
    Буду благодарен если воткнете вторую возможность выбора сравнения цен инструмента относительно изменения в %. Что бы можно было сравнить например Газпром и Лукойл. 

    Задача найти максимумы и минимумы в рублях за период по каждому бару.

    Ну если скажете, что стоит денег прийдется оплатить. На последующих этапах готов оплатить создание робота, но при доработанном индикаторе.

    Авто-репост. Читать в блоге >>>
  3. Аватар 3Qu
    Quik, DDE, Excel
    Напомню, что обмен по DDE придуман в далеком 1995 году, еще для Windows 3.1.  DDE считается сильно устаревшим методом обмена данными и практически не поддерживается современными приложениями. Остался один Quik, который цепляется за DDE из последних сил.
    Вывод по DDE в Excel еще и не удобен для обработки данных. Понадобилось мне, скажем, ввести дополнительно пару-тройку столбцов на опционную доску — в результате, в Excel все столбцы таблицы на листе сместятся, и всю адресацию ячеек листа Excel в программе надо будет переделывать заново.
    В MS Access также имеется DDE-сервер, и есть возможность заполнять таблицы БД по DDE, однако Quik c Access по DDE работать не умеет.
    В общем, решил, что экспорт таблицы из Quik по DDE надо запихнуть в таблицу базы данных (БД), и уже из БД программно работать с опционной доской. Что, кстати, гораздо удобней для любой таблицы Quik.
    Хотел было через Lua — вроде все просто, Lua с таблицами работает. Ан нет, к доске опционов Lua доступа не имеет.
    Наверное на С++ или C# связь по DDE надо делать.
    И подумалось, а может у Смартлабовцев есть такие уже готовые рабочие решения, чего велосипеды изобретать? По крайней мере, для DDE (никогда программно с ним не работал? djj,ot yt gh), а в БД я и сам запихну, и если нужно поделюсь решением — здесь нет никаких ноу-хау.
    Помогайте, граждане кто чем может.

    Авто-репост. Читать в блоге >>>
  4. Аватар Михаил Понамаренко
    Автозапуск QUIK QLUA
    Пожалуй, каждый, даже, самый ленивый программист на LUA презентовал свою версию для запуска QUIK.
    Пришла и моя очередь.
    Вчера, за небольшую благодарность, swerg перевёл w32.dll на LUA 5.3.
    Теперь есть поддержка QUIK 8.5 и выше.
    Скачать: http://pmntrade.ru/avtozapusk_quik_qlua/avtozapusk_quik_qlua.zip
    Страница программы: http://pmntrade.ru/avtozapusk_quik_qlua.html


    Авто-репост. Читать в блоге >>>
  5. Аватар Врач-бондиатОр
    Поделитесь роботом на Луа....плиз...
    Какое-то время были посты от благодетелей, которые предлагали выкладывать скрипты для создания роботов.

    Так как не все далеко тут программисты, то прошу добрых людей выложить полный скрипт робота на луа (который можно сразу загрузить, и он будет работать) с какой-нибудь простой стратегией вроде пересечения средних.
    Комментарии к скрипту бы приветствовались.

    Думаю, что многие бы сказали спасибо...




    Авто-репост. Читать в блоге >>>
  6. Аватар _sk_
    Опыт доработки QLua-скриптов для QUIK 8.5.2
    В новой версии терминала QUIK 8.5.2 произведён апгрейд языка Lua для написания торговых скриптов с версии 5.1 до версии 5.3. Это нужно для того, чтобы корректно обрабатывать 19-значные номера заявок и сделок на срочном рынке МосБиржи. Типа number в Lua 5.1 не подходит: там все числа хранятся как double, соответственно целые числа до 2^53 = 9 007 199 254 740 992 записываются без потери точности, а 19-значные номера заявок и сделок будут больше этой границы.

    Версия Lua 5.3 обратно несовместима с Lua 5.1. Я почти не использовал внешние библиотеки и для меня было два важных изменения: отказ от module (это было сделано в версии 5.2) и введение целочисленной арифметики (версия 5.3).

    Для избавления от использования module пришлось переработать много кода, хотя изменения были несложные. Приведу пример. Раньше был такой код Arrays.lua для работы с массивами:

    --
    -- Выполнение действий с массивами.
    --
    
    local pairs = pairs
    local type = type
    
    module(...)
    
    --- Создать копию массива (таблицы)
    -- @return копию массива (таблицы)
    function copy(array)
        local copy_array = {}
        if type(array) ~= "table" then
            return array
        end
        for k, v in pairs(array) do
            if type(v) == "table" then
                copy_array[k] = copy(v)
            else
                copy_array[k] = v
            end
        end
        return copy_array
    end
    
    --- Узнать, начинается ли индексация в массиве с нуля или с единицы.
    -- @return 0 или 1
    function base(array)
        if array[0] ~= nil then
            return 0
        else
            return 1
        end
    end
    
    --- Вычислить число элементов в массиве.
    -- @return число элементов в массиве
    function size(array)
        local n = 0
        for _, _ in pairs(array) do
            n = n + 1
        end
        return n
    end
    
    --- Проверить пустой или нет массив.
    -- @return true/false
    function isEmpty(array)
        for _, _ in pairs(array) do
            return false
        end
        return true
    end
    
    --- Получить первый индекс массива, где ничего не записано. Поиск начинается с 1.
    -- @return первый индекс массива, где ничего не записано
    function firstEmptyIndex(array)
        local i = 1
        while array[i] ~= nil do
            i = i + 1
        end
        return i
    end


    Авто-репост. Читать в блоге >>>
  7. Аватар Сергей
    Робот для Квика на Луа.
    Здравствуйте. Нужен робот, тех.задание готово.  Робот без наворотов, простой, два индикатора +стандартный набор функций (стоп, трейл, выбор позиции и т.д). Цена фиксированная ( адекватная), по возможности-укажите Ваши ценовые предпочтения(почасовую оплату не предлагать). Все предложения в личку или на мыло.Спасибо.

    Авто-репост. Читать в блоге >>>
  8. Аватар Алексей Овечкин
    Доброе утро.

    Подскажите пожалуйста, сам не понимаю что делать.

    из функции OnCalculate изменяю значение глобальной переменной, изменяю не сразу, а ближе концу таблицы цен.
    Переменная, количество купленных лотов. При инициализации 0.

    Но при выводе переменной в график индикатора, показывает сразу не нулевое значение, там где операции не велись. Как будто, значение в начало расчетов было вставлено процессом из середины.

    Мне кажется тут проблема при работе с глобальными переменными из функции OnCalculate.
    Если вы знаете об этой проблеме, пожалуйста помогите ее решить.

    Овечкин Алексей
  9. Аватар De color
    Не компилится проект, для подключения для работы с Quik lua через dll.

    Авто-репост. Читать в блоге >>>
  10. Аватар Роман Подборных
    Lua for Windows

    message(«a»)

    ------------------------------Output------------------------------
    >lua -e «io.stdout:setvbuf 'no'» «a.lua»
    lua: a.lua:1: attempt to call global 'message' (a nil value)
    stack traceback:
    a.lua:1: in main chunk
    [C]: ?
    >Exit code: 1

    Самый простой, по сути код. Но Lua  выдаёт ошибку при компилировании без function main(), при том что Quik выполняет этот код без конструкции main или function. Раньше такой ошибки не было.
    Что случилось? Кто-нибудь знает?

    Авто-репост. Читать в блоге >>>
  11. Аватар Artem Loychenko
    Алгоритм для торговли BRENT на LUA в QUIK
    Всем привет!

    Smart-Lab'у я не знаком, поэтому напишу пару слов о себе. Меня зовут Артем, финансовым рыком я увлекался с 9го класса школы и хотел стать трейдером. Я имею профильное образование в российском и английских вузах, изучал международную экономику, investment management и финансовый инжиниринг. Моим первым местом работы было совместное предприятие OSTC-ATON. Вопреки скепсису многих — это одна из лучших proprietary trading компаний в мире и уж точно лучшая в России. Также я работал в крупнейшем брокере нефтепродуктов России, где был сфокусирован на физическом рынке нефти. На данный момент я нахожусь в prop отделении Freedom Finance.

    Как и многие, я довольно долго шел к тому, чтобы иметь собственную стратегию. Я собирал свою стратегию по кусочкам, читая разные книги, торгуя и пробуя что-то новое. Около 2 лет назад я пришел к четким правилам, необходимым мне чтобы входить в сделки и управлять позицией. В декабре/январе я оформил свои правила в алгоритм, который торгует с 29.01.2020. Сейчас я немного о нем расскажу.

    Авто-репост. Читать в блоге >>>
  12. Аватар Федор Win
    Диаграмма в екселе - Изменение открытого интереса и горизонтальный объем.
    Из Квик качаю торговые данные фьючерса SR.
    Кто нибудь знает, как такую диаграмму с помощью Lua встроить в сам Квик, чтобы можно было разделять по тайм-периодам?

    Диаграмма в екселе - Изменение открытого интереса и горизонтальный объем.




    Авто-репост. Читать в блоге >>>
  13. Аватар futurama2020
    Тестирую алгоритм

    Собираюсь пока поторговать его руками, чтобы окончательно убедиться в его работоспособности и потому, что еще не программировал на Lua вообще и для «квика» в частности.

    Внутридневная торговля с минимальной просадкой (для желающих могу посчитать отдельно). До 10 сделок в день. Хорошо подходит для одного класса инструментов и плохо — для других, что является косвенным показателем жизнеспособности. Почему так происходит — мне тоже понятно.

    Алгоритм без заглядывания в будущее и мартингейла. Ниже результаты бэктеста за пять лет. Конечно же, в идеальных условиях: без проскальзываний и комиссий брокера и биржи. Без реинвестирования прибыли.

    Выручка от торгов BTC/USD с осени 2016 года:

    Тестирую алгоритм



    Фьючерс S&P500 с начала 2015 года, когда он стоил 2055 пунктов:

    Тестирую алгоритм



    Авто-репост. Читать в блоге >>>
  14. Аватар McDuck
    У кого есть Lua .
    Здравствуйте народ. Хотел спросить может у кого есть Lua скрипт работающий по пересечению индикатором нулевой зоны гистограммой, который можно подключить через идентификатор в QUIK.  Либо чтобы открывались сделки по данным скрипта qpl по перевесу (дельте) оборота сделок. Скрипт прилагаю, в нем подсчитывается объем.  
    Написание скрипта тоже рассмотрю, пишите в личку.  
    PORTFOLIO_EX LUK;
    DESCRIPTION Объёмы купли/продажи за интервал;
    CLIENTS_LIST ALL_CLIENTS;
    FIRMS_LIST FIRMID;
    
    PROGRAM
    
    'Автор:  Михаил Булычев
    'Что делает:
    '   подсчитывается объёмы купли\продажи по определённому инструменту за 
    '   заданный интервал   
    'Как использовать:
    '  В следующих строках следует указать код бумаги и код класса для 
    '  отслеживаемого инструмента
    
    '=============================НАСТРОЙКИ===============================
    SecCode="LKOH" '  Код инструмента
    ClassCode="TQBR" 'Код класса
    interv=3600 'является интервалом в секундах
    razn = 0 'смещение часового пояса относительно времени торговой системы. 
    '=============================НАСТРОЙКИ===============================
    
    
    FUNC is_in_interval(interval, trade_time, sys_time, hour_shift)
      csys_time_value=0
      c_time_value=0
      csys_time_value =0 + (0 + get_value(sys_time, "Hour") + hour_shift)*3600 + _
                        get_value(sys_time, "Min")*60 + _
                        get_value(sys_time, "Sec")
      c_time_value=0 + ((0 + substr("" & trade_time, 0, 2)) * 3600) + ((0 + substr("" & trade_time, 2, 2)) * 60) + ((0 + substr("" & trade_time, 4, 2)))
    
    csys_time_value = csys_time_value + 0
    c_time_value = c_time_value + 0
    
    k=csys_time_value - c_time_value
    
    if k <= interval
        result=1
      else
        result=0
      end if
    END FUNC
    
      buy_value=0
      sell_value=0
      total_value=0
      sys_time = GET_DATETIME()
      delete_all_items() 
      mString=create_map()
      
    
    
      j=0
      n=get_number_of("ALL_TRADES")
      for i from 0 to n
        mTrade=get_item("ALL_TRADES", n-i)
        trade_time=get_value(mTrade, "TIME")
        if (get_value(mTrade, "SECCODE")= SecCode) AND (get_value(mTrade, "CLASSCODE")= ClassCode)
          if is_in_interval(interv, trade_time, sys_time, 0-razn) = 1
            value=0+get_value(mTrade, "VALUE")
            j=j+1
            if (get_value(mTrade, "OPERATION") = "BUY")
              buy_value=buy_value+value    
            else
              sell_value=sell_value+value      
            end if
            total_value=total_value+value
          else
            break
          end if
        end if    
      end for
      mString=set_value(mString, "vol", total_value)
      mString=set_value(mString, "volbuy", buy_value)
      mString=set_value(mString, "volsell", sell_value)
      add_item(1, mString)
    END_PROGRAM
    
    PARAMETER vol;
    PARAMETER_TITLE vol;
    PARAMETER_DESCRIPTION Купили;
    PARAMETER_TYPE NUMERIC(10,0);
    END
    PARAMETER volbuy;
    PARAMETER_TITLE volbuy;
    PARAMETER_DESCRIPTION Купили;
    PARAMETER_TYPE NUMERIC(10,0);
    END
    PARAMETER volsell;
    PARAMETER_TITLE volsell;
    PARAMETER_DESCRIPTION Продали;
    PARAMETER_TYPE NUMERIC(10,0);
    END
    END_PORTFOLIO_EX
    


    Авто-репост. Читать в блоге >>>
  15. Аватар Андрей Иванов
    QUIK 8.5 важно для алготрейдеров на Lua
    Вышел QUIK 8.5 качаем и тестируем тут ftp://ftp.quik.ru/public/updates/8.5/quik_8.5.1_upd.zip

    Ключевое это поддержка идентификатора заявок и сделок 19 десятичных знаков+переход на Lua 5.3.5 x64

    Отличия Lua 5.1(5.2) от 5.3 можно глянуть например тут http://antirek.github.io/luabook/incompatibility.htm

    Подробнее про необходимость перехода и кому переходить тут https://forum.quik.ru/forum1/topic5117/

    С 25 мая на бирже будет переход на идентификатор заявок 19 знаков, поэтому из Lua нельзя будет работать с заявками на срочном рынке.

    P/S Модератор перенеси в раздел алготрейдинг

    Возможности новой версии
    1. Реализован функционал быстрого фильтра в таблицах. Для активации \ деактивации быстрого фильтра используется пункт «Включить быстрый фильтр» \ «Выключить быстрый фильтр» контекстного меню, открываемого для заголовка самого левого столбца таблицы. Данный функционал позволяет фильтровать информацию в таблицах QUIK с наглядным отображением критериев фильтрации.



    Авто-репост. Читать в блоге >>>
  16. Аватар Kot_Begemot
    Open Source : Lua - MatLab Connector (3)


    Краткое описание :

    Библиотека Matlab2Lua  позволяет интегрировать Lua скрипты и Маtrix Laboratory Engine.


    Полное описание :

    Библиотека позволяет Lua и Матлаб обмениваться данными при помощи функций :

    lua variable = Get( string Matlab varname );  — получение переменной из среды матлаб по имени, поддерживаются Double Array, Cell Array of Strings, Double Value, Integer Value, String Value. Возвращает -1 в случае неудачи.

    int Eval ( string MatlabСommand ) — передает команду в MatLab Command Line, в качестве переменной типа string; возвращает -1 в случае неудачи, и 1 в случае успеха.

    int PutVal( string Name, string/number Value) — передает в Матлаб значение Value типа string или number под именем Name. 1- успех, -1 — неудача.

    int PutDouble( string Name, table T) — передает в Матлаб под именем Name таблицу Луа, заполненную численными значениями. Ответ — аналогичный.

    int PutCell( string Name, table T)  — передает в Матлаб под именем Name таблицу Луа, заполненную строковыми или численными значениями, подлежащими преобразованию в строки. Ответ — аналогичный.


    Авто-репост. Читать в блоге >>>
  17. Аватар Kot_Begemot
    Интеграция Lua и С++ (2)

    Обмен данными между Lua и Сpp осуществляется через Lua-стэк, то есть через специальным образом структурированное (по принципу Last In — First Out) пространство. 


    Интеграция Lua и С++ (2)

    Иллюстрация процесса добавления переменных в Cтэк (Push) и извлечения переменных из Стэка (Pop).

    Иными словами, Lua стэк — это одномерный массив переменных (список, строка) с прямой (от 1 до n) индексацией.



    Заполняется стэк командами lua_push (С-side) :

    void lua_pushnumber (lua_State *L, lua_Number n);
    
    const char *lua_pushstring (lua_State *L,  const char *s);
    

    и другими. 


    Новой переменной в стэке Луа длинной n автоматически присваивается индекс [n+1] или [-1], где n+1 — абсолютный индекс переменной, а -1 — индекс новой переменной относительно конца (!) стэка. 




    Доступ, к переменным, соответственно осуществляется функциями lua_to (C-side) :

    lua_Number lua_tonumber (lua_State *L, int index);
    
    const char *lua_tostring (lua_State *L, int index);
    
    где L — указатель Lua-стэка, а index — абсолютный или относительный индекс переменной в стэке.

    Авто-репост. Читать в блоге >>>
  18. Аватар _sk_
    QLua: таблица крупных "склеенных" обезличенных сделок
    Иногда хочется наблюдать за ситуациями, когда участники торгов исполняют по рынку крупные заявки. Конечно, можно смотреть на обычную ленту обезличенных сделок с настроенными фильтрами на размер сделки, но ведь можно написать специальный QLua-скрипт, который будет отбирать сделки, являющиеся результатом исполнения.

    В терминале QUIK ордерлог недоступен, поэтому надо как-то эвристическим образом определить, что набор обезличенных сделок относится к одной и той же рыночной заявке. Например, можно проверять, что инструмент в текущей сделке совпадает с инструментом в предыдущей сделке, направление сделки то же самое, время сделки совпадает с точностью до миллисекунд, и цена при покупке растёт, а при продаже — падает.

    Если суммарный объём не менее какой-то границы, которую можно задать для каждого инструмента индивидуально, такие «склеенные» сделки выводятся в таблице. В ней указаны:
    — суммарный объём;
    — количество обезличенных сделок, которые были склеены;
    — начальная цена и конечная цена;

    Авто-репост. Читать в блоге >>>
  19. Аватар _sk_
    QLua: формирование свечных данных для робота
    Поделюсь своим опытом, который может быть полезен начинающим алготрейдерам, пишущим своего робота на QLua.

    Внутри QLua есть стандартный способ, которым можно заказать свечные данные. Это делается через функцию CreateDataSource. При этом терминал возвращает все свечи, которые у него есть на момент вызова этой функции, но это может быть не совсем удобно. Вот несколько примеров.

    Пример 1. Мы торгуем акции на 30-минутках и при этом не хотим учитывать свечу, которая получается в 9:30 из-за аукциона открытия, и не хотим, чтобы аукцион закрытия портил последнюю свечу дня в 18:30. Хотим только нужные свечи в одном массиве.

    Пример 2. Мы торгуем фьючерсы только в дневную сессию, а вечернюю сессию выбрасываем, поскольку наша стратегия в этом случае даёт более приличный график эквити. Хочется иметь «отфильтрованный» свечной ряд.

    Пример 3. Мы торгуем американские акции на Санкт-Петербургской бирже и хотим, чтобы время свечей было как в Америке, а не как на бирже, и хотим оставить только основные торги с 9:30 до 16:00 по буржуйскому времени.

    Авто-репост. Читать в блоге >>>
  20. Аватар Ур Урычь
    Здравствуйте, кто нибудь может мне скинуть простой работающий скрипт на LUA для акций, пытаюсь разобраться с LUA нужен скрипт работающий для примера, покупка продажа отслеживания цены.

    Авто-репост. Читать в блоге >>>
  21. Аватар 3Qu
    Смена x86 Quik 7.27.2.1 на x64 Quik 8.4.1.6. Пляски вокруг DLL.

    Признаться уже достал этот 32-битный Quik 7. Работать стало почти невозможно, начал подвисать практически на пустом месте. А если повесить на Quik Lua, а к Lua прицепить DLL, то вообще все эпизодически вставало. DLL-ки, вообще-то, многопоточные и освобождают вызывающие потоки (события) Lua практически за миллисекунды, но если таких событий много Quik встает. Хотя, он и без Lua и DLL тоже регулярно встает.)

    Были и другие причины ухода от 32-бит Quik, но это уже связано с брокером.
    Итак, новый брокер — новый 64-битный Quik 8.4.1.6. Наконец сбылась мечта идиота!
    Что можно сказать, — х64 Quik работает гораздо лучше, все равно временами немного подвисает, но, вроде, некритично. После логин-пароля, прежде чем работать надо подождать, — потоки обезличенных сделок начинают работать только через 3-4 минуты после старта. В общем, с этим все более-менее ОК.
    Следующий этап — надо переводить весь софт с х86 на х64, и если есть исходники, то никаких проблем не должно появиться. Если вы не используете в своем софте каких либо дополнительных DLL, то все должно ограничиваться двумя действиями.
    1. Меняете в проекте С++ в разделе Файлы ресурсов 32-битную версию файла Lua5.1.lib на 64-битную версию Lua5.1.lib,
    2. Выставляете в свой свойствах проекта компиляцию в x64. Можно даже так:



    Авто-репост. Читать в блоге >>>
  22. Аватар 3Qu
    Почему я не продолжаю тему "Quik->Lua->C++ DLL".
    Посмотрите на тематику сайта последние 2-3 недели — коронавирус, кризис — уже наступил, или еще только собирается, покупать или продавать, обсуждение падения, от все пропала до мы еще о-го-го, и счас как отскочим в небеса.
    До каких-то Lua, DLL и автоторговли сейчас нет никому никакого дела. Кто сейчас это будет читать, когда и в более спокойные времена читали лишь немногие. Писать просто так не хочется, писать для себя — мне это тоже не нужно.
    В общем, решил подождать с этой темой до лучших, более спокойных, времен. А там посмотрим, м.б. высохнет, и само отвалится.

    Авто-репост. Читать в блоге >>>
  23. Аватар Врач-бондиатОр
    Есть ли руководства по Lua для создания роботов?
    Всем привет!

    Есть ли на свете руководства или адекватные форумы по которым можно было научиться писать несложных роботов на Lua?

    Логика работы робота проста: если А больше В, то купить маркетом или лимиткой.

    Есть сайт https://oojoo.ru/, но он единственный что я нашел...



    Авто-репост. Читать в блоге >>>
  24. Аватар Дмитрий К
    Как экспортировать данные из квика через сокеты - ответ и тут же вопрос
    Последние несколько месяцев время от времени начинал времени ломать голову над одной задачкой.
    Суть в следующем.
    Я сделал скрипт на питоне, на основе торговых данных пишет заявки в tri файл квиковский.
    Чтоб заявку создать нужно принять решение на основе каких то данных из таблиц квика (например исполнилась какая то ранняя заявка, или банально цена дошла до нужного уровня, и т.п.)
    Данные из таблиц квика, как известно, встроенными методами можно экспортировать через ДДЕ сервер, или в базы данных через ODBC.
    То есть — для этого не надо обладать знаниями по программированию, это простые, очевидные способы, доступные всем, у кого установлен квик.
    Я выбрал способ по ODBC, и пользуюсь им.
    Связка работает стабильно, ничего не рушится, правда пару раз за несколько месяцев зависал сам квик из за того, что кончалась оперативная память (сервер слабенький у меня).

    Но у такой связки есть слабое место, приходится в питоне запускать таймер, по кjторому питон опрашивает базу данных.

    Авто-репост. Читать в блоге >>>
  25. Аватар Rostislav Kudryashov
    Все ли знают, что в Quik'е у каждого скрипта main() свой отдельный Windows-поток (thread)?
    Пишу потому, что к большому моему удивлению открыл, что весьма активные писатели Смарт-лаба этого не знают. В главном потоке программы Quik работают только функции обратного вызова типа OnTransReply, OnTrade и индикаторы. Кстати, OnTrade срабатывает не только по заявкам из скрипта, но и поданным интерактивно.

    Дело обработчиков событий не обрабатывать, но регистрировать их.
    Неверные представления о потоках в Quik'е вынуждают этих писателей городить абсурдный обмен данными между Quik'ом и внешними приложениями. Тогда как вся информация по событиям может быть обработана средствами QLua во вторичных скриптовых потоках без помех для главного потока Quik'а.

    Хотя QLua обладает весьма эффективными средствами взаимодействия с любым приложением Windows, не так просто придумать повод для обращения QLua за посторонней помощью. Например, сохранять на диске текущие данные QLua может массой способов от простейшего io.read/write до SQLite.
    Количество библиотек для QLua просто изумляет.

    NB. Известная проблема скриптовых языков, что ошибки-описки в именах функций и переменных влекут трудно диагностируемые сбои работы, решается двумя простейшими средствами.

    Авто-репост. Читать в блоге >>>
Чтобы купить акции, выберите надежного брокера: