что мешает Вам самим написать аналоги стандартных индикаторов на qlua и использовать получившиеся функции к имеющимся у вас источникам данных? вам даже не придётся открывать для этого графики и строить индикаторы.
к пример: OnAllTrades. Как вы забиндили у себя этот коллбек? как он у вас вызывается, в каком цикле, как работает/приостанавливается работа основного скрипта пользователя. если можно, как указал выше - напишите в "псевдокоде".
Михаил, не будем разводить тут "писанину" на 100 страниц - просто приведите если не затруднит в псевдо-коде" тот кусочек кода, который отвечает у вас за вызов и работу коллбеков. остальное, попытаюсь "додумать" сам...
Серж пишет: при обращении к x, произойдет блокировка, изменение данных и разблокировка.
значит ли это, что Вы в qlua переопределили стандартные макросы lua_lock/lua_unlock с пустышек на критические секции или, что/то в этом духе? и если да - то и нам можно теперь ими пользоваться?
я просто пока не могу понять, как скрипт прерывается при приходе очередного колбека (без всяких майнов и прочего). вот и всё. если у вас нет ответа на мой - я постараюсь найти его сам. но это очень прискорбно, что я не могу найти ответа на такой, казалось бы простой вопрос тут.
попытаюсь "ответить" за вас: обычно, из примеров кода "из интернетов" - делают, что-то такое:
Код
beginthread
while script1.executed
doscript.1()
end
while script2.executed
doscript.2()
end
while script3.executed
doscript.3()
end
endthread
doscript.N()
{
if FOnParam then
do
pcall(OnParam,...)
continueScript()
end
else
runScript()
end
}
подозреваю, что возможно у коллбеков своё отличное от другой части скрипта состояние (дочернее). а с вашей стороны уже идёт в qlua учитывание всего этого (мы сейчас не про синхронизацию, про само переключение)
то есть, вопрос, по сути, можно развернуть так: есть петля в теле скрипта (без майн), есть коллбеки. на время коллбеков петля в скрипте прерывается и идёт обработка коллбека. как?
Михаил, я уже объяснил вполне доступно: есть стандартный message loop в библиотеке, есть код в коллбеках - и то и то вполне себе параллельно работают. как? напрашивается ответ, что на время прихода коллбеках идёт переключение работы кода на них, а потом возобновление работы кода из message loop библиотеки. и причём, без потоков и корутин.
на самом деле, как Вы наверно поняли - я про vclua. там есть message loop, есть одна "мега"-оконная функция, которая ретранслирует по надобности сообщения другим контролам. вот и интересует механизм прерывания этой петли на время прихода колбека.
Такая ситуация: 1. имеем некую внешнюю C-библиотеку подключенную через "require". В ней создаётся объект и в "вечном" цикле идёт работа с его свойствами/методами. 2. в основном скрипте есть коллбеки в которых идёт своя работа 3. также, в основном скрипте есть код, который не находится в коллбеках и в "майне". --------------------- а теперь, вопросы: а)правильно ли я понимаю порядок выполнения этой программы: Сначала выполняется п.3, потом, п.1. если есть/приходит колбек то, выполнение п.1 приостанавливается на время обработки коллбека и далее возобновляется? б) если сделать "вечный" цикл в одном из коллбеков - то, работа "другого вечного цикла в библиотеке" приостановится на неопределённое время?
--------------- вопросы на самом деле - не глупые, но просто требуют окончательного уточнения
ни тупайл ни qlua на данный момент САМИ не открывают графики и не строят. Только таблицы. На qlua можно только задать функцию обработки расчёта свечек (что в принципе и делает OnCalculate в скриптах индикатора). Разработчикам уже не раз говорили на полную убогость данной ситуации. То, что Вы просите - реализовано у них в платном функционале системы серверных плагинов. Но разработчики пока не открыли для нас этот интерфейс, т.к. они сами пишут и продают плагины.
Michael Bulychev пишет: Тот пример что Вы прислали - это просто пример реализации наследования от базового класса. Для этого надо сначала определить сам базовый класс, о чем я и просил Вас. Напишите в свободной форме что вы хотите получить.
Например, так:
Код
QControls = class(TComponent) //что такое tcomponent - см. в Delphi VCL
и пошло
...
и поехало
...
end;
Отсюда, имеем: QControls - базовый класс для всех визуальных контролов, которые нам так сильно нужны. Либо, давайте нам хендл окна вкладок квика, относительно которого мы будем отталкиваться, строя сами окна-контролы. Далее, каждый скрипт имеет базовым: класс QScript
Код
QScript = class(QObject or QPlugin)
пока думаю над этим
...
end;
Сейчас же, Вы заставляете нас, по сути, писать свою реализацию vcl (не путать с qvclua или vclua), хотя просто могли сделать её общедоступной. Чтоб нам стабильно использовать ту "vclua", которая гуляет в интернете - надо переписать дельфовую или лазаровскую vcl (lcl). Что весьма нетривиально, т.к. придётся отказываться от многих корневых классов и переписывать их, т.к. они заточены на взаимодействие с приложением и от него они отталкиваются, а не с плагином.
это не пасхалка - просто сейчас интеграция lua в quik находится на зачаточном уровне - поэтому даже сами разработчики далеко не всё знают.
касаемо всего остального и многопоточной работы и Ваших выводов по этой теме, могу только сказать, что Вы похоже совсем не читали мной приведённый выше форум: quik2dde.ru Там, как-раз многое детально изучено и выявлено того, чего до сих-пор нет в документации.
Список доступных для транзакций инструментов, получение списка инструментов для совершения транзакций с учетом различных аккаунтов у одного и того же брокера.
Список доступных для транзакций инструментов, получение списка инструментов для совершения транзакций с учетом различных аккаунтов у одного и того же брокера.
------------------------------------------------------------------------- Вам в следующий раз нужно более конкретно задавать вопрос, а то, получается аж целую ветку на это потратили:)))))))
Список доступных для транзакций инструментов, получение списка инструментов для совершения транзакций с учетом различных аккаунтов у одного и того же брокера.
если вы про то, что нужно узнать какие бумаги доступны для лонга/шорта или какие в данный момент торгуются (по которым открыта торговая сессия) - то, это всё можно узнать с помощью той же QLUA и стандартных таблиц квика.
Список доступных для транзакций инструментов, получение списка инструментов для совершения транзакций с учетом различных аккаунтов у одного и того же брокера.
ну вы же сами говорите, что нужен статический список - ну так составьте его сами и для каждого счёта сделайте, так называемый класс, описывающий его поведение (доступность тех или иных бумаг для транзакций). информацию о доступности можно взять на основании приложений к брокерскому договору по этим счетам и фильтровать её раз в день или после каждого клиринга.
Список доступных для транзакций инструментов, получение списка инструментов для совершения транзакций с учетом различных аккаунтов у одного и того же брокера.
Albert Eritsyan пишет: тобы в случае исполнения сигала о входе в позицию с нескольких счетов клиента скрипт видел что в принципе не возможно с конкретного аккаутна и не выставлял по ним заведомо не выполнимые ордера и не тратил время на ожидание ответа и анализ причин отказа,
я думаю, самый правильный и действенный вариант в данном случае - это client-side. т.е. пишите на QLUA не большой пре-трейд модуль в котором: при поступлении сигнала на открытие позиции проверяете валидность этой транзакции следующим образом: для каждого счёта составляете доступный перечень классов и инструментов, а также перечень доступных операций. Этим Вы отсеете на собственной стороне часть транзакций, остаётся 2 пункта: брокер и биржа. брокер, в основном, отклоняет по риск-параметрам, редко когда по инструментам и классам. тут. как уже было сказано, никто не будет переписывать квик или ставить/писать/заказывать на брокерский сервер новый модуль. Соизмерять свои риски с теми, которые указаны в спецификациях к инструментам. Если к примеру, идёт 3 раза подряд отклонение транзакции и риск-параметры в норме то, можно просто опять же client-side сделать чёрный список (таблицу например) в которую добавлять эти классы/бумаги. Очень сильно на это похожее - существует в Wealth-Lab. Остаётся биржа: биржа уведомляет остальных участников двумя способами: через свой сайт и в любой другой но, письменной форме (как правило после форс-мажора). Список классов и инструментов насколько мне известно (могу ошибаться, конечно) не обновляется на бирже чаще - чем он обновляется в квике. так что с этой стороны - лишнего, ничего городить не надо.
Список доступных для транзакций инструментов, получение списка инструментов для совершения транзакций с учетом различных аккаунтов у одного и того же брокера.
не хочу повторяться но, такой момент: отказ на транзакцию может зависеть по трём причинам: 1. на основе данных о клиенте, которые меняются динамически. 2. на основе данных полученных от биржи, где параметры тоже динамические. 3. на основании риск-параметров брокера (или других параметров)
вопрос: кто и главное, как это всё дело будет учитывать? (вообще, это по сути повторение поста #17). Можно ли это сделать? можно, НО! не бесплатно. Есть ли от этого выгода? вопрос - спорный. если это всё надо только лишь для увеличения быстродействия то, существуют и другие методы повысить его.
И мне, кстати, толком не ответили, если даже внедрить такую систему: Что будет, если в один момент прошла транзакция на основании информации из старых списков, а в следующий момент списки изменились и оказалось, что новая связанная транзакция уже невозможна исходя из изменившихся списков?