Михаил Филимонов, Нет, я абсолютно серьёзно. Я и понял "в какой таблице находится, цифирь". Какое дело скрипту до этой таблицы? Я свой скрипт писал вовсе не для того, чтобы он вынюхивал, что там у меня лежит наа счетах, не говоря уже о том, чтобы использовал эти деньги "в своих интересах". Сколько я ему дам - на том пущай и играет. Я могу дать ему действительно все свободные деньги на счёте, могу дать больше (если мне вдруг захочется, чтобы он поигрался с плечом), могу дать меньше (что я обычно и делаю). В любом случае, я тут главный, а не "железяка х..ва"!
Занятный вопрос... ЧЬИ средства? Чужие? НИКАК! Если есть такая возможность, то нужно подвешивать за яйца всех разработчиков софта! Свои? Свои не хило бы знать самому! С какой радости скрипт должен "в LUA получить значение, указанное на картинке"? Какое его собачье дело? Скрипт должен знать, сколько ИМЕННО ЕМУ дозволено тратить, а вовсе не всё, что лежит на счёте! И эта цифирь НИКАК не связана с "картинкой"!
Список возможных идентификаторов параметров, передаваемых в функцию getParamEx()
STATUS STRING Статус LOTSIZE NUMERIC Размер лота BID NUMERIC Лучшая цена спроса BIDDEPTH NUMERIC Спрос по лучшей цене BIDDEPTHT NUMERIC Суммарный спрос NUMBIDS NUMERIC Количество заявок на покупку OFFER NUMERIC Лучшая цена предложения OFFERDEPTH NUMERIC Предложение по лучшей цене OFFERDEPTHT NUMERIC Суммарное предложение NUMOFFERS NUMERIC Количество заявок на продажу OPEN NUMERIC Цена открытия HIGH NUMERIC Максимальная цена сделки LOW NUMERIC Минимальная цена сделки LAST NUMERIC Цена последней сделки CHANGE NUMERIC Разница цены последней к предыдущей сессии QTY NUMERIC Количество бумаг в последней сделке TIME STRING Время последней сделки VOLTODAY NUMERIC Количество бумаг в обезличенных сделках VALTODAY NUMERIC Оборот в деньгах TRADINGSTATUS STRING Состояние сессии VALUE NUMERIC Оборот в деньгах последней сделки WAPRICE NUMERIC Средневзвешенная цена HIGHBID NUMERIC Лучшая цена спроса сегодня LOWOFFER NUMERIC Лучшая цена предложения сегодня NUMTRADES NUMERIC Количество сделок за сегодня PREVPRICE NUMERIC Цена закрытия PREVWAPRICE NUMERIC Предыдущая оценка CLOSEPRICE NUMERIC Цена периода закрытия LASTCHANGE NUMERIC % изменения от закрытия PRIMARYDIST STRING Размещение ACCRUEDINT NUMERIC Накопленный купонный доход YIELD NUMERIC Доходность последней сделки COUPONVALUE NUMERIC Размер купона YIELDATPREVWAPRICE NUMERIC Доходность по предыдущей оценке YIELDATWAPRICE NUMERIC Доходность по оценке PRICEMINUSPREVWAPRICE NUMERIC Разница цены последней к предыдущей оценке CLOSEYIELD NUMERIC Доходность закрытия CURRENTVALUE NUMERIC Текущее значение индексов Московской Биржи LASTVALUE NUMERIC Значение индексов Московской Биржи на закрытие предыдущего дня LASTTOPREVSTLPRC NUMERIC Разница цены последней к предыдущей сессии PREVSETTLEPRICE NUMERIC Предыдущая расчетная цена PRICEMVTLIMIT NUMERIC Лимит изменения цены PRICEMVTLIMITT1 NUMERIC Лимит изменения цены T1 MAXOUTVOLUME NUMERIC Лимит объема активных заявок (в контрактах) PRICEMAX NUMERIC Максимально возможная цена PRICEMIN NUMERIC Минимально возможная цена NEGVALTODAY NUMERIC Оборот внесистемных в деньгах NEGNUMTRADES NUMERIC Количество внесистемных сделок за сегодня NUMCONTRACTS NUMERIC Количество открытых позиций CLOSETIME STRING Время закрытия предыдущих торгов (для индексов РТС) OPENVAL NUMERIC Значение индекса РТС на момент открытия торгов CHNGOPEN NUMERIC Изменение текущего индекса РТС по сравнению со значением открытия CHNGCLOSE NUMERIC Изменение текущего индекса РТС по сравнению со значением закрытия BUYDEPO NUMERIC Гарантийное обеспечение продавца SELLDEPO NUMERIC Гарантийное обеспечение покупателя CHANGETIME STRING Время последнего изменения SELLPROFIT NUMERIC Доходность продажи BUYPROFIT NUMERIC Доходность покупки TRADECHANGE NUMERIC Разница цены последней к предыдущей сделки (FORTS, ФБ СПБ, СПВБ) FACEVALUE NUMERIC Номинал (для бумаг СПВБ) MARKETPRICE NUMERIC Рыночная цена вчера MARKETPRICETODAY NUMERIC Рыночная цена NEXTCOUPON NUMERIC Дата выплаты купона BUYBACKPRICE NUMERIC Цена оферты BUYBACKDATE NUMERIC Дата оферты ISSUESIZE NUMERIC Объем обращения PREVDATE NUMERIC Дата предыдущего торгового дня DURATION NUMERIC Дюрация LOPENPRICE NUMERIC Официальная цена открытия LCURRENTPRICE NUMERIC Официальная текущая цена LCLOSEPRICE NUMERIC Официальная цена закрытия QUOTEBASIS STRING Тип цены PREVADMITTEDQUOT NUMERIC Признаваемая котировка предыдущего дня LASTBID NUMERIC Лучшая спрос на момент завершения периода торгов LASTOFFER NUMERIC Лучшее предложение на момент завершения торгов PREVLEGALCLOSEPR NUMERIC Цена закрытия предыдущего дня COUPONPERIOD NUMERIC Длительность купона MARKETPRICE2 NUMERIC Рыночная цена 2 ADMITTEDQUOTE NUMERIC Признаваемая котировка BGOP NUMERIC БГО по покрытым позициям BGONP NUMERIC БГО по непокрытым позициям STRIKE NUMERIC Цена страйк STEPPRICET NUMERIC Стоимость шага цены STEPPRICE NUMERIC Стоимость шага цены (для новых контрактов FORTS и RTS Standard) SETTLEPRICE NUMERIC Расчетная цена OPTIONTYPE STRING Тип опциона OPTIONBASE STRING Базовый актив VOLATILITY NUMERIC Волатильность опциона THEORPRICE NUMERIC Теоретическая цена PERCENTRATE NUMERIC Агрегированная ставка ISPERCENT STRING Тип цены фьючерса CLSTATE STRING Статус клиринга CLPRICE NUMERIC Котировка последнего клиринга STARTTIME STRING Начало основной сессии ENDTIME STRING Окончание основной сессии EVNSTARTTIME STRING Начало вечерней сессии EVNENDTIME STRING Окончание вечерней сессии MONSTARTTIME STRING Начало утренней сессии MONENDTIME STRING Окончание утренней сессии CURSTEPPRICE STRING Валюта шага цены REALVMPRICE NUMERIC Текущая рыночная котировка MARG STRING Маржируемый EXPDATE NUMERIC Дата исполнения инструмента CROSSRATE NUMERIC Курс BASEPRICE NUMERIC Базовый курс HIGHVAL NUMERIC Максимальное значение (RTSIND) LOWVAL NUMERIC Минимальное значение (RTSIND) ICHANGE NUMERIC Изменение (RTSIND) IOPEN NUMERIC Значение на момент открытия (RTSIND) PCHANGE NUMERIC Процент изменения (RTSIND) OPENPERIODPRICE NUMERIC Цена предторгового периода MIN_CURR_LAST NUMERIC Минимальная текущая цена SETTLECODE STRING Код расчетов по умолчанию STEPPRICECL DOUBLE Стоимость шага цены для клиринга STEPPRICEPRCL DOUBLE Стоимость шага цены для промклиринга MIN_CURR_LAST_TI STRING Время изменения минимальной текущей цены PREVLOTSIZE DOUBLE Предыдущее значение размера лота LOTSIZECHANGEDAT DOUBLE Дата последнего изменения размера лота CLOSING_AUCTION_PRICE NUMERIC Цена послеторгового аукциона CLOSING_AUCTION_VOLUME NUMERIC Количество в сделках послеторгового аукциона LONGNAME STRING Полное название бумаги SHORTNAME STRING Краткое название бумаги CODE STRING Код бумаги CLASSNAME STRING Название класса CLASS_CODE STRING Код класса TRADE_DATE_CODE DOUBLE Дата торгов MAT_DATE DOUBLE Дата погашения DAYS_TO_MAT_DATE DOUBLE Число дней до погашения SEC_FACE_VALUE DOUBLE Номинал бумаги SEC_FACE_UNIT STRING Валюта номинала SEC_SCALE DOUBLE Точность цены SEC_PRICE_STEP DOUBLE Минимальный шаг цены SECTYPE STRING Тип инструмента
Интересно, сколько веток на форум под названием "Программирование на языке Lua" посвящены именно программированию на языке Lua? Штук 10 наберётся? Отладка QUIK 8.11, Отладка QUIK 8.12, Отладка QUIK 1234.5678... Программисты обеспечены работой до конца времён: ронять терминал и восстанавливать его взад.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
TGB, Дык в то время на планете Земля ещё водились программисты! А нынешний козёл, который за полвека никак не может нормальную операционку написать, так до сих пор и дрочит своими "версиями"! Именно поэтому он и стал самым богатым человеком в мире.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
TGB, Да я во всех темах пишу, которые меня как-то заинтересовали. Но вот специализированную ОС под задачи торговли - такого я ещё не видывал ни разу за всю свою (не очень-то и короткую) жизнь.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
1. Так Ваш скрипт сам ничего не умеет? У Вас парсятся (!!!) какие-то там "сайты с аналитикой"? И Вы ещё там ловите какие-то сраные миллисекунды?! 2. Мой скрипт ТОЖЕ "на основе базовой (выбранной) стратегии автоматически выставляет заявки и отслеживает сделки" - для этого ему вполне достаточно голого Lua. 3. О, Господи! У Вас даже стратегии нет? У моего так ГИБКАЯ стратегия, алгоритм меняет поведение в зависимости от поведения рынка здесь и сейчас (причём как рынка вообще, так и поведение по каждому конкретному тикеру в частности), от настроек, заданных юзером (именно они и меняются в диалоге при необходимости) и торговлю ведёт именно по ней, а не по каким-то там "альтернативным стратегиям", причём торговля ведётся именно реальная - за каким хреном нам виртуальная торговля? К тому же, по закону Мэрфи, как только "происходит переход на более прибыльную стратегию", немедленно становится эффективной та самая стратегия, с которой Вы только что ушли.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Незнайка, Продукт, написанный для себя резко отличается от продукта, написанного для других. По крайней мере, должен отличаться, как минимум, на порядок более мощной отладкой и наличием развёрнутой документации. Код же вообще может не поставляться никому и никогда - интеллектуальная собственность, ноу-хау и прочая хрень.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
TGB, Ответ, может, и достойный, но не на мой вопрос: кому В ПРИНЦИПЕ могут пригодиться "реализованные автором средства, которых нет изначально в qlua"? НА КОЙ они хоть кому-нибудь нужны? ЧТО это может кому-то дать в самом идеальном случае, помимо головной боли от потенциальных новых глюков? Должно же быть какое-то представление о целевой аудитории! У меня лично фантазии не хватает.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
TGB, И я много раз писал: язык - дерьмо, Квик - набор глюков, не исчезающих, а скорее пополняющихся от версии к версии, но АБСОЛЮТНО ВСЮ требуемую юзеру функциональность "на этом на всём" написать МОЖНО! И любые примочки доморощенных "сторонних исполнителей" - библиотеки, внешние модули, не говоря уже про "специализированную ОС" - только добавляют глюков в этот винегрет. Организация диалога - в миллион раз более сложная штука, чем вся эта несчастная организация торговли с потрохами! Ну какой может быть диалог при торговле, ну какой? Что там вообще юзеру делать? Какие там могут быть "собственные сложные команды, задаваемые в командной строке формы диалога"? Скрипт может быть написан вообще без диалога! Утром включил, вечером выключил. Или даже зимой включил, летом выключил! Я как-то раз даже склепал такую версию своего скрипта, за 5 минут (ломать - не строить), в результате объём когда полегчал вдвое, скрипт заработал с первой же попытки. Только на него скучно смотреть - основная версия гораздо более информативна, можно развлечься самостоятельной торговлей с её помощью. Да и то это не диалог, а всего лишь индикация. Самим же диалогом я пользуюсь вообще не каждый день. Возможно, даже не каждую неделю. И у меня просто фантазии не хватает, что же ещё туда можно впендюрить такое, что бы хоть когда-нибудь понадобилось пользователю.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
TGB, Ну да, в моём скрипте нужен диалог. И он прекрасно реализован с помощью парочки lua-таблиц: одна основная, другая - контекстное меню, всплывающее по клику на строчку первой. И там реализованы абсолютно все возможности, которые мне требуются. Я даже и не знаю, что ещё пожелать!
Я много написал диалоговых программ в своей жизни, и я утверждаю, что ЛЮБОЙ диалог, основанный НЕ на событиях будет убогим по функциональным возможностям. Вы тут описали некое средство, как рисовать картинки - и только. А в диалоге (НОРМАЛЬНОМ диалоге) должны быть и горячие клавиши, и контекстно-зависимые реакции (хелп или локальные меню блоков), то бишь не только примитивно-деревянная организация "подменю", и неоднородные, редактируемые, настраиваемые, горизонтальные, вертикальные, трёхмерные меню и прочая, и прочая, и прочая. НА КОЙ нужны эти Ваши "весёлые картинки"?
Михаил Филимонов, Почитал форум, попробовал на зуб язык, написал скрипт, реализовал [почти] всё что хотел, Практически никаких претензий не имею ни к Квику, ни к Lua. А вот "кастрированные API" сразу послал НА, ни секунды не задумываясь. Так, мож, "дело было не в бобине"?
Nikolay, КАКАЯ "ситуация бывает редко"? У меня цена ВСЕГДА определяется ТОЛЬКО опросом и ТОЛЬКО по LAST. И цена у меня всегда "из настоящего". И все сделки я делаю ТОЛЬКО по ней. И нет проблем!
Охота вам фигнёй маяться? Имеем: 1. Ваш Квик и ваш брокер справляются с работой вполне удовлетворительно - в противном случае вы бы не работали с этим брокером и/или с этим софтом. 2. А раз так - какого хрена вы пытаетесь всё время что-то там контролировать? Заняться больше нечем? 3. Цена последней сделки в Квике есть ВСЕГДА - даже если отрублена связь. Так ПОВЕРЬТЕ ему, блин, считайте эти данные априори актуальными и достоверными, не занимайтесь хернёй! Я вот вообще за все эти месяцы моей работы с Lua НИ РАЗУ не выводил время. ВААПЩЕ НИ РАЗУ! Есть LAST - какого рожна вам ещё надобно? И никаких коллбеков не использую - тупо считываю последнюю цену ОПРОСОМ! Её обновление - проблемы Квика и брокера, а не мои - смотри пункт первый. 4. Я собираюсь (пока не реализовано из-за идиотской кучи прерываний на одно событие) снимать заявки, если они не срабатывают в течение 5 минут - для этого мне ТОЖЕ не нужны никакие часы сервера или клиента - я и сам в состоянии это посчитать. 5. OnParam не использую и даже не знаю, что это такое. И знать не хочу!
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
О существовании lup я узнал только из этой ветки. Прошёл по ссылке и сразу напоролся на: Проблемы начинаются при показе модальных окон и popup-меню. Пока их не закроешь, поток main дальше не выполняется (видно по необновляющемуся заголовку окна и прерыванию записи в файл log.txt).
Следовательно, нужно выбросить нафиг эту библиотеку и написать диалог на чистом Lua: поток main спокойно выполняется, заголовок окна обновляются, запись в файл log.txt ведётся, и пилювать скрипту на все эти "модальные окна". Не первый уж месяц работаю с этими контекстными "всплывающими" меню, реализованные как Lua-таблицы - ни единого нарекания!
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
TGB, Мой робот простой, ибо задача организации торговли достаточно примитивна. Именно поэтому я и создал его в виде обычного QLua-скрипта. НИКАКИХ дополнительных возможностей никакая OS_Quesha мне предоставить не может.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
TGB, Дык в самом начале написано, чёрным по белому: "Программа представляет собой специализированную операционную систему реального времени, работающую в среде программного комплекса QUIK". То есть она предназначена именно для сраной прикладной задачи организации торговли ценными бумагами в QUIK. У меня сейчас аж две такие задачи крутятся на этом компе.
НА КОЙ, простите, мне эту хрень устанавливать у себя? У меня торговля прекрасно организована - зачем мне её гробить? Зачем искать на свою задницу приключений? Какое мне дело до того, что она "без перезапуска работала месяцами"? КАК ИМЕННО она работала? Квик, вон, тоже работает месяцами, а глюков в нём просто НЕМЕРЯНО!
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Программа реализует в скриптовом языке программирования QLua параллелизм выполнения его функций, обеспечивая использование многопроцессорности вычислительных систем. Здесь и одному процессору нечего делать - тем более, что основной язык вообще интерпретируемый.
Но вместо sleep используется API-функция OS_Quesha ожидания либо истечения интервала времени (паузы циклической функции), либо появления данных во входных очередях таких функций. Что ещё за "либо"? Sleep и есть функция ожидания. А появление чего-то там в очередях иногда (очень редко) есть основание для передачи управления по прерыванию - те самые коллбеки, и они никого отношения не имеют к циклу в main. По-нормальному, как раз main должна бы входить в режим "вечного" ожидания, если сделать коллбек и по таймеру, и получать управление взад только по OnStop чего она, кстати, и не получает вообще (точнее, получение управления не гарантировано), так что приходится выполнять завершающие действия прямо в OnStop.
Взаимодействие циклических функций между собой после запуска на выполнение в потоках, сводится к чтению своих очередей и записи своих данных в чужие очереди. То есть на обслуживании данных вне очереди поставлен большой и жирный крест? Похвально!
Дополнительно, предоставляются средства синхронизации, которые могут потребоваться при использовании модифицируемых общих данных потоков, но, по возможности, этого лучше избегать. СТОЯТЬ! НЕ ДЫШАТЬ! НИЧЕГО НЕ МОДИФИЦИРОВАТЬ! ОПЕРАЦИОНКА РАБОТАЕТ! Подобная ситуация была гениально описана много лет назад: Контpоллеp пpеpываний - обpаботчику пpеpываний: Тут это... юзеp кнопку нажал... Главная пpогpамма - обpаботчику пpеpываний: Hе деpгайся! Подеpжит и отпустит. ... Контpоллеp пpеpываний - обpаботчику пpеpываний: Тут это... юзеp опять кнопку давит... Обpаботчик пpеpываний - PC speaker'у: Hу скажи ему что-нибудь, пусть отвяжется! PC speaker - юзеpу: Биип! ... Контpоллеp пpеpываний - обpаботчику пpеpываний: Тут юзеp Ctrl-Alt-Del жмет! Главная пpогpамма - обpаботчику пpеpываний: Да отpуби ты этому зануде клавиатуpу! Мы тут делом заняты...
1) схема обработки колбеков в виде очередей событий QUIK, минимизирующих влияние последующей обработки событий на основной поток запуска скриптов и генерации событий QUIK; Вы там сделали, наконец, чтобы одно событие вызывало только ОДНО прерывание или "как всегда"?
2) сохранение истории одноминутных и пятиминутных котировок ценных бумаг в базах sqlite; О, Господи! Это ещё на кой? Чтобы процессор чем-то занять?
3) оперативное сохранение текущих котировок 22-ух (по 18 параметрам) торгуемых бумаг в циклических буферах с задержкой < 1 млсек относительно момента возникновения событий OnParam; И эти миллисекунды ловят... не лечится.
2. Создание настраиваемого диалога с пользователем. Пользователь имеет возможность добавлять в форму диалога свои меню. А чего же ему не иметь? Я вот создал себе диалог с контекстными меню на чистейшем Lua, и горя не знаю.
3. Ведения журналов OS_Quesha (диалога и отладки) с милисекундным разрешением. Постоянный вопрос за всё время чтения этого опуса: НА КОЙ это всё?
4. Запуск на выполнения Lua-функций в фоновом режиме в отдельных потоках. Тот же вопрос.
5. Работа с контрольными точками (для продолжения работы с прерванного, по любой причине, места). УПАСИ, ГОСПОДИ! Только корректный перезапуск скрипта! Опять ищем на свою задницу приключений?
7. Ведение истории котировок (одноминутных и пятиминутных) в базах SQLite. Лично я считаю свечи сам. Тупо, по цене закрытия, как среднее арифметическое (все эти "японские премудрости" я давным-давно послал на), "зато" сразу по нескольким интервалам: 15-секундные, полуминутные, минутные, двухминутные и далее со всеми остановками. Сначала считал по 16 интервалам, потом сократил до 9, поскольку более тяжёлые свечи мне оказались нафиг не нужны. В любом случае, затраты времени на эту арифметику ничтожны, несмотря на то, что считается это всё также на чистейшем Lua.
8. Ведение текущих дневных котировок в векторах оперативной памяти. ПАЦТАЛОМ!
9. Эффективная схема обработки событий QUIK в виде циклических потокобезопасных очередей получения данных колбеков (реализованных без синхронизации). Да хрен бы с вашими "циклическими потокобезопасными очередями"! Сделали ОДИН коллбек на ОДНО прерывание? За это (и ТОЛЬКО за это!) юзеры вам скажут спасибо.
10. Обеспечение интерфейса реализации торговых индикаторов на основе текущих котировок. Никогда не понимал, на кой вообще нужны индикаторы. Есть же скрипт! И этого более, чем достаточно.
11. Обеспечение виртуальной торговли ценными бумагами. ЧАВО?! А это что за зверюга такая?
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Дожили! Уже и операционку под каждую сраную прикладную задачу разрабатывать будем! Бегло пролистал пост - УЖАС!!! На досуге почитаю внимательнее.
Когда-то давно мен включили в соавторы одной операционки, которая так и называлась: ОСРВ - операционная система реального времени. Примерно тогда же я давал определение: "Операционная система реального времени - это задача, которая мешает моей задаче работать в реальном времени". Но мне и в страшном сне не могло привидеться, что ОС будет разрабатываться под одну задачу - тем более, смехотворно нетребовательную к ресурсам.
Пока пролистывал текст, глаз зацепился за: "В скрипте-шаблоне создания роботов с использованием OS_Quesha запускается 16 потоков". Слов нет. Даже матерных. Вернее, есть одно, на "п" начинается, на "ц" заканчивается. И, слегка кося под Нострадамуса, предрекаю: эта хрень не будет работать НИКОГДА!
Максим, Скрипт на Lua - это ИНТЕРПРЕТИРУЕМЫЙ код. Проще говоря, текст. Кто ж его интерпретировать (читать) будет? Из командной строки можно запустить разве что Квик.
Старатель, Совершенно верно: у меня всегда открыта ТТТ, и в неё добавлены все интересующие меня инструменты и параметры. И я принципиально не пользуюсь ParamRequest - скрипт у меня работает только с Квиком, позволяя торговать и мне, в режиме кентавра - либо через команды скрипту, либо самостоятельно, через стаканы (о моих сделках в этом случае он узнаёт через OnTrade). Мало того: я ТОЖЕ "истинный ценитель автоматизации", у которого в терминале открыто не просто "только одно окно: Доступные скрипты", но и в окне этом только один скрипт. Я пока ещё торгую и сам "по инерции", но уже почти все тикеры отдал на откуп скрипту - доказано, что он торгует лучше меня. А потому ТТТ заказана, в основном, для него, и может быть свёрнута в иконку и тихонечко лежать там, не раздражая юзера своим мельтешением.
Да, есть ещё "окна, созданные скриптами" - сводная таблица и контекстное меню, всплывающее по клику на строчку этой таблицы. А ещё у меня есть таблица "состояние счёта" (для контроля - я туда редко заглядываю), таблица заявок (с той же целью), позиции по деньгам и клиентский портфель, показывающий мгновенную ликвидность. Всё для юзера. Я даже написал версию, которая торгует только сама и выводит только текущее состояние денег по каждой валюте (3 строчки, 5 столбцов), но на неё скучно смотреть - она показывает только "то, что было", но не "то, что будет".
Старатель, Это Вы не в теме. Скрипт ТОЖЕ не может "выполнить действие" - он может лишь послать заявку, и за это время котировка ТОЖЕ может поменяться. Я вначале собирался ставить в заявку BID или OFFER - как раз для мгновенного исполнения, но потом передумал, ибо это ТОЖЕ ничего не гарантирует. Но для любого тикера всегда существует некий "дребезг", и потому в 99 случаях из 100 заявка по LAST всё равно сработает в течение пары минут, если не секунд, так что работает мой скрипт ТОЛЬКО по LAST и ТОЛЬКО опросом ТТТ. И только за сегодня у него уже есть одна сделка у одного брокера (рублёвая) и шесть сделок у другого (долларовые). ЧТД!
Александр, Ну так и получать надо эти "актуальные данные" тупым опросом ТТТ - тыщу раз уж об этом писал! Даже если интернет отрублен или биржа не работает - даже тогда там есть какие-то данные, вполне себе "актуальные" - просто курс не движется, и робот, который "используется для автоматизации", вполне в состоянии их читать. Что мой и делает раз в секунду. Данные - пальчики оближешь, актуальнее не бывает, надёжнее тоже не бывает, ждать ничего не надо. НУ НАФИГА вам искать на свою задницу приключений?
Евгений, А я вообще не припомню случая, чтобы я отвечал на вопросы, если не знаю на них ответа. И в этой ветке я тоже ЗНАЛ ответ: НЕ МОЖЕТ причиной Ваших проблем быть "слабость процессора". О чём и сообщил. А флуд начали именно Вы. Так "не лучше ль на себя кума, оборотиться"?
Я сюда пришёл... а, ну да - в конце сентября, АБСОЛЮТНО ничего не знающий про Lua (но кое-что знающий про Квик). И мне здесь реально помогли несколько раз. Сейчас же я знаю про программирование на Lua практически всё [что мне необходимо], и иногда помогаю другим - "долг платежом красен". Ну, а "что называется били себя в грудь" тоже именно Вы, изображая себя экспертом. За что и получили.
Евгений, А кто сказал, что вы тут эксперты? Достаточно посмотреть на здешние ветки, на проблемы, которые здесь обсуждаются, на глюки, которые не исправляются годами, на версии софта, которые плодятся, как тараканы... Вот, скажем, есть в Квике таблица заявок - скрипт тут вообще никаким боком, она для юзера. Так вот: при разрыве связи в этой таблице некоторые строки просто пропадают, на их месте белые пятна, которые так и сидят до конца сеанса. При этом, если создать новое окно заявок (или перезапустить Квик), то информация всех этих строк на своих местах. Так что же требовать от поддержки языка (на котором мало ли что можно написать), если даже простейший диалог такой глючный? А "проверить как он бабло рубит" я и сам в состоянии - для этого вполне достаточно знаний по арифметике для первого класса. А ошибки... вот у меня есть три задумки, которые мне пока просто лень реализовывать: а) убрать заглушку "1 заявка - 1 лот" (иначе могут проявляться неприятные глюки по OnTrade, я об этом писал) б) снимать заявки, которые не сработали в течение 5 минут и в) попробовать поторговать с плечом (чисто из спортивного интереса, чтобы посмотреть, насколько выгодно кормить брокера). А больше я и не знаю, чего от скрипта желать: МЕНЯ он и так полностью устраивает - это и так вполне себе "конфетка".
Да, видел я здесь пару-тройку "братьев по разуму". Но не больше.
Евгений, Я же сказал: я н продаю скрипты. К тому же, это не просто первый, но и единственный мой крипт на Lua. А его секретов я и сам не знаю. Нередко бывало, что я возмущался: "Да что же ты, скотина, делаешь?! Нужно продавать, а ты покупаешь"! Но в 9 случаях из 10 я был вынужден признать его правоту: он понимает рынок лучше меня.
Евгений, Я писал этот скрипт для себя, любовно, а не для продажи. И приносит он мне все 100% того, что зарабатывает. 2% в день - это слишком круто для него, но пару раз случалось и такое.
Какой можно делать вывод из этого? Какой угодно, кроме "слабоват процессор". Задачи торговли просто смешны по нагрузке на процессор (да и на сеть тоже). На кой нужна куча потоков или чтобы "каждый график или хотя бы вкладка были в отдельных потоках" - без понятия. У меня один скрипт, работает "вот прям ща" на двух Квиках (двух разных провайдеров), загрузка ЦП (двухъядерник с двумя гигами ОЗУ) болтается в районе 5-10%, сетевая нагрузка тоже практически пуста. Ах, нет - ОЗУ всё-таки 4 гига. В общем, "дело было не в бобине".
Nikolay, Лично у меня интерфейс с сервером отсутствует как класс. Интерфейс с Квиком ужат до предела, до пары-тройки утилит. А интерфейс с юзером имеет все возможности, которые вообще можно выжать из чистого Lua.
Да как угодно "эта группа формируется"! Объект реакции на событие типа "группа событий" не может быть втиснут в очередь событий - здесь требуется именно стек очередей, поскольку все объекты этой очереди должны быть обработаны "вне очереди".
Nikolay, Оба-на! Я когда-то занимался диалоговыми программами, и у меня всегда имело ОГРОМНОЕ значение, где событие прошло! В частности, обработчики событий в главном и контекстном меню моего скрипта совершенно разные. Кроме того, "очередь событий" автоматически делает невозможной иметь объект реакции типа "группа событий", что накладывает просто крест на хоть сколько-нибудь сложном диалоге. Наконец, обмен событиями между скриптами (тем более, на Lua) - это идеологический маразм, это не будет работать НИКОГДА! В крайнем (и далеко не лучшем ) случае это будет служить ВЕЧНЫМ источником глюков. А глюков в Lua и без того более, чем достаточно.
Игорь Б, По условию там вроде как МНОЖЕСТВО скриптов, и все они должны ПИСАТЬ, готовя сводную таблицу. Я вижу такое решение файл - один, но для каждого скрипта выделяется собственное пространство (фиксированного объёма). Далее они читают и пишут только в свои зоны, а общий диспетчер (который эту таблицу формирует) ставит флаги "прочитано, можно писать следующую порцию". В любом случае, работа множества скриптов с обменом информацией через файл есть геморрой.
Kolossi, Подкидываю идею: объединить "несколько роботов" в один и не мучиться.
Ну, а если не хочется, то есть только два способа: через файл и через ОЗУ двойного доступа (для Lua нереально). Поэтому (если s_mike прав) пусть ГЛАВНЫЙ скрипт, запускаемый первым, создаёт эту общую таблицу, записывает её ID в файл, а остальные читают при запуске. А скрипты могут ничего не проверять, если "главный скрипт" по выходу убьёт их всех (правда, я не знаю как это сделать и можно ли сделать вообще).
getParamEx (без всяких "двоек"). Акций ММВБ смешное количество - я опрашиваю одновременно и акции СПБ. Да, скрипт у меня один-единственный на все случаи жизни.
foobar, А я вообще с сервером не связываюсь: все данные получаю только от Квика, команды даю тоже только ему. В мейне стоит тупой цикл:
Код
while f do
r(); -- раз в секунду запускаем утилиту опроса
sleep(1000); -- текущих данных и принятия решений по ним
end;
А внутри ежесекундного прерывания ещё один тупой цикл с опросом:
Код
function r() -- мелкий обработчик прерывания по таймеру
for i=0,N-1 do -- цикл по тикерам (прорисовка таблицы)
s=a[i][2]; -- предыдущее и последнее значение курса
a[i][2]=tonumber(getParamEx(a[i][1][0],a[i][0],"LAST").param_value);
...
Таким образом, коллбэки мне нужны только на OnTrade. Не хило бы, конечно, иметь ещё и по OnOrder, но там множество разных глюков, разбираться с которыми не имею ни малейшего желания, а потому выкинул это прерывание вообще. Никто ничего не жрёт, ничего не помирает, таблица спокойно обновляется, команды на покупку или продажу передаются в Квик - что ещё нужно от скрипта? А в более тяжёлом (15-секундном) прерывании (вызываемом прямо из этого, то есть фактически тоже в мейне) я считаю свечи по разным периодам и ещё кое-что. Мне - ндравицца!
swerg, Я, милок, уже пару раз здесь говорил, что с раннего детства терпеть не могу распальцованных дураков и редко спускаю им их "поучения". А моя некомпетентность привела к тому, что мой скрипт уже с месяц как полностью рабочий, и в последние дни я занимаюсь тончайшей шлифовкой алгоритма. Точнее, занимался - последние два дня я просто любуюсь его работой, и только за сегодня он уже принёс мне 1.6% прибыли, а ещё не вечер! Надеюсь, к концу дня будет 2%. Впрочем, неважно. И ему НАСРАТЬ на бесконечно меняющиеся версии софта - он [пока что] прекрасно уживается с любыми. Осталось разве что убрать кретинизм с "1 заявка - 1 лот", и больше я вообще от него ничего не хочу. Так что НЕ СОВЕТУЮ разным умникам "отвечать на мой идиотизм" - чревато. Вот подобные "отвлечённые" тяфтяфки - это сколько угодно.
s_mike@rambler.ru, Лапуль, что-то мне подсказывает, что "базовых знаний" у меня раз эдак в сто поболе, чем у Вас. Автор ветки КУПИЛ рабочий Lua-скрипт, а НЕ какую-либо скомпилированную библиотеку, на которые конечным пользователям именно НАСРАТЬ - они не знают, что это вообще такое, и знать не хотят. И правильно делают! Мало того: у автора НИ ЗВУКА не сказано про компиляцию, кроме диагностики, содержащей слова "in precompiled chunk". Мало того: довожу до Вашего сведения, что скомпилированный код - это ТОЖЕ код, только на другом языке! И конечному пользователю АБСОЛЮТНО насрать как на компиляцию, так и на декомпиляцию - он имеет полное право вообще ничего не знать даже о существовании того и другого - он купил конечный продукт, который ОБЯЗАН работать!
Да, "у меня через слово упоминаются экскременты", и это НЕ случайно. Ибо подобная математика есть ГОВНО! IF под каждую сраную версию софта, которые плодятся как тараканы, требуется вмешательство разработчиков конечных продуктов под неё THEN такой софт есть ГОВНО! И подобные Вам программисты, гнущие пальцы с вумным видом и немедленно затыкающие хлебальники при первом же щелчке по носу (как это сделали лично Вы в соседней ветке), в моём понимании, характеризуются тем же термином.
И автор будет дурак, если деньги вернёт. Он, насколько я понимаю, писал скрипт на ЯЗЫКЕ Lua, который вряд ли претерпел значительные изменения (по крайней мере, в описании языка). А если скрипт вдруг ПЕРЕСТАЛ работать в новой версии, причём он РАБОТАЛ в той версии, которая была рабочей в момент разработки скрипта, то автор-то здесь при чём? Сам факт, что текущая версия имеет номер 8.8.4.3 говорит о том, что все они есть полное дерьмо. ВСЕ ДО ЕДИНОЙ!
P.S. Моему скрипту НАСРАТЬ, какая версия Квика используется (у одного брокера это 8.7.1.3, у другого 8.10.3.1, причём, насколько я помню, я раз 5 эти версии обновлял, даже не глядя, что там за изменения произошли) - именно поэтому писал свой скрипт (и неоднократно предлагал делать то же самое другим разработчикам) на чистейшем Lua, который ОБЯЗАНЫ поддерживать ВСЕ библиотеки! А если вдруг И ЭТО не так, то гнать надо взашей всех разработчиков!
Сергей, Да плевать на все "шаги фьючерса"! Попробуйте вывести в ветке else что-то типа: F:write(string.format("x1=%1.5f x2=%1.5 x1*10=%1.5f x2*10=%1.5f\n",x1,x2,x1*10,x2*10));
Сергей, Скорее всего, никакой ошибки нет, поскольку на самом деле числа там что-то вроде 55.30001 и 55.29999 или что-то в этом роде. а вот "переводить в целые и работать в целых" не получится - никаких целых в этом языке просто нет.
Nikolay, Да плевать, кто там что "отдаёт", а что "режет"! Данные должны быть корректные ВСЕГДА. И именно язык со своей долбаной динамической типизацией вносит сюда неопределённость.
А я уже "научен горьким опытом" - у меня давным-давно в таблицах стоит тип "строка" на всякий пожарный. Но даже это не всегда помогает! Что до прерываний - мне просто СТЫДНО писать на клиенте-интерпретаторе заглушку на многократное поступление прерываний, а ещё и вразнобой - тем более, что глюкам этим много лет. Но что делать - поставил: "одна заявка - один лот". На код смотреть тошно, но терплю...
Ну да, да - это я скопировал новый код, раньше было просто чтение поля, которое задавалось как число, и без всякого tonumber. Тоже не работало. А сортировка и так работает "спицифиццски" - ей по барабану, стоит там минус в начале или нет. Тоже маразм но я уже привык.