Блог им. kurd

Все ли знают, что в 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.
  • обсудить на форуме:
  • Quik Lua
★13
В Qlua всего 2 потока:
1. события
2.main()
Других потоков не существует в природе.
Если вы говорите о нитях lua — это фактически один поток, принудительно переключаемый между задачами.
Вы пишите абсурд. Видимо, от непонимания предмета.
Что там в разных программах в main() разные потоки, это очевидно, и неинтересно.
avatar

3Qu

3Qu, объявленный факт установлен не умозрительно. но экспериментально. С вызовом из Qlua функции GetCurrentThreadId() из WIN32 API.
avatar

Rostislav Kudryashov

Rostislav Kudryashov, покажите кусок Луа, где вы создаете доп поток. У Луа нет для этого средств.
avatar

3Qu

3Qu, ты не понял. Запуск  из окна «Доступные скрипты» каждого нового скрипта со своей function main()  создаёт новый Window-поток (thread). Никаких других средств для этого не требуется.
Брось свои рассуждалки. Я тебе указал обще-доступный эксперимент, дающий исчерпывающую информацию.
avatar

Rostislav Kudryashov

Rostislav Kudryashov, это очевидно. Мало того, у каждой такой свой изолированный стек.
И что мы имеем с гуся?
avatar

3Qu

3Qu, мы имеем гуся-догматика, типа Аристотеля. Который путём рассуждений открыл, что у «женщины зубов меньше, чем у мужчины».
Его безмерная вера в силу рассуждений не позволила ему сосчитать женские зубы экспериментально.
Но тебе, прежде чем приступать к эспериментам с потоками Windows, надо ознакомиться с назначением WIN32 API функции GetCurrentThreadId().
avatar

Rostislav Kudryashov

Rostislav Kudryashov, так, что мы имеем с того, что вы для себя открыли то, что в каждой из программ main() выполняется в своем потоке? Что было и до вас очевидно.
Что это конкретно дает программисту? Какие новые возможности?
avatar

3Qu

А почему теряется в квике при разрыве Связи id транзакции?
avatar

GoodBargains

OnTrade срабатывает не только по заявкам из скрипта, но и поданным интерактивно
По идее он просто по событию срабатывает(пришла новая сделка) неважно откуда, чтобы лишний раз не проверять таблицу сделок как в квипл скрипте
avatar

Иван Иванов

Иван Иванов, а вот OnTransReply так не делает.
PS Что ещё интереснее, что реакция OnOrder на заявку «по рынку» приходит позже реакции OnTrade на регистрацию совершённой по этой заявке сделке.
avatar

Rostislav Kudryashov

Rostislav Kudryashov, OnTransReply связана с sendTransaction() и мы «ловим» свою заявку по trans_id
avatar

Иван Иванов

Вы, конечно, молодцы, что так глубоко изучили qlua.



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

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

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



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

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



Пишу детские скрипты в notepad++ и думаю, что это никуда не годится
avatar

Дедал

Дедал, о лямбда-функциях, upvalue и замыканиях в Lua читай Роберту Иерузалимски или «Beginning Lua Programming» Kurt Jung, Aaron Brown.
avatar

Rostislav Kudryashov

Дедал, от Lua это не требуется. Применение не по назначению.
Луа разрабатывался для кофемолок и как язык сценариев и межпрограммного взаимодействия. Этого хватает, чтобы выбраться из него наружу. Больше ничего и не нужно.
avatar

3Qu

Эффективность и выразительность Lua при всей его лаконичности производит неотразимое впечатление. Несравнимая элегантность.
Только C#, C++15 и Java 7 стали приближаться к этим возможностям, заведя лямбда-функции — весьма коряво.
avatar

Rostislav Kudryashov

Rostislav Kudryashov, 
Только C#6 и C++15 стали приближаться к этим возможностям — весьма коряво.
Вы это серьезно? Ну, ну.
avatar

3Qu

Нужно было Python встраивать, а не Lua.
avatar

Value

Когда попробуете запустить одновременно штучек 25 ботов на QLua, вот тогда и поймете сколько потоков создается, и как они НЕ влияют на основной поток квика. А еще веселей станет, когда решите своим ботам визуальный интерфейс прикрутить. Нет, изучить QLua было конечно полезно, но возвращаться с С# обратно на QLua — ни за какие пряники. Мучайтесь сами.
avatar

Prophetic

Написал бота для телеги на с++, ну, чтоб состояние подключения квика к серверу мониторить и т.д. через  телефон. Щас хочу модернизировать, чтоб запускать квик, следить за ним через бота с телеграм.

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

А как это сделать в QLua? :)))))
avatar

Ivan Peroks

Ivan Peroks, гораздо проще и быстрее через почту россии все заявки отправлять
avatar

Иван Иванов

Иван Иванов, :)))
А что Квик не через почту России отправляет заявки?    
avatar

Ivan Peroks

Ivan Peroks, Quik работает на мобильных устройствах и даже на моём планшете с Андроид 4. А если хочешь робота на мобильном устройстве, заведи планшет с Windows.
avatar

Rostislav Kudryashov

Rostislav Kudryashov, Квик на мобильном устройстве- это же не новость, да? :)))
Непонятно, зачем носиться с планшетом и Квиком, если у вас роботы пашут, я не совсем понимаю.
Пашет робот, пусть будет их — 25. И что мне делать с Квиком? Смотреть как он подключен к сети? Ну, хорошо, пишем на Луа скрипт по отслеживанию работы  Квика, еще чего-нибудь… А что делать если Квик «потухнет» со всеми скриптами Lua? Вот поэтому появляется повод обратиться за посторонней помощью:))) Нам же важно чтоб оно все работало и только — обратная связь так сказать, что там еще смотреть, ждать пока какой-нибудь робот отключится или обрыва соединения?:))))
Ну, если нравится смотреть в Квик на планшете, то смотрите ...
avatar

Ivan Peroks

Ivan Peroks, а кросс-платформенность по отношению к торговым интерфейсам как еще один из поводов обратиться за посторонней помощью не рассматривали?
avatar

Ivan Peroks


....все тэги
2010-2020
UPDONW