Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Идея интересная. Тут возможен некоторый прорыв. Создание call-back функций вызываемых из внешних приложений (в частности из другого терминала, в том числе MT4). Типа: пишем в в map-файл номер чарта, имя функции и параметры, потом засылаем внешнее сообщение в чарт, эксперт-драйвер перехватывает, парсит map-файл и уже адресно засылает в соответствующий чарт юзерское сообщение с именем функции и параметрами.
Щупать надо.
С именованными каналами (трубами) эта идея будет еще более простой в реализации. Эксперт-драйвер будет pipe-сервером, обрабатывающим сообщения от pipe-клиентов (внешних приложений) по своему протоколу (реализацию можно сделать в виде работы не с бинарными данными, а со строками, тогда еще проще). Тогда необходимость в использовании WinAPI для дергания событий чартов и файлов, отображаемых в память, отпадет - данные в режиме реального времени сами придут по этому каналу. А дальше, как вы и написали, действительно, можно заслать в соответствующий чарт юзерское сообщение с именем функции и параметрами.
Ренат, я только что увидел, что у вас были идеи насчет реализации Named Pipes в рамках языка MQL. Это было бы здорово, думаю, не я один так считаю.
Идея интересная. Тут возможен некоторый прорыв. Создание call-back функций вызываемых из внешних приложений (в частности из другого терминала, в том числе MT4). Типа: пишем в в map-файл номер чарта, имя функции и параметры, потом засылаем внешнее сообщение в чарт, эксперт-драйвер перехватывает, парсит map-файл и уже адресно засылает в соответствующий чарт юзерское сообщение с именем функции и параметрами.
Щупать надо.
а че там щупать, все уже прощупано и прорвались мы в космос :).
это WM_KEYDOWN. причем код клавиши может быть и не только реальный ASCII, а даже отрицательный.
Проясните пожалуйста. Я пологал что dll загружается в память всего один раз, не зависимо от того сколько приложений загрузило. И вот например такая схема: два приложения, одна длл, в длл у нас переменные, вопрос - переменные одни для двух приложений или разные? А одно приложение и одна длл, возможно ли при каждом следующем вызове не терять содержание переменных (не впихивая их в память насильно)? И еще: когда эксперт инициирует вызов длл, вызов происходит от имени терминала или эксперта? т.е. как следствие отсюда - будут ли одними глобальные переменные длл для разных экспертов, загрузивших одну и ту же длл?
1 ) DLL грузится в процесс терминала, поэтому все эксперты получают один экземляр глобальных переменных, таким образом можно устроить обмен данными между экспертами/индикаторами/скриптами. Но как только выгрузятся все эксперты использующие одну DLL, библиотека будет выгружена и на следующей загрузке данные будут инициализированы заново.
2) Действительно через DLL можно организовать обмен данными между процессами, для этого в MSVC имеются специальные "штучки"
#pragma section( "myseg" , shared ) // создаём секцию с именем "myseg" которая будет разделяться между процессами.
__declspec(allocate("myseg")) int SharedMem=0; // создаём разделяемую переменную помещая её в соответствующую секцию
Остаётся только создать экспортируемые функции для доступа к разделяемым переменным.
Спасибо, очень познавательно.