Rostislav Kudryashov
Rostislav Kudryashov личный блог
10 февраля 2020, 21:56

Все ли знают, что в Quik'е у каждого скрипта main() свой отдельный Windows-поток (thread)?

Пишу потому, что к большому моему удивлению открыл, что весьма активные писатели Смарт-лаба этого не знают. В главном потоке программы Quik работают только функции обратного вызова типа OnTransReply, OnTrade и индикаторы. Кстати, OnTrade срабатывает не только по заявкам из скрипта, но и поданным интерактивно.

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

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

NB. Известная проблема скриптовых языков, что ошибки-описки в именах функций и переменных влекут трудно диагностируемые сбои работы, решается двумя простейшими средствами.
1) Все константы собираются в одном модуле с контролем доступа через мета-функцию __index(). Это даёт диагностику времени выполнения.
2) Для контроля имён при разработке кода следует использовать общедоступную программу lualint. А для блокировки ложных срабатываний по глобальным именам из других модулей, можно написать свой код, фильтрующий эти имена.

Чтобы расширить область контроля lualint, следует больше данных именовать как отдельные переменные. Имена полей в таблицах контролю не доступны. По возможности, их следует представлять константами из упомянутых модулей констант.
Поэтому, там где напрашивается сгруппировать переменные и функции в объект-таблицу, я сдерживаю свои навыки ООП и для группировки использую вульгарные префиксы. Например, pos_EntryPrice, pos_Exit() означают поле и функцию в «виртуальном» объекте типа Position.
26 Комментариев
  • 3Qu
    10 февраля 2020, 22:01
    В Qlua всего 2 потока:
    1. события
    2.main()
    Других потоков не существует в природе.
    Если вы говорите о нитях lua — это фактически один поток, принудительно переключаемый между задачами.
    Вы пишите абсурд. Видимо, от непонимания предмета.
    Что там в разных программах в main() разные потоки, это очевидно, и неинтересно.
      • 3Qu
        10 февраля 2020, 22:10
        Rostislav Kudryashov, покажите кусок Луа, где вы создаете доп поток. У Луа нет для этого средств.
          • 3Qu
            10 февраля 2020, 22:18
            Rostislav Kudryashov, это очевидно. Мало того, у каждой такой свой изолированный стек.
            И что мы имеем с гуся?
              • 3Qu
                10 февраля 2020, 22:32
                Rostislav Kudryashov, так, что мы имеем с того, что вы для себя открыли то, что в каждой из программ main() выполняется в своем потоке? Что было и до вас очевидно.
                Что это конкретно дает программисту? Какие новые возможности?
  • GoodBargains
    10 февраля 2020, 23:03
    А почему теряется в квике при разрыве Связи id транзакции?
  • Иван Иванов
    10 февраля 2020, 23:10
    OnTrade срабатывает не только по заявкам из скрипта, но и поданным интерактивно
    По идее он просто по событию срабатывает(пришла новая сделка) неважно откуда, чтобы лишний раз не проверять таблицу сделок как в квипл скрипте
      • Иван Иванов
        11 февраля 2020, 00:02
        Rostislav Kudryashov, OnTransReply связана с sendTransaction() и мы «ловим» свою заявку по trans_id
  • Дедал
    10 февраля 2020, 23:58
    Вы, конечно, молодцы, что так глубоко изучили qlua.



    Но это древний отстой!!!

    Есть ли нормальная современная ide для qlua?

    Есть ли нормальный дебаг?



    По сравнению с java в Idea

    Где там в луа управление потоками, пулы, таймауты, jdbc, лямбды?



    Пишу детские скрипты в notepad++ и думаю, что это никуда не годится
    • 3Qu
      11 февраля 2020, 00:13
      Дедал, от Lua это не требуется. Применение не по назначению.
      Луа разрабатывался для кофемолок и как язык сценариев и межпрограммного взаимодействия. Этого хватает, чтобы выбраться из него наружу. Больше ничего и не нужно.
    • 3Qu
      11 февраля 2020, 00:35
      Rostislav Kudryashov, 
      Только C#6 и C++15 стали приближаться к этим возможностям — весьма коряво.
      Вы это серьезно? Ну, ну.
      • swerg
        20 мая 2020, 10:18
        3Qu, а я согласен.
        Как изящно и минимумом средств всё сделано в Lua, и как корямо, монструидозно и трудно читаемо это всё втиснуто в C++.
  • Value
    11 февраля 2020, 02:34
    Нужно было Python встраивать, а не Lua.
  • Prophetic
    11 февраля 2020, 10:15
    Когда попробуете запустить одновременно штучек 25 ботов на QLua, вот тогда и поймете сколько потоков создается, и как они НЕ влияют на основной поток квика. А еще веселей станет, когда решите своим ботам визуальный интерфейс прикрутить. Нет, изучить QLua было конечно полезно, но возвращаться с С# обратно на QLua — ни за какие пряники. Мучайтесь сами.
  • Ivan Peroks
    11 февраля 2020, 10:40
    Написал бота для телеги на с++, ну, чтоб состояние подключения квика к серверу мониторить и т.д. через  телефон. Щас хочу модернизировать, чтоб запускать квик, следить за ним через бота с телеграм.

    Внимание, вопрос!

    А как это сделать в QLua? :)))))
    • Иван Иванов
      11 февраля 2020, 12:16
      Ivan Peroks, гораздо проще и быстрее через почту россии все заявки отправлять
      • Ivan Peroks
        11 февраля 2020, 12:39
        Иван Иванов, :)))
        А что Квик не через почту России отправляет заявки?    
      • Ivan Peroks
        11 февраля 2020, 16:17
        Rostislav Kudryashov, Квик на мобильном устройстве- это же не новость, да? :)))
        Непонятно, зачем носиться с планшетом и Квиком, если у вас роботы пашут, я не совсем понимаю.
        Пашет робот, пусть будет их — 25. И что мне делать с Квиком? Смотреть как он подключен к сети? Ну, хорошо, пишем на Луа скрипт по отслеживанию работы  Квика, еще чего-нибудь… А что делать если Квик «потухнет» со всеми скриптами Lua? Вот поэтому появляется повод обратиться за посторонней помощью:))) Нам же важно чтоб оно все работало и только — обратная связь так сказать, что там еще смотреть, ждать пока какой-нибудь робот отключится или обрыва соединения?:))))
        Ну, если нравится смотреть в Квик на планшете, то смотрите ...
        • Ivan Peroks
          11 февраля 2020, 16:26
          Ivan Peroks, а кросс-платформенность по отношению к торговым интерфейсам как еще один из поводов обратиться за посторонней помощью не рассматривали?
  • swerg
    20 мая 2020, 10:20
    Вроде все про отдельный поток знают:
    quik2dde.ru/viewtopic.php?id=16

    Или новость была именно в том, что отдельный поток main() создаётся для каждого Lua-скрипта?

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн