46 минут назад, AdA сказал:в часах, примерно, чтобы освоить программирование
За 30 часов освоишь программирование в общих чертах. Этого будет достаточно для твоих задач.
От xbms, 13 апреля, 2013 в Уголок Программиста
46 минут назад, AdA сказал:в часах, примерно, чтобы освоить программирование
За 30 часов освоишь программирование в общих чертах. Этого будет достаточно для твоих задач.
всем приветики! как в советнике вызвать исполнения скрипта/библиотеки/инд, на другом(определенном) окне графика?
так получить № окна способов много.
есть следующие мысли, то что могло бы пригодиться:
ChartWindowFind() - но как в этом варианте сделать, именно сам запуск скрипта?
EventChartCustom() // Генерирует пользовательское событие для указанного графика.
(думаю здесь для меня готовый пример только подойдет)
можно ли задействовать - FileOpen() ?
или без: WinUser32.mqh - дела не будет?
подскажите пожалуйста в каком направление двигаться, ссылку в ветке или готовый пример.
или см. этот урок: http://tlap.io/mql4-upravlenie-pc-iz-sovetnika/#more-30563
Изменено 12 августа, 2019 пользователем Ar4i
3 часа назад, Ar4i сказал:как в советнике вызвать исполнения скрипта/библиотеки/инд, на другом(определенном) окне графика?
Нельзя запустить в другом окне. (Вернее можно, но это вне компетенции данной ветки)
34 минуты назад, 0ll сказал:Нельзя запустить в другом окне. (Вернее можно, но это вне компетенции данной ветки)
на какую ветку сесть?)
1 час назад, 0ll сказал:@Ar4i Ваш вопрос за рамками MQL, на данном форуме не обсуждаются данные вопросы. Вы хоть опишите проблему - что хотите сделать, ибо возможны решения проще.
если конкретизировать до насущного. есть скрипт InitAllIndicators который переинициализирует индикаторы в окне на который его бросили. я хочу его запустить из советника и на другом окне графика.
думаю можно изменить и сам скрипт. но так же хотелось обзавестись и общими понятиями в выполнение таких приемов.
так например я в коде этого скрипта(строка 69) hParentWnd = GetAncestor(WindowHandle(Symbol(),Period()),GA_ROOT); сделал изменения: GA_ROOT=2; на GA_ROOT=1; и задал строго нужного мне графика Period. и получил бросив на текущей график открытие "окна свойств инд-ра" работающего на другом графике, но без дальнейшей действий(скрипта) по полной его переинициализации.
Изменено 13 августа, 2019 пользователем Ar4i
@Ar4i скрипт написан на функциях API Windows, а именно посылом в нужное окно нажатий клавиш - это не MQL!
Бросить" скрипт из советника у Вас не получится, конечно можно использовать API или другие приёмы, но это будет конкретный костыль, который будет работать через раз, а то и повесит терминал.
Можете скопировать текст скрипта в советник (если хочется). Экспериментировать с константами вредно, по периоду функция ищет окно и оно должно быть открыто.
3 часа назад, 0ll сказал:@Ar4i скрипт написан на функциях API Windows, а именно посылом в нужное окно нажатий клавиш - это не MQL!
Бросить" скрипт из советника у Вас не получится, конечно можно использовать API или другие приёмы, но это будет конкретный костыль, который будет работать через раз, а то и повесит терминал.
Можете скопировать текст скрипта в советник (если хочется). Экспериментировать с константами вредно, по периоду функция ищет окно и оно должно быть открыто.
спасибо в первую очередь за ответ. ясно про костыль. а про перенос в советник: ну открытое окно например это не проблема. а эксперименты с константами не очень. намекаете тоже на не стабильную работу? может перенос в индикатор возможен?
ну хорошо перенес я в эксперт. дальше изучать: "API или другие приёмы". а, что "это" за другие приемы кстати могут быть(mql)?
Изменено 13 августа, 2019 пользователем Ar4i
В 12.08.2019 в 19:56, Ar4i сказал:всем приветики! как в советнике вызвать исполнения скрипта/библиотеки/инд, на другом(определенном) окне графика?
так получить № окна способов много.
есть следующие мысли, то что могло бы пригодиться:ChartWindowFind() - но как в этом варианте сделать, именно сам запуск скрипта?
EventChartCustom() // Генерирует пользовательское событие для указанного графика.
(думаю здесь для меня готовый пример только подойдет)можно ли задействовать - FileOpen() ?
или без: WinUser32.mqh - дела не будет?
подскажите пожалуйста в каком направление двигаться, ссылку в ветке или готовый пример.
или см. этот урок: http://tlap.io/mql4-upravlenie-pc-iz-sovetnika/#more-30563
Возможно для некоторых задач подойдёт вариант с шаблонами ChartApplyTemplate или переделка индикаторов и сов под управление через GV переменные
4 часа назад, sniv сказал:Возможно для некоторых задач подойдёт вариант с шаблонами ChartApplyTemplate или переделка индикаторов и сов под управление через GV переменные
GV-переменные и функция ChartApplyTemplate() - вряд ли про мой случай.
ну хорошо, сузим задачу до одного вопроса. перенес я код скрипта в советник и сделал в виде функции.
вопрос, могу ли я запустить работу этой функции средствами mql4(API отбросили) на другом открытом графике?
@Ar4i Это будет функция MQL запускаете её как обычно, только передаёте в неё название графика, чтоб найти окно и начать работать с индикаторами.
Другое дело как часто или по какому событию Вы будете её запускать - нужно понять, что индикаторы нуждаются в реините.
Я вот не представляю зачем она вообще нужна...
Подскажите, как сделать чтобы советник выдавал данные с пользовательского индикатора по всем символам указанным в окошке "Обзор рынка" и выдавал алерт на телефон, для одного конкретного символа это будет выглядеть так:
{
if ( isNewBar() )
{
double TrendBuy = iCustom (NULL, 0, "Индикатор", RISK, 0, 1);
double TrendSeel = iCustom (NULL, 0, "Индикатор", RISK, 1, 1);
Comment(TrendBuy, "\n", TrendSeel);
if (TrendBuy < 10000 && fTimeInZone3s())
{
Alert(Symbol()," сигнал на покупку Индикатор");
if (PushMessagesOn==True)
{
SendNotification(_Symbol + " сигнал на покупку Индикатор");
Print ("Алерт на мобильник покупка");
}
}
if (TrendSeel < 10000 && fTimeInZone3s())
{
Alert(Symbol()," сигнал на продажу Индикатор");
if (PushMessagesOn==True)
{
SendNotification(_Symbol + " сигнал на продажу Индикатор");
Print ("Алерт на мобильник продажа");
}
}
}
}
4 часа назад, 0ll сказал:@Ar4i Это будет функция MQL запускаете её как обычно, только передаёте в неё название графика, чтоб найти окно и начать работать с индикаторами.
Другое дело как часто или по какому событию Вы будете её запускать - нужно понять, что индикаторы нуждаются в реините.
Я вот не представляю зачем она вообще нужна...
она нужна для многих разных интересных старых EX файлов. запускать ее собираюсь по открытию нового бара, надеюсь времени на реинит индикаторов хватит 1 секунды. я понимаю что это костыль для работы на реальном счете, но для некоторых проверок подойдет.
" - только передаёте в неё название графика, чтоб найти окно и начать работать с индикаторами."
а как правильней передать ей название, может еще номер, ID графика?
49 минут назад, Partorius сказал:Подскажите, как сделать чтобы советник выдавал данные с пользовательского индикатора по всем символам указанным в окошке "Обзор рынка"
а , зачем данные с индикатора... окно обзор рынка общий . из советника через MarketInfo(). я так думаю.
сигнал на тел. смотри урок: http://tlap.io/signalyi-na-pochtu-i-mobilnyie/
Изменено 14 августа, 2019 пользователем Ar4i
2 часа назад, Ar4i сказал:а , зачем данные с индикатора... окно обзор рынка общий . из советника через MarketInfo(). я так думаю.
сигнал на тел. смотри урок: http://tlap.io/signalyi-na-pochtu-i-mobilnyie/
Как на телефон отправить сообщение я знаю как, но мне нужно чтобы советник или индикатор стоял на одной паре, а сканировал все которые есть в обзоре рынка и отправлял сообщение когда нужно
@Ar4i у Вас в скрипте есть функция hParentWnd = GetAncestor(...), вот для неё и нужно передать WindowHandle, только надо сначала сделать окно активным, иначе, имхо, поп-ар не всплывёт...
Нужно пробовать или читайте MSDN Microsoft - это тема большая и здесь оффтоп.
По поводу 1 секунды - у Вас в коде есть параметр PAUSE = 4000 (это задержка в мсек) ,т.е. 4 сек, желательно после каждого PostMessageA делать паузу, потому что Винда поставит Ваше сообщение в очередь и может быть задержка выполнения команды, и это на каждом индикаторе, поэтому 1 секунды не хватит точно. При этом нельзя лезть руками и клацать мышкой по разным окнам - всё слетит и задержки увеличатся, т.е. запустил, затаи дыхание и жди остановки. Идея запускать почаще - утопия!
4 минуты назад, Partorius сказал:мне нужно чтобы советник или индикатор стоял на одной паре, а сканировал все которые есть в обзоре рынка
@Partorius в функции iCustom (NULL, 0, "Индикатор", RISK, 0, 1); вместо NULL пишите пару, можно сделать цикл по всем парам из обзора рынка - только есть большая вероятность повесить терем, ибо он развернёт в оперативе копии индикатора со всеми буферами для каждой пары.
спасибо! будем пробовать. только уточню: эти 4сек для начала лучше пока оставить и не уменьшать- да? замечу, что эта функция будет запускаться по бару на м5 скажем. а 4сек(4000мсек) дается я так понял ей самой на выполнения себя, учитывая задержку на очередь в потоке.
Изменено 14 августа, 2019 пользователем Ar4i
ясно. и последнее. попробую проскользнуть по минимуму оффтопа если позволите, касательно WindowHandle().
в варианте WindowHandle() с использованием WIN API, идет добавка параметра GA_ROOT=2;
hParentWnd = GetAncestor(WindowHandle(Symbol(),Period()),GA_ROOT);
какой это должен быть параметр если WindowHandle("EURUSD",PERIOD_M1)?
13 часов назад, AdA сказал:Мой первый советник. Правильно написан?
Правильно.
extern int TF=0;
на
extern ENUM_TIMEFRAMES TF=0;
посмотри что получилось при запуске программы, вкладка "входные параметры".
Теперь попробуй добавить комментарии //Выбор периода графика и //Сколько свечей рассчитывать
extern int period_ATR=24;//Сколько свечей рассчитывать extern ENUM_TIMEFRAMES TF=0;//Выбор периода графика
опять посмотри что получилось при запуске программы, вкладка "входные параметры".
ATR=round(S/period_ATR/10);
ты делишь на 10. Это я так понимаю для 5 значных брокеров. А если попадутся 4-х, индикатор уже будут не правильно считать.
Тут можно пойти несколькими путями. Например добавим еще одну переменную "delitel" в вхлдных параметрах, получится
extern int period_ATR=24;//Сколько свечей рассчитывать extern ENUM_TIMEFRAMES TF=0;//Выбор периода графика int delitel;
теперь добавим немножко кода в блок "int OnInit()", получится
int OnInit() { if(Digits==4) { delitel=1; } if(Digits==5) { delitel=10; } return(INIT_SUCCEEDED); }
Эту часть кода можно укоротить, например вот так
if(Digits==4) { delitel=1; } else delitel=10;
а можно сделать и еще короче
if(Digits==4) delitel=1; else delitel=10;
Ну и осталось нам немного изменить саму строчку "ATR=round(S/period_ATR/10);" на
ATR=round(S/period_ATR/delitel);
Вот и все.
Теперь индикатор (но ты его сделал как эксперт) будет работать на 4 и 5 значных счетах.
Другой путь, сделать только одно без всего выше сказанного. Это заменить строку "ATR=round(S/period_ATR/10);" на 2 строки
if(Digits==4) ATR=round(S/period_ATR); else ATR=round(S/period_ATR/10);
Изменено 16 августа, 2019 пользователем MikR0ReR
3 часа назад, MikR0ReR сказал:Вот и все.
Спасибо!
Во вложении начал писать советника:
- нарисовать линии коррекции фибоначи по экстремумам.
Нашел экстремумы, но никак не получается нарисовать фибу.
Подскажите пожалуйста, как выполнить код?
Изменено 16 августа, 2019 пользователем AdA
52 минуты назад, AdA сказал:Подскажите пожалуйста, как выполнить код?
Если за тебя будут писать код, то ни чему не научишься.
1) Если нам нужно создать что то, то логично должна быть такая команда. Она есть. Справочник MQL4 / Графические объекты / ObjectCreate
2) Есть объект который мы хотим создать Справочник MQL4 Константы, перечисления и структуры Константы объектов Типы объектов OBJ_FIBO
3) Совмещаем эти данные, добавляем отсутствующие и будет тебе счастье.
Пробуй, спотыкайся, спрашивай чистями кода, а в пустую типа напишите. Обязательно комментируй код, не для, так для других.
Да!!! донное фибо будет нести только визуальную нагрузку. Т.Е. строить на ней стратегию не получится. У нее нет функций и взаимодействий с графиком и ценой. Типа цена пересекла уровень и открылся ордер. Такого нет!!!
Для этого нужно рассчитывать фибо в ручную!!!
Изменено 16 августа, 2019 пользователем MikR0ReR
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем