windows - программисты, отзовитесь... - страница 3

 

ха, ха ! решил задачу, правда с маленьким костылем.

собственно мне надо было открывать окно 

- окно для закрытия заданной позиции , чтобы "вручную" закрыть эту позицию

- окно для модификации заданной позиции, чтобы "вручную" модифицировать эту позицию

получилось !

костыль заключается в том, что, коль скоро, не могу прочитать  тикет позиции из ListView,

приходится самостоятельно поддерживать список всех открытых позиций,

а для поиска заданной позиции держать список позиций в терминале в определенном порядке - возрастание/убывание, тут у клиента нет возвражений.

никаих делов с родителем !  

собственно задача эмуляция ручной торговли для любой ЕА в МТ5  решена, обращайтесь, ну,это типа рекламы...

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Denis Sartakov:
 

... 

собственно задача эмуляция ручной торговли для любой ЕА в МТ5  решена, обращайтесь, ну,это типа рекламы...

Интересно. Если решена, то как она обрабатывает модальное окошко, выведенное на экран какой-либо из служб ОС или другим приложением. Например, "Недостаточно памяти". Или "Нет связи с Интернет, повторный звонок через 39 секунд"?

 
Vladimir:

Интересно. Если решена, то как она обрабатывает модальное окошко, выведенное на экран какой-либо из служб ОС или другим приложением. Например, "Недостаточно памяти". "Или нет связи с Интернет, повторный звонок через 39 секунд"?

мы с этими окнами дела не имеем.

если ЕА выдает команду открыть/закрыть/модифицировать позицию,

наш специальный софт(DLL и немного модифицированный торговый класс)

- автоматически конвертирует  эти запросы на открытие штатного окна для для совершения  

соответствующей операции в ручном режиме

- исходя из параметров операции заполняет все необходимые поля этого окна

- нажимает(эмулирует нажатие)кнопку ОК

- ждет когда в окне появится результат

- помещает этот результат в поле, из которого ЕА "привыкла" читать результат операции

- возвращает управление в ЕА

все.

 
Denis Sartakov:

мы с этими окнами дела не имеем.

...

- исходя из параметров операции заполняет все необходимые поля этого окна

- нажимает(эмулирует нажатие)кнопку ОК

- ждет когда в окне появится результат

...

все.

1. Если есть окно и нажимаются кнопки, значит, Вы на своем компьютере, не на VPS, где кнопки жать некому. Как Вам удается не иметь дела с системными сообщениями (повторюсь, часть из них модальны - не убираются с экрана без сигнала от мыши или с клавиатуры)?

2. Оставленные в цитате три этапа имеют продолжительность. Во время исполнения каждого из них необходимо следить, чтобы нужное Вам окно

- оставалось видимым (во всех трех случаях);

- оставалось активным (в первых двух случаях);

- удерживало фокус ввода (в первых двух случаях).

     Как Вы этого добиваетесь?

 
Vladimir:

1. Если есть окно и нажимаются кнопки, значит, Вы на своем компьютере, не на VPS, где кнопки жать некому. Как Вам удается не иметь дела с системными сообщениями (повторюсь, часть из них модальны - не убираются с экрана без сигнала от мыши или с клавиатуры)?

2. Оставленные в цитате три этапа имеют продолжительность. Во время исполнения каждого из них необходимо следить, чтобы нужное Вам окно

- оставалось видимым (во всех трех случаях);

- оставалось активным (в первых двух случаях);

- удерживало фокус ввода (в первых двух случаях).

     Как Вы этого добиваетесь?

1. нас эти окна не интересуют - пусть висят, нам по барабану.

2. все эти окна полностью под нашим управлением, а потому проблем нет.

 
Denis Sartakov:

1. нас эти окна не интересуют - пусть висят, нам по барабану.

2. все эти окна полностью под нашим управлением, а потому проблем нет.

Чем дальше, тем интереснее.

По п.1 попробовал у себя, выдернул шнур интернет-провайдера. Тыкал мышью через системное окно о повторном звонке и в невидимые части кнопок Sell и Buy, и в невидимые поля объема, типа исполнения.


Результат - никакой реакции. Закрыл системное окно, нажал кнопку Buy - терминал получил сообщение ОС и корректно обработал: "Нет связи". Z - порядок окон рулит. А у Вас?

По п.2 непонятно, как реализовано это "наше управление". Допустим, Вы эмулировали нажатие F9, раскрылось окно открытия сделки, в нем проставили нужные объем и прочее, проверили активность этого окна и наличие у него фокуса ввода. После этого планировщик отнял у вашего потока процессор и дал поработать другим потокам, среди которых была и реакция на отключение интернет, возникло новое окно с сиcтемным сообщением. Ваш поток этого не знает, в нем изменение контекста остановлено непосредственно перед посылкой сообщения кнопке "Sell". Как только Ваш поток получит процессорное время, он попытается послать сообщение окошку кнопки, а оно невидимо и сообщения не получит, не обработает. Что Ваш программный код делает дальше?

 
Vladimir:

Чем дальше, тем интереснее.

По п.1 попробовал у себя, выдернул шнур интернет-провайдера. Тыкал мышью через системное окно о повторном звонке и в невидимые части кнопок Sell и Buy, и в невидимые поля объема, типа исполнения.


Результат - никакой реакции. Закрыл системное окно, нажал кнопку Buy - терминал получил сообщение ОС и корректно обработал: "Нет связи". Z - порядок окон рулит. А у Вас?

По п.2 непонятно, как реализовано это "наше управление". Допустим, Вы эмулировали нажатие F9, раскрылось окно открытия сделки, в нем проставили нужные объем и прочее, проверили активность этого окна и наличие у него фокуса ввода. После этого планировщик отнял у вашего потока процессор и дал поработать другим потокам, среди которых была и реакция на отключение интернет, возникло новое окно с сиcтемным сообщением. Ваш поток этого не знает, в нем изменение контекста остановлено непосредственно перед посылкой сообщения кнопке "Sell". Как только Ваш поток получит процессорное время, он попытается послать сообщение окошку кнопки, а оно невидимо и сообщения не получит, не обработает. Что Ваш программный код делает дальше?

ну, понятно.

на всякий пожарный, после открытия окна ручной торговли,  софт ждет определенных событий

некоторое время, которое можно настраивать. если не дождался нужного события, то просто закрывает окно по этому таймуту

с помощью системного сообщения:

SendMessage(h_ModifyPositionWindow, WM_SYSCOMMAND, SC_CLOSE, 0 );   

а для ЕА передает инфу  типа - "извини дорогой, не получилось, повтори попытку..."

у клиента скальпер молотит так, что окна только мелькают... 

 
Denis Sartakov:

ну, понятно.

на всякий пожарный, после открытия окна ручной торговли,  софт ждет определенных событий

некоторое время, которое можно настраивать. если не дождался нужного события, то просто закрывает окно по этому таймуту

с помощью системного сообщения:

а для ЕА передает инфу  типа - "извини дорогой, не получилось, повтори попытку..."

у клиента скальпер молотит так, что окна только мелькают... 

Спасибо. Теперь понял. Если в отсутствие пользователя появится системное сообщение с модальным окном, Ваша система по истечении заданного времени аккуратно закроет, если было открыто, окно открытия/закрытия сделки, и на этом работа этой системы остановится до прихода пользователя. С работы или после сна. Правильно понял?

Если да, то, если можно, еще вопрос. Пользователь во время работы Вашей системы, когда окна мелькают, может зайти, например, в свою электронную почту?

 
Vladimir:

Спасибо. Теперь понял. Если в отсутствие пользователя появится системное сообщение с модальным окном, Ваша система по истечении заданного времени аккуратно закроет, если было открыто, окно открытия/закрытия сделки, и на этом работа этой системы остановится до прихода пользователя. С работы или после сна. Правильно понял?

Если да, то, если можно, еще вопрос. Пользователь во время работы Вашей системы, когда окна мелькают, может зайти, например, в свою электронную почту?

как по мне, вы сильно все усложняете.

каждый поток вправе думать, что он монопольно пользуется процессором.

само собой, windows квантует процессорное время между потоками,

но одновременно windows заботится о сохранении/восстановлении environment

для каждого потока, так что после возврата управления потоку, тот продолжает работать с точки прерывания

с прежним состоянием всего его окружения, как будто  у него не отнимали управления.

после выхода по таймауту софт не будет ждать "прихода пользователя", а будет и дальше работать как ни в чем не бывало.

во время работы этого софта, вы можете делать что хотите, в том числе и "зайти, например, в свою электронную почту".

 
Denis Sartakov:

как по мне, вы сильно все усложняете.

каждый поток вправе думать, что он монопольно пользуется процессором.

само собой, windows квантует процессорное время между потоками,

но одновременно windows заботится о сохранении/восстановлении environment

для каждого потока, так что после возврата управления потоку, тот продолжает работать с точки прерывания

с прежним состоянием всего его окружения, как будто  у него не отнимали управления.

после выхода по таймауту софт не будет ждать "прихода пользователя", а будет и дальше работать как ни в чем не бывало.

во время работы этого софта, вы можете делать что хотите, в том числе и "зайти, например, в свою электронную почту".

Усложню не я, жизнь усложняет. Я говорю по опыту эксплуатации такой системы, сделанной мной для побед в конкуре на демосчетах, где советники запрещены, в 2009-2010 годах. Побед добился, но к клавиатуре-мыши во время конкурсов надо было не подходить, а то в нужный момент не дашь сработать системе, и момент упущен. Кроме того, от компьютера надо было не отходить, если система давала модальное сообщение, надо было убрать его как можно быстрее. Потому, что методика торговли была арбитражная, а арбитражные ситуации надо ловить, они нечасты. Возможно, у Вас не так, вот и допытываюсь.

То есть я понял правильно, Ваша система будет дальше работать ни в чем не бывало, только после первого выхода по таймауту из-за появления системного окна поверх окна открытия сделки эта работа будет бесплодной, сделки не будут открываться? Проще говоря, мой пример с выдергиванием кабеля интернет из пункта 1 пробовали? Все нормально, работа идет, не идет только торговля? Уточню вопрос, Ваша система позволяет добиться реакции терминала на "нажатие" невидимой кнопки Sell?

Причина обращения: