![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Максим, и чем это решение лучше? Ведь для опроса состояния флага так же необходимо делать его периодическую проверку в MQL. Получается куда не копни, нужно постоянно мониторить изменение состояния чего либо, чтобы понять что пора забрать данные. А этот фраг можно и в самой dll хранить и там его проверять, что я и делаю. В твоем примере происходит неявный вызов dll для возвращения состояния флага.
проверка флага это очень быстрая операция. То есть вообще самая быстрая :-)
и в приведённом примере нет неявных вызовов:
InitDLL получил на входе int *flags, сохранил его где-то там у себя, Породил тред, который что-то считает и по завершению делает atomic_inc(flags).
Советнику остаётся только проверять flags[0].
проверка флага это очень быстрая операция. То есть вообще самая быстрая :-)
и в приведённом примере нет неявных вызовов:
InitDLL получил на входе int *flags, сохранил его где-то там у себя, Породил тред, который что-то считает и по завершению делает atomic_inc(flags).
Советнику остаётся только проверять flags[0].
Только тут простой проверкой флага не обойтись ведь, inter-thread синхронизация нужна, барьеры, atomic или мьютекс какой брать, не для каждого CPU актуально, конечно.
Именно проверять. В этом и есть ключевой момент. А я же предлагаю оповещать инструмент о том, что "задание" выполнено. То есть чтобы не приходилось тратить постоянные ресурсы на проверку. Пришло оповещение - получили данные.
проверка флага это очень быстрая операция. То есть вообще самая быстрая :-)
и в приведённом примере нет неявных вызовов:
InitDLL получил на входе int *flags, сохранил его где-то там у себя, Породил тред, который что-то считает и по завершению делает atomic_inc(flags).
Советнику остаётся только проверять flags[0].
Макс, ну с обратным вызовом ситуация пока ясна. будем использовать то, что есть и ждать когда разработчики добавят возможность обратного взаимодействия.
Хочу вернутся к вопросу GUI. Не важно на чем нарисованному. К примеру я делаю на шарпе, ты делаешь на Tcl.
Пока форма существует сама по себе трудностей никаких нет. Но очень хочется чтобы формы не летали сами по себе, а были привязаны к соответствующим чартам.
При установке родителя у созданной формы она размещается на нужном чарте. Но тут возникает проблема "сливания" окна с чартом и график просто зарисовывает "приклеенную" форму.
Предлагаю пока попробовать решить этот вопрос, так как все равно лежит не в области действий разработчиков МТ.
Ты пробовал свои GUI к графикам цеплять?
Только тут простой проверкой флага не обойтись ведь, inter-thread синхронизация нужна, барьеры, atomic или мьютекс какой брать, не для каждого CPU актуально, конечно.
А как реализованы всякие мьютексы? Всё через проверку и установку флагов, насколько я знаю. Вам в любом случае где-то в мкл потоке придётся проверять какой-то флаг.
Совершенно верно. Но пусть это происходит уже на самом нижнем, прикладном уровне, как например это работает с OnChartEvent. То есть сейчас мы это явно программируем (проверки), а можно все это перенести на прикладной уровень, о чем Ренат и сказал (предложил варианты).
у меня вот завалились :-) дарю - можешь скинуть в MS
066cd265-e2fe-468e-9492-4228e9759e38
8e1040ba-dc3e-4e2a-9208-e3ea8da9ad05
03dcd7cd-4b9b-4ff7-bff0-e0839a0f9d8b
d69f2c8c-de51-4557-8188-4ebb870da7da
a79a8cc6-f785-4268-bc4e-2deda0f1ecd0
f4f59f52-1da8-4f74-a71e-9aec1992674d
85608797-6015-456d-af64-ad7890120372
9289991a-e287-47fb-b595-6d719c1b7dbd
63d3b953-3229-4045-a82a-fc9e7795bb01
c75c4e0f-8320-42df-943c-9aada54b60eb
если что, обращайся - может ещё найду
Спасибо, сдал, получил бакс!
Спасибо, сдал, получил бакс!
так это весомо прибыльней скальпера ! готов отдавать в розницу guid по центу, ты их оптом сдаёшь по 1$/десяток. Профит ограничен только скоростью передачи :-) сколько-то там килобайт guid`ов в секунду
Заманчиво, черт побери. Так мы завоюем рынок подержанных GUIDов! И станем монополистами, создадим искуственный ажиотаж, как с биткоином и озолотимся!
Макс, ну с обратным вызовом ситуация пока ясна. будем использовать то, что есть и ждать когда разработчики добавят возможность обратного взаимодействия.
Хочу вернутся к вопросу GUI. Не важно на чем нарисованному. К примеру я делаю на шарпе, ты делаешь на Tcl.
Пока форма существует сама по себе трудностей никаких нет. Но очень хочется чтобы формы не летали сами по себе, а были привязаны к соответствующим чартам.
При установке родителя у созданной формы она размещается на нужном чарте. Но тут возникает проблема "сливания" окна с чартом и график просто зарисовывает "приклеенную" форму.
Предлагаю пока попробовать решить этот вопрос, так как все равно лежит не в области действий разработчиков МТ.
Ты пробовал свои GUI к графикам цеплять?
у меня честно говоря не возникало потребности цеплять формы к чартам.
просто чётко разделяю для себя - есть оперативная графика которая непосредственно связана с чартом (всякии линии, подписи, надписи и так далее), это естественно делается средствами MT
а есть GUI управления - настройки, отчёты, статистика. И они весьма большие и запихивать их внутрь чарта это преступление против пользователя :-)
поместить форму поверх чарта можно без смены родителя. просто тупо поместить сверху ;-) придётся конечно отнять форму от оконного менеджера и отслеживать изменение геометрии чарта и фокус.
update/ про поместить форму - на график вывести RectLabel и в чарт-эвент отслеживать изменение кординат. При изменнии - поместить строго сверху свою форму :-) Немного танцев с бубном потребуется при смене вкладок, минимизации окна, чтобы свою форму вовремя спрятатьТакой вот "закат солнца вручную" :-) Зато не лезешь в нутро MetaTrader и не навязываешь новых чилдов и хуков их окнам, то есть ведёшь себя прилично
да и любой GUI вызванный из DLL имеет пренеприятнейшую особенность - советники/индикаторы которые его вызывают, периодически от малейших чихов рестартуют. Что порождает переоткрытие форм и водопады мата..
Возможно давно анонсированные "сервисы" (или как их там назовут) будут лишены такого недостатка.
Вообще ничего не объяснил. Четко ответь плз - как ты из МТ* получаешь данные из панели на шарпе?
Я делал обратную связь через Memory Mapping с опросом по таймеру. Панель передавала только разные настройки и результаты медленных расчетов