Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
ну к чему такие сложности.. ) в С# просто удобно заниматься отладкой. сделать все через winapi, a затем просто переписать ф-ии на mql, и усе
я уже понял, что у кнопок в тулбаре нет хэндлов и их нельзя оттуда достать, только если ковыряться в процессах.. или через UIAutomation. Поэтому пойдем обходным путем
Вообще это несложно - несколько ударов по клавишам.) Зато можно писать обычные (как-бы нешарповые) ДЛЛ на С#.
В тулбаре нет, но у F1-9 и пр. вроде все в порядке. Вроде их хотели?
Вообще это не сложно - несколько ударов по клавишам.) Зато можно писать обычные (как-бы нешарповые) ДЛЛ на С#.
В тулбаре нет, но у F1-9 и пр. вроде все в порядке. Вроде их хотели?
Захотел побаловаться с окнами терминала, сделать программку которая сама открывает ордер через клики по кнопкам. Нашел hwnd тулбара с кнопками, где есть кнопка newOrder (F9) в mt5, не могу сейчас понять как ее найти и сделать клик по ней. Туго идет, вообще никогда раньше не делал подобное. а дальше разберусь, думаю, по принципу и подобию..
Что касается кнопки, ее нажимать и не нужно. Шлите сразу сообщение о нажатии F9 на клавиатуре. Конечно, при этом окно самого терминала или некоторых из его дочерних окон должно быть активно и в фокусе.
Чтобы разобраться дальше, потребуются гораздо большие усилия. Как ни крути, придется написать анализатор иерархии окон, вообще-то несложный. Функция (1) вызывается для одного окна, выдает в протокол его имя, имя класса, координаты и размеры. Затем проходит по всем дочерним окнам уже описанного окна и на каждом из них вызывает себя, функцию (1). Пока не окажется, что все дочерние уже обработаны.
Очень тяжело будет ввести числа в поля: объем открываемой сделки, стоп лосс, тейк профит. Задать инструмент, по которому сделка открывается: необходимо раскрыть выпадающее меню инструментов и в нем выбрать кликом мыши по нужным координатам, сделав эту часть меню видимой, если опций много. При этом обязательно, чтобы имена инструментов читались из каких-то полей в структурах. Пока Метаквотес используют Майкрософт фаундейшен классес (MFC) в чистом виде, это годится. Как только на событие перерисовки опции меню повесят свою функцию, столь простая идентификация опций меню станет невозможной, придется заниматься еще и распознаванием текста. Это не очень страшно, шрифты весьма простые. Тем более в случае, когда придется писать закрытие ордера путем его выбора в списке закладки "Торговля", это и так придется делать.
Это пока с точки зрения перспектив написания. Однако никакой гарантии работоспособности такого подхода дать нельзя. Первое, сразу будет заметно, активность окон может меняться по чужой инициативе, невидимой созданной программе. Сообщения ОС, антивирусов и многих других могут в нужный момент отнять активность у окна, куда посылается сообщение. И все, нить утеряна. Причем бывают окна модальные, из которых нельзя просто так уйти, не нажав что-нибудь.
Второе, более стратегическое. Разработчики MT могут изменить все, что угодно. Хоть имя какого-нибудь окна, в том числе для устранения орфографической ошибки. И все, построенная на именах окон и классов навигация не работает.
Это не прогнозы, на оба варианта я наткнулся лично, написав в свое время имитатор ручной торговли для ежедневного конкурса "Гагарин", где советники были запрещены.
Моя рекомендация - плюньте, не занимайтесь такими вещами. Неблагодарные они, да и граничат со взломом чужих программ, хотя их работу и не затрагивают.
Что касается кнопки, ее нажимать и не нужно. Шлите сразу сообщение о нажатии F9 на клавиатуре. Конечно, при этом окно самого терминала или некоторых из его дочерних окон должно быть активно и в фокусе.
Чтобы разобраться дальше, потребуются гораздо большие усилия. Как ни крути, придется написать анализатор иерархии окон, вообще-то несложный. Функция (1) вызывается для одного окна, выдает в протокол его имя, имя класса, координаты и размеры. Затем проходит по всем дочерним окнам уже описанного окна и на каждом из них вызывает себя, функцию (1). Пока не окажется, что все дочерние уже обработаны.
Очень тяжело будет ввести числа в поля: объем открываемой сделки, стоп лосс, тейк профит. Задать инструмент, по которому сделка открывается: необходимо раскрыть выпадающее меню инструментов и в нем выбрать кликом мыши по нужным координатам, сделав эту часть меню видимой, если опций много. При этом обязательно, чтобы имена инструментов читались из каких-то полей в структурах. Пока Метаквотес используют Майкрософт фаундейшен классес (MFC) в чистом виде, это годится. Как только на событие перерисовки опции меню повесят свою функцию, столь простая идентификация опций меню станет невозможной, придется заниматься еще и распознаванием текста. Это не очень страшно, шрифты весьма простые. Тем более в случае, когда придется писать закрытие ордера после его выбора в списке закладки "Торговля", это и так придется делать.
Это пока с точки зрения перспектив написания. Однако никакой гарантии работоспособности такого подхода дать нельзя. Первое, сразу будет заметно, активность окон может меняться по чужой инициативе, невидимой созданной программе. Сообщения ОС, антивирусов и многих других могут в нужный момент отнять активность у окна, куда посылается сообщение. И все, нить утеряна. Причем бывают окна модальные, из которых нельзя просто так уйти, не нажав что-нибудь.
Второе, более стратегическое. Разработчики MT могут изменить все, что угодно. Хоть имя какого-нибудь окна, в том числе для устранения орфографической ошибки. И все, построенная на именах окон и классов навигация не работает.
Это не прогнозы, на оба варианта я наткнулся лично, написав в свое время имитатор ручной торговли для ежедневного конкурса "Гагарин", где советники были запрещены.
а как эмулировать нажатие F9 через winapi, можно ссылочку если не сложно? ) Что касается стопа и тэйка они мне не нужны, будет работать по рынку, еще если вы замечали, при нажатии f9 нужный символ подбирается автоматически, в зависимости от того график какого символа сейчас активен, т.е. можно просто переносить фокус на нужный открытый чарт, я полагаю... И размер лота можно задать в настройках мт и он так же сохраняется при последующем вызове окна
п.с. да ну какой взлом, в интернете полно автокликеров для разных нужд, в том числе для бинарных опционов, жаль только код никде не валяется за бесплатно )
а как эмулировать нажатие F9 через winapi, можно ссылочку если не сложно? ) Что касается стопа и тэйка они мне не нужны, будет работать по рынку, еще если вы замечали, при нажатии f9 нужный символ подбирается автоматически, в зависимости от того график какого символа сейчас активен, т.е. можно просто переносить фокус на нужный открытый чарт, я полагаю...
п.с. да ну какой взлом, в интернете полно автокликеров для разных нужд, в том числе для бинарных опционов, жаль только код никде не валяется за бесплатно )
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms646304(v=vs.85).aspx
Примеры использования в Delphi
keybd_event (vk_F9, 0, 0, 0);
hOrd := WaitChildWnd (NowHWnd, Tms); {Ждем активации Tms миллисекнуд}
if hOrd = 0 then begin ODCiEr := -8; goto Clo; end;
{Нажатие Ctrl-F9, это горячая клавиша MT4 - переход в окно "Терминал" с возможностью работать клавиатурой}
procedure PressCtrlF9;
begin
keybd_event (VK_LCONTROL, 0, 0, 0); {Жмем и держим Ctrl}
keybd_event (vk_F9, 0, 0, 0);
keybd_event (VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0); {Отпускаем Ctrl}
end; {PressCtrlF9}
{Ждет не больше Tms миллисекунд, пока у окна hw появится активное дочернее, порожденное терминалом NowHWDC. Появилось - вернет его хендл, иначе 0}
{У окна hw проверит, что оно запущено процессом терминала ДЦ номер NowHWDC}function WaitChildWnd (hw : THandle; Tms : longint) : THandle;
var
Newhw : THandle;
D : double;
begin
D := Now + Tms * DivMS; {Когда конец ожидания}
While Now < D do
begin
Newhw := GetForegroundWindow;
if (Newhw <> hw) and (WndOfNowPrc (hw) = 0) then
begin WaitChildWnd := Newhw; exit; end;
Sleep (StepMsHand);
end;
WaitChildWnd := 0;
end; {WaitChildWnd}
function WndOfNowPrc (hw : THandle) : longint; {0 - да, 1 - нет, -1 - окна нет}
var
hThr, hPrc : LongWord; {Идентификаторы потока и процесса, создавших окно}
begin
hThr := GetWindowThreadProcessId (hw, @hPrc);
if hThr <> 0 then WndOfNowPrc := byte (hPrc <> AllWDC [NowHWDC].WDCPrc)
else WndOfNowPrc := -1;
end; {WndOfNowPrc}
Спасибо, думаю разберусь теперь )
https://www.mql5.com/ru/forum/110207
PostMessageA 35458
не благодарите ))
https://www.mql5.com/ru/forum/110207
PostMessageA 35458
не благодарите ))
С этим я уже разобрался:) А не подскажете, почему int iHandle = FindWindowExW(IntPtr.Zero, IntPtr.Zero, null, "Order"); всегда возвращает ноли в mql, а если на шарпе делаю то все ок.. Может тз-за того что ф-ии переопределены неправильно, и тут нужен тип не int a hwnd. А, все, понял сам..
а как вы до Edit элементов (символ прежде всего) внутри окна ордера добрались?
а как вы до Edit элементов (символ прежде всего) внутри окна ордера добрались?
аа, нашёл уже сам.