Асинхронное и многопоточное программирование в MQL - страница 25
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Начал перечитывать тему а Игорь уже об этом писал.
Вот об этом Юр я и пытался сказать, что надо выделять память и регистрировать поток.
Игорь пишет надо выделять и регистрировать, вы пишите не надо не чего делать.
Вот от этого и голова кругом. В итоге тупик..
Игорь учился в вышке профильно, и в этом он должен понимать побольше нас самоучек.
Я изначально склонялся к тому же, что надо выделять память и инициализировать.
Это ещё с разных курсов по Си у меня в памяти отложилось, инициализация и выделение памяти, это залог правильного кодинга, ибо что б не текло и не было мусора.
По этому вопрос к Игорю, поясни пожалуйста как это делать в С++?
Только не словами а на примере, словами нифига не понимается ))
Начал перечитывать тему а Игорь уже об этом писал.
Вот об этом Юр я и пытался сказать, что надо выделять память и регистрировать поток.
Начал перечитывать тему а Игорь уже об этом писал.
Я изначально склонялся к тому же, что надо выделять память и инициализировать.
Это ещё с разных курсов по Си у меня в памяти отложилось, инициализация и выделение памяти, это залог правильного кодинга, ибо что б не текло и не было мусора.
По этому вопрос к Игорю, поясни пожалуйста как это делать в С++?
Вы мастерски апаете этот топик в самый верх обсуждения, пытаясь привлечь к Вашей проблеме все более участников обсуждения )))
Не выдергивайте из контекста переписку:
- я писал это в контексте, что если Вы хотите понять как работает WinAPI, то можете использовать готовые примеры по написанию dll = более 20 статей на этом ресурсе
- я писал это в контексте, что Вы можете добраться до чистых вызовов WinAPI, путем замены подключаемых файлов, которые Вам уже написали системные программисты
....
суть переписки: начните что то читать и делать, а не писать и писать.... многое поймете, поймете, что и как работает в Windows, но это знание не будет востребовано, от Вас как от прикладного программиста требуется лишь механическая работа - выбрал тип проекта, добавил свой код, скомпилировал = получил результат - все работы за Вас выполнили сотни или тысячи системных программистов. Любая модификация шаблонов и подключаемых файлов должна иметь смысл - если не знаете, то под видом "зачем столько кода, оно и так работает!" - Вы получите не воспроизводимый баг и/или отсутствие совместимости(переносимости) с ОС/ПК
Пост для создателей. Тролли мимо. Для графических интерфейсов вполне так себе смотрится вынести OnChartEvent в отдельный поток.
зачем ломать ту модель которую сделали разработчики? - модель MQL-программы простая и понятная, есть события - есть точки входа обрабатывающие эти события (OnTick(),OnInit()....OnChartEvent() )
есть возможность из любой MQL-программы получить состояние торгового окружения (даже индикаторы могут посмотреть профит открытого ордера и т.п.) и можно комбинировать эксперт+скрипт, эксперт+пользовательский индикатор на одном графике - получаете асинхронное исполнение MQL-программ, эксперт торгует, индикатор выводит графическую визуализацию - если не хватает производительности потока пользовательских индикаторов (они работают в одном потоке), тогда уже конечно проблема - нужно использовать 2 эксперта на 2-х чартах и организовывать взаимодействие между чартами...
опять же - есть конкретная задача, есть реализация, я много раз спросил, зачем эта фича нужна, ответа пока нет - только пространственные рассуждения о 3D визуализации.... причем не идет разговора где брать некий DirectX для работы с 3D ;)
имхо, работает не трожь! )))
зачем ломать ту модель которую сделали разработчики? - модель MQL-программы простая и понятная, есть события - есть точки входа обрабатывающие эти события (OnTick(),OnInit()....OnChartEvent() )
есть возможность из любой MQL-программы получить состояние торгового окружения (даже индикаторы могут посмотреть профит открытого ордера и т.п.) и можно комбинировать эксперт+скрипт, эксперт+пользовательский индикатор на одном графике - получаете асинхронное исполнение MQL-программ, эксперт торгует, индикатор выводит графическую визуализацию - если не хватает производительности потока пользовательских индикаторов (они работают в одном потоке), тогда уже конечно проблема - нужно использовать 2 эксперта на 2-х чартах и организовывать взаимодействие между чартами...
опять же - есть конкретная задача, есть реализация, я много раз спросил, зачем эта фича нужна, ответа пока нет - только пространственные рассуждения о 3D визуализации.... причем не идет разговора где брать некий DirectX для работы с 3D ;)
имхо, работает не трожь! )))
Смотри. Есть кнопка. Ты ее кликаешь. OnChartEvent встает в очередь. Только в этой очереди уже OnTick, а следом за ним OnTime стоит, а в них CopyRate по всем инструментам, который, на секундочку, блокирующий и цикл на хренову тучу итераций. В результате, если по кнопке, например, должно диалоговое окно развернуться, получаем подвисание интерфейса. Не критично конечно, но некрасиво.
GUI должен крутиться в главном эксперте, а все остальное в отдельном эксперте. Этот отдельный слейв эксперт помещается на невидимый OBJ_CHART и взаимодействует с главным путем EventSendCustom().
Получается что-то вроде многопоточности. У меня так реализовано.
Смотри. Есть кнопка. Ты ее кликаешь. OnChartEvent встает в очередь. Только в этой очереди уже OnTick, а следом за ним OnTime стоит, а в них CopyRate по всем инструментам, который, на секундочку, блокирующий и цикл на хренову тучу итераций. В результате, если по кнопке, например, должно диалоговое окно развернуться, получаем подвисание интерфейса. Не критично конечно, но некрасиво.
не знаю приоритет OnChartEvent OnTick и OnTime, но разработчики писали, что если эксперт был занят и не обработал событие, то это событие не создает очередь, т.е. будет просто пропуск тика или таймера ( OnChartEvent - не знаю, не проверял )
тут логика разработчиков проста, каждое событие это конкретное действие эксперта, но именно на это событие, вот что точно знаю и проверил не однократно (в МТ5 больше в теории работаю, не знаю как физически работает ONTick):
про МТ4 однозначно скажу: все торговые операции только через приходящий тик нужно делать, иначе в 9 случаях из 10 получишь отказ от сервера на обработку торговой операции,
т.е. вот сделал интерфейс с кнопкой BUY - по задумке нажимаешь BUY- сразу отправляешь ордер, но это не будет работать напрямую, нужно команду пользователя запомнить (в идеале залочить кнопку, чтобы руками не тькал ))) и по приходу тика, в OnTick() - отправить ордер на сервер - вот так будет работать в 99% случаев, т.е. пришел тик - можно выполнить торговый запрос (а не из любого места MQL)
а если вынести еще и в асинхронный поток OnChartEvent , то получим еще в довесок взаимные блокировки исполняемого кода? - ну к примеру статистику по торговле получаю при нажатии кнопки в OnChartEvent , и такую же функцию ( последняя убыточная сделка) использую в OnTick - тут будет что то с чем то! - имхо не разгребешь все это
GUI должен крутиться в главном эксперте, а все остальное в отдельном эксперте. Этот отдельный слейв эксперт помещается на невидимый OBJ_CHART и взаимодействует с главным путем EventSendCustom().
Получается что-то вроде многопоточности. У меня так реализовано.
не знаю приоритет OnChartEvent OnTick и OnTime, но разработчики писали, что если эксперт был занят и не обработал событие, то это событие не создает очередь, т.е. будет просто пропуск тика или таймера ( OnChartEvent - не знаю, не проверял )
тут логика разработчиков проста, каждое событие это конкретное действие эксперта, но именно на это событие, вот что точно знаю и проверил не однократно (в МТ5 больше в теории работаю, не знаю как физически работает ONTick):
про МТ4 однозначно скажу: все торговые операции только через приходящий тик нужно делать, иначе в 9 случаях из 10 получишь отказ от сервера на обработку торговой операции,
т.е. вот сделал интерфейс с кнопкой BUY - по задумке нажимаешь BUY- сразу отправляешь ордер, но это не будет работать напрямую, нужно команду пользователя запомнить (в идеале залочить кнопку, чтобы руками не тькал ))) и по приходу тика, в OnTick() - отправить ордер на сервер - вот так будет работать в 99% случаев, т.е. пришел тик - можно выполнить торговый запрос (а не из любого места MQL)
а если вынести еще и в асинхронный поток OnChartEvent , то получим еще в довесок взаимные блокировки исполняемого кода? - ну к примеру статистику по торговле получаю при нажатии кнопки в OnChartEvent , и такую же функцию ( последняя убыточная сделка) использую в OnTick - тут будет что то с чем то! - имхо не разгребешь все это