Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

Обучение языку MQL4 под MetaTrader 4 Опубликовано
46 минут назад, AdA сказал:

в часах, примерно, чтобы освоить программирование

За 30 часов освоишь программирование в общих чертах. Этого будет достаточно для твоих задач.

Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано

 всем приветики! как в советнике вызвать исполнения скрипта/библиотеки/инд, на другом(определенном) окне графика?
 так получить № окна способов много.
 есть следующие мысли, то что могло бы пригодиться:

 ChartWindowFind() - но как в этом варианте сделать, именно сам запуск скрипта?

 EventChartCustom() // Генерирует пользовательское событие для указанного графика. 
 (думаю здесь для меня готовый пример только подойдет)

 можно ли задействовать - FileOpen() ?

 или без: WinUser32.mqh - дела не будет?

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

или см. этот урок: http://tlap.com/mql4-upravlenie-pc-iz-sovetnika/#more-30563

Изменено пользователем Ar4i
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
3 часа назад, Ar4i сказал:

как в советнике вызвать исполнения скрипта/библиотеки/инд, на другом(определенном) окне графика?

Нельзя запустить в другом окне. (Вернее можно, но это вне компетенции данной ветки)

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
34 минуты назад, 0ll сказал:

Нельзя запустить в другом окне. (Вернее можно, но это вне компетенции данной ветки)

на какую ветку сесть?)

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

@Ar4i Ваш вопрос за рамками MQL, на данном форуме не обсуждаются данные вопросы. Вы хоть опишите проблему - что хотите сделать, ибо возможны решения проще.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
1 час назад, 0ll сказал:

@Ar4i Ваш вопрос за рамками MQL, на данном форуме не обсуждаются данные вопросы. Вы хоть опишите проблему - что хотите сделать, ибо возможны решения проще.

 если конкретизировать до насущного. есть скрипт InitAllIndicators который переинициализирует индикаторы в окне на который его бросили. я хочу его запустить из советника и на другом окне графика.
думаю можно изменить и сам скрипт. но так же хотелось обзавестись и общими понятиями в выполнение таких приемов.
 так например я в коде этого скрипта(строка 69) hParentWnd = GetAncestor(WindowHandle(Symbol(),Period()),GA_ROOT); сделал изменения: GA_ROOT=2; на GA_ROOT=1; и задал строго нужного мне графика Period. и получил бросив на текущей график открытие "окна свойств инд-ра" работающего на другом графике, но без дальнейшей действий(скрипта) по полной его переинициализации.

InitAllIndicators.mq4

Изменено пользователем Ar4i
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

@Ar4i скрипт написан на функциях API Windows, а именно посылом в нужное окно нажатий клавиш - это не MQL!

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

Можете скопировать текст скрипта в советник (если хочется). Экспериментировать с константами вредно, по периоду функция ищет окно и оно должно быть открыто.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
3 часа назад, 0ll сказал:

@Ar4i скрипт написан на функциях API Windows, а именно посылом в нужное окно нажатий клавиш - это не MQL!

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

Можете скопировать текст скрипта в советник (если хочется). Экспериментировать с константами вредно, по периоду функция ищет окно и оно должно быть открыто.

 

   спасибо в первую очередь за ответ.  ясно про костыль. а про перенос в советник: ну открытое окно например это не проблема. а эксперименты с константами не очень.  намекаете тоже на не стабильную работу?  может перенос в индикатор возможен?
  ну хорошо перенес я в эксперт.  дальше изучать: "API или другие приёмы".  а, что "это" за другие приемы кстати могут быть(mql)?

Изменено пользователем Ar4i
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
В 12.08.2019 в 19:56, Ar4i сказал:

 всем приветики! как в советнике вызвать исполнения скрипта/библиотеки/инд, на другом(определенном) окне графика?
 так получить № окна способов много.
 есть следующие мысли, то что могло бы пригодиться:

 ChartWindowFind() - но как в этом варианте сделать, именно сам запуск скрипта?

 EventChartCustom() // Генерирует пользовательское событие для указанного графика. 
 (думаю здесь для меня готовый пример только подойдет)

 можно ли задействовать - FileOpen() ?

 или без: WinUser32.mqh - дела не будет?

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

или см. этот урок: http://tlap.com/mql4-upravlenie-pc-iz-sovetnika/#more-30563

Возможно для некоторых задач подойдёт вариант с шаблонами ChartApplyTemplate или переделка индикаторов и сов под управление через GV переменные

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
4 часа назад, sniv сказал:

Возможно для некоторых задач подойдёт вариант с шаблонами ChartApplyTemplate или переделка индикаторов и сов под управление через GV переменные

 GV-переменные и функция ChartApplyTemplate() - вряд ли про мой случай. 

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

  ну хорошо, сузим задачу до одного вопроса. перенес я код скрипта в советник и сделал в виде функции. 
вопрос, могу ли я запустить работу этой функции средствами mql4(API отбросили) на другом открытом графике?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

@Ar4i Это будет функция MQL запускаете её как обычно, только передаёте в неё название графика, чтоб найти окно и начать работать с индикаторами.

Другое дело как часто или по какому событию Вы будете её запускать - нужно понять, что индикаторы нуждаются в реините.

Я вот не представляю зачем она вообще нужна...

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Подскажите, как сделать чтобы советник выдавал данные с пользовательского индикатора по всем символам указанным в окошке "Обзор рынка" и выдавал алерт на телефон, для одного конкретного символа это будет выглядеть так: 

{
    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 ("Алерт на мобильник продажа");
            }
                     
         }  
       }
   
  }

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
4 часа назад, 0ll сказал:

@Ar4i Это будет функция MQL запускаете её как обычно, только передаёте в неё название графика, чтоб найти окно и начать работать с индикаторами.

Другое дело как часто или по какому событию Вы будете её запускать - нужно понять, что индикаторы нуждаются в реините.

Я вот не представляю зачем она вообще нужна...

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

 " -  только передаёте в неё название графика, чтоб найти окно и начать работать с индикаторами."
  а как правильней передать ей название, может еще номер, ID графика?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
49 минут назад, Partorius сказал:

Подскажите, как сделать чтобы советник выдавал данные с пользовательского индикатора по всем символам указанным в окошке "Обзор рынка"

а , зачем данные с индикатора...   окно обзор рынка общий . из  советника через MarketInfo(). я так думаю.

сигнал на тел. смотри урок: http://tlap.com/signalyi-na-pochtu-i-mobilnyie/

Изменено пользователем Ar4i
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
2 часа назад, Ar4i сказал:

а , зачем данные с индикатора...   окно обзор рынка общий . из  советника через MarketInfo(). я так думаю.

сигнал на тел. смотри урок: http://tlap.com/signalyi-na-pochtu-i-mobilnyie/

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

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

@Ar4i у Вас в скрипте есть функция hParentWnd = GetAncestor(...), вот для неё и нужно передать WindowHandle, только надо сначала сделать окно активным, иначе, имхо, поп-ар не всплывёт...

Нужно пробовать или читайте MSDN Microsoft - это тема большая и здесь оффтоп.

По поводу 1 секунды - у Вас в коде есть параметр PAUSE = 4000 (это задержка в мсек) ,т.е. 4 сек, желательно после каждого PostMessageA делать паузу, потому что Винда поставит Ваше сообщение в очередь и может быть задержка выполнения команды, и это на каждом индикаторе, поэтому 1 секунды не хватит точно. При этом нельзя лезть руками и клацать мышкой по разным окнам - всё слетит и задержки увеличатся, т.е. запустил, затаи дыхание и жди остановки. Идея запускать почаще - утопия!

 

4 минуты назад, Partorius сказал:

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

@Partorius в функции  iCustom (NULL, 0, "Индикатор", RISK, 0, 1); вместо NULL пишите пару, можно сделать цикл по всем парам из обзора рынка - только есть большая вероятность повесить терем, ибо он развернёт в оперативе копии индикатора со всеми буферами для каждой пары.

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

спасибо! будем пробовать. только уточню: эти 4сек для начала лучше пока оставить и не уменьшать- да? замечу, что эта функция будет запускаться по бару на м5 скажем.  а 4сек(4000мсек) дается я так понял ей самой на выполнения себя, учитывая задержку на очередь в потоке.

Изменено пользователем Ar4i
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

@Ar4i 4 сек на вызов окна списка индикаторов и потом на вызов окна свойств каждого индикатора, величина сильно зависит от параметров компа, если у Вас шустрый комп, то и 1 сек может хватить

  • Спасибо 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

ясно. и последнее. попробую проскользнуть по минимуму оффтопа если позволите, касательно WindowHandle(). 
в варианте WindowHandle() с использованием  WIN API, идет добавка параметра GA_ROOT=2; 
hParentWnd = GetAncestor(WindowHandle(Symbol(),Period()),GA_ROOT); 
какой это должен быть параметр если WindowHandle("EURUSD",PERIOD_M1)?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

@Ar4i Ваш вопрос относится к функции GetAncestor библиотеки user32.dll - я даже предполагать не буду, смотрите и разбирайтесь, вот ссылка

Там же смотрите описание других функций API

  • Спасибо 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Мой первый советник. Рассчитать АТР и вывести в коммент.

Правильно написан?

ATR.mq4

Изменено пользователем AdA
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
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);

 

ATR.mq4

Изменено пользователем MikR0ReR
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
3 часа назад, MikR0ReR сказал:

Вот и все.

Спасибо!
Во вложении начал писать советника:

- нарисовать линии коррекции фибоначи по экстремумам.

Нашел экстремумы, но никак не получается нарисовать фибу.

Подскажите пожалуйста, как выполнить код?

Fibo_on_extremum.mq4

Изменено пользователем AdA
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
52 минуты назад, AdA сказал:

Подскажите пожалуйста, как выполнить код?

Если за тебя будут писать код, то ни чему не научишься.

1) Если нам нужно создать что то, то логично должна быть такая команда. Она есть. Справочник MQL4 / Графические объекты / ObjectCreate

2) Есть объект который мы хотим создать Справочник MQL4 &nbsp;Константы, перечисления и структуры &nbsp;Константы объектов &nbsp;Типы объектов &nbsp;OBJ_FIBO

3) Совмещаем эти данные, добавляем отсутствующие и будет тебе счастье.

 

Пробуй, спотыкайся, спрашивай чистями кода, а в пустую типа напишите. Обязательно комментируй код, не для, так для других.

 

Да!!! донное фибо будет нести только визуальную нагрузку. Т.Е. строить на ней стратегию не получится. У нее нет функций и взаимодействий с графиком и ценой. Типа цена пересекла уровень и открылся ордер. Такого нет!!!

Для этого нужно рассчитывать фибо в ручную!!!

Изменено пользователем MikR0ReR
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...