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

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


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

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

@Svob Можно! Это все делается тоже через объекты. Прошлых сообщения я говорил не только о линиях и об прямоугольниках тоже.

Хм.. Это уже сложнее :)

Пробовал привязаться к цвету прямоугольника через ObjectGet, но возникла загводка с именем прямоугольника. Оно имеет всегда разный порядковый номер, например: А1, А2 и т.д. А в функции имя всегда жёстко прописывается, насколько я понял.
Как можно сделать, чтобы цвет читался именно из последнего?

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

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

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

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

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

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

Перейти

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

Перейти

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

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

@Svob :-W обидно.

есть 5 элементов а1 а2 а3 а4 а5

есть группы "Строковые функции" и "Преобразование данных"

вырезаешь "а" или извлекаешь "№"

остается "№"

вычехляешь последний, то есть большее "5"

к "а" прибавляешь "5" это и будет последнее имя объекта "а5"

 

Как то так.

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

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

Помогите разобраться, пожалуйста.. Есть скрипт (приложил), который должен выдавать список объектов в журнал.. А у меня не выдаёт, в журнале только отчитывается о старте и удалении. Почему?

test_obj_name.mq4

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

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

@Svob Может потому что нужно смотреть вкладку "Эксперты", а не "Журнал". Скрипт рабочий!

Спойлер

1.jpg.1a2b376de2b31b37283dc9d46eeb2399.jpg

 

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

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

Нужна помощь в вопросе импорта биржевых данных из Quik в MT4 для возможности проведения теханализа с использованием реальных данных, предоставляемых биржей - объемов, открытых позиций, заявок (спрос/предложение) и других.  Тема обширная и непростая, нужен пинок в правильном направлении.

Что знаю и умею- программировал на MQL, VB? VBA под эксель, LUA, немного Паскаль, СИ. Нужна руководящая и направляющая сила (наставник), разбирающийся в вопросах передачи данных по сети и между приложениями (все под винду). Делать готов все сам, но пока даже не понимаю с какой стороны подступиться.

На росбирже у меня открыт реальный счет, торгую уже больше 12 лет. Под МТ4 есть индикатор, который я использую в работе - не грааль, а просто взгляд на рынок под определенным своеобразным углом. Есть также советник, который достаточно легко адаптировать под себя, использую для ММ. Проблема в том, при портировании кода советника в КВИК столкнулся с тем, что разработчики КВИКа не предоставляют доступ к объектам графика, необходимым для построения индикатора (линии, прямоугольники, равноудаленные каналы), соответственно, построить нормальный индикатор не получается. И это не единственный подводный камень, там их много.

Итак, задача, как я её себе представляю, такая - связать два приложения МТ4 и КВИК посредством любого из предоставляемых WINAPI способов (мейлслот, пайп, мейморимаппед, или любого другого, хотя использование промежуточных файлов с записью на диск крайне нежелательно), при этом КВИК должен быть сервером, а МТ4 клиентом. Сервер по запросу клиента предоставляет данные, а клиент, приняв их, в реальном времени строит график, на который можно наложить индикатор (какой, значения не имеет) и запустить советник, который будет генерировать сделки. Как эти сгенерированные сделки передать обратно в КВИК пока не парюсь, до этого сильно далеко.

Буду благодарен за любую помощь.

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

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

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

@VNG_nemo  просмотр чужого потока в МТ4? - даже не слышал о таком, это нужно ломать МТ очень сильно и долго.

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

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

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

Огромное спасибо за ответ.

 

На форуме метаквотов, не помню год, где-то 2011, была выложена либа с помощью которой я воспроизводил тики из таблицы  обезличенных сделок КВИКа на офлайн графике МТ4 посредством вывода этой таблицы через DDE в ЭКСЕЛЬ. Из экселя эта либа транслировала данные из ячейки в МТ4. И ничего ломать было не нужно. В то время еще к КВИКу не прилагалась LUA.dll, поэтому и приходилось использовать костыль. Сейчас же все данные КВИКа легко можно забрать посредством таблиц LUA. Кроме того, к LUA цепляется библиотека FFI, которая позволяет работать с СИ. Копаясь в сети нашел вот такую инфу https://www.forexfactory.com/showthread.php?t=834471, может быть кто-то подскажет как это дело могло бы помочь в решении данной проблемы.

Итого, данные из таблиц КВИКа легко забираются. Их можно без всякого ломания запихнуть непосредственно в МТ4. Вопрос в том, как создать прямой канал передачи таких данных, желательно через сокет.

Покопаюсь и позже выложу ссылки на упомянутую библиотеку для передачи данных через ЭКСЕЛЬ.

 

Upd.  ссылка https://www.mql5.com/ru/code/8175 , по ней вы найдете библиотеку для передачи данных из ЭКСЕЛЬ в МТ4 и примеры ее использования.

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

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

Нашел в базе кодов библиотеку сокетов, выполненную полностью на MQL. https://www.mql5.com/en/code/9296

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

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

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

Здравствуйте!

Для советника хотел использовать индикатор A/D, но не в чистом виде, его moving average.

Поскольку я не нашел способа как в стандартную функцию iMA() запихать значение не цены, а показания A/D, поэтому сочинил функции:

//+------------------------------------------------------------------+
//|  Функция A/D                       |
//+------------------------------------------------------------------+
double A_D(ENUM_TIMEFRAMES tf, int shift)
  {
   double res=0;

   res=iAD(NULL,tf, shift);

   return res;


  }

//+------------------------------------------------------------------+
//|  Функция A/D _moving                      |
//+------------------------------------------------------------------+
double A_D_moving(ENUM_TIMEFRAMES tf, int sq_, int shift)
  {
   double res=0;
   double a=0;
 //  sq_=5;

   for(int i=sq_+shift; i>=0+shift; i--)
     {
      a+= A_D(tf, i);


     }
res=a/sq_;
   return res;


  }

Но при тестировании стало очевидно, что значения функции A_D_moving() отличаются от показаний MA натянутой на A/D.

Прошу, кто может, помогите в следующих вопросах:

1.Можно ли в стандартную функцию iMA() запихать значение не цены, а показания A/D?Если да, то как корректно это сделать?

2. Насколько корректно написана функция A_D_moving()? Если есть ошибки прошу указать...

Спасибо!

 

 

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
  • @Владимир Стариков iMAOnArray для этого существует чтоб туда пихать не цены.
  • Ошибки есть. Это не подписывать строки, х.з че ты там хотел сделать. Это тебе понятно, для нас х.з че в твоей голове. Распиши, тогда можно будет о чем то говорить.
Ссылка на сообщение
Поделиться на другие сайты

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

Обещанная ссылка на скрипт передачи данных из ЭКСЕЛя в МТ4.

https://www.mql5.com/ru/code/10498

Все проверял на боевом счете, работало на ура.

 

Задача по прежнему состоит в том, чтобы передавать данные минуя эксель посредством таблиц КВИКА напрямую через сокет винды в МТ4. Обработка таблиц легко реализуется на LUA, который встроен в КВИК, к LUA прикручивается библиотека FFI  и WIN API.

 

Кто-нибудь может пнуть в правильном направлении?

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
1 минуту назад, MikR0ReR сказал:
  • @Владимир Стариков iMAOnArray для этого существует чтоб туда пихать не цены.
  • Ошибки есть. Это не подписывать строки, х.з че ты там хотел сделать. Это тебе понятно, для нас х.з че в твоей голове. Распиши, тогда можно будет о чем то говорить.

Спасибо!

//+------------------------------------------------------------------+
//|  Функция A/D               должна возвращать (по идее) среднее значение за период  sq_      |
//+------------------------------------------------------------------+
double A_D_moving(ENUM_TIMEFRAMES tf, int sq_, int shift)
  {
   double res=0;
   double a=0;

   for(int i=sq_+shift; i>=0+shift; i--)  - цикл набора значений индикатора A/D за период от sq_+shift до 0+shift
     {
      a+= A_D(tf, i);


     }
res=a/sq_;  - вычисление среднего значения индикатора A/D за период от sq_+shift до 0+shift
   return res;


  }

 Про iMAOnArray видел в справке. Но не понимаю как использовать в моем случае. Буду признателен, если поможете...

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
  • @Владимир Стариков (0+shift) ставит под сомнение понимание не только что ты делаешь но и математику. 0+1=1, 0+10=10, 0+100=100, просто ставь (shift)
  • Твой график расходится с оригиналом так как МА считает по хитрой формуле. Ты считаешь тупо среднее значение. fcplm
  • Собираешь значения АД в массив и передаешь в iMAOnArray. Чего не понятного? >D-b<
Ссылка на сообщение
Поделиться на другие сайты

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

Добрый день. Не могу поставить панельку - терминал зависает, скорее всего проблема на 252-255 строке кода.
Подскажите пожалуйста в чем может быть проблема

Tabl.rar

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

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

@ademen fcplm 

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

Спойлер

error.thumb.jpg.87cb75ef3b824afd740f5027ef44c7b9.jpg

 

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

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

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

Нужно просто делать - создайте клиента на Квике и сервер на МТ и пытайтесь установить коннект и передачу любой инфы. 

Инфу для передачи нужно упаковать в некий формат типа: 1 байт - код инфы, 8 байт - время, 8 байт - цена.

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

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

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

Приветствую. Появились сомнения в "правильности" некоторой части подаваемой в уроках логики, и вот что на это ответили на форуме MQL:

Andrey Sokolov:

Добрейшего вечера. 

Подскажите, пожалста, уместно ли сравнивать последовательность открытия ордеров из истории по номеру тикета? (Как это делают в известных видео-уроках)

Сомнения возникли от того что OrderSend() возвращает тип int, который не бесконечен, и, предположу, когда-то обнуляется.

в общем это некорректно. Просто так исторически сложилось и пока-что поддерживается. Int переполнить, это надо ещё и суметь :-)

помимо переполнения это ещё и security-bug, думаю что в неких перспективных релизах это "сломают" и все идентификаторы получаемые с сервера станут непредсказуемы. 

для сохранения последовательности есть метки времени, если их нехватает то magic и comments в помощь

PS/ кстати даже в 4-ке возможны ситуации когда более поздний ордер получит меньший ticket без целочисленного переполнения. Например одновременная работа двух советников на разных чартах в одной стратегии.

 

https://www.mql5.com/ru/forum/160683/page1114#comment_15781243

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

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

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

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

Int, который может в себе хранить число 2 147 483 647 превысить сложно. У Альпари, где у меня счет открыт более 6 лет сейчас номер тикета 1 477 019 223, а сам брокер я даже не знаю с какого года начал вести нумерацию тикетов. Так что нам еще долго ждать переполнения. А даже, если оно и произодет, то косяк в подсчете ордеров будет только первые 10-20 ордеров после обнуления, потом все встанет на свои места. 
Но вообще, для каждой системы нужно применять разные методы. Если у меня сетка ордеров, которая закрыла сразу в одну секунду 15 ордеров, то я смогу понять, какой был открыт первый только по тикету, либо по торговому лоту, поэтому их и использую в анализе. Если торговля без сетки, то можно сортировать и по времени закрытия. 
Ко всему прочему нужно помнить, что последовательность ордеров у брокера храниться по разному, не всегда по времени закрытия. Т.е. чтобы точно узнать последовательность ордеров по времени закрытия, нужно вначале их добавить в массив, отсортировать по убыванию, а потом уже проводить работу с самим массивом. 
Так или иначе - обучающие курсы показывают только один из вариантов поискать ордеров, ученик же сам пополняет свою базу из практики их применения.

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
В 08.04.2020 в 15:22, Rever27 сказал:

Int, который может в себе хранить число 2 147 483 647 превысить сложно. У Альпари, где у меня счет открыт более 6 лет сейчас номер тикета 1 477 019 223, а сам брокер я даже не знаю с какого года начал вести нумерацию тикетов. Так что нам еще долго ждать переполнения. А даже, если оно и произодет, то косяк в подсчете ордеров будет только первые 10-20 ордеров после обнуления, потом все встанет на свои места. 

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

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

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

В уроке по трейлинг стоп ошибка.

При такой логике, если сл задается 0 (а здесь он задается 0), то будут сразу модифицированы. Возможно в сточках 1 следует убрать "  || OrderStopLoss()==0 " 

img-2020-04-14-16-53-08.png

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

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

В уроке по трейлинг стоп ошибка.

Я бы вначале добавил условие:

if(TrailingStop > 0) {
}

чтобы при 0 он вообще не использовался.
Под цифрой 1 OrderStopLoss() == 0 нужно убрать. 

И еще в строке 82 два раза повторяется TrailingStep.

И в строке самой модификации не указан текущий OrderTakeProfit(), экспирейшн и цвет. Хз, насколько это критично, но с таким типом записи вроде бы будет ошибка компиляции.

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

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

Здравствуйте! Подскажите начинающему, можно ли к советнику добавить MTF индикатор ( к примеру Ozumandias) , если да то как правильно брать его значения,

в случае если советник стоит на минутном графике данные нужны с дневного ,часового.

 

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

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

Подскажите начинающему, можно ли к советнику добавить MTF индикатор ( к примеру Ozumandias) , если да то как правильно брать его значения,

в случае если советник стоит на минутном графике данные нужны с дневного ,часового.

Индикатор не обязан быть МТФ, чтобы взять с него любой период. 

   int Amplitude = 2
   double up = iCustom(Symbol(),PERIOD_H1,"Ozymandias",Amplitude,0,1);
   double down = iCustom(Symbol(),PERIOD_H1,"Ozymandias",Amplitude,1,1);

Данный код берет значение с часового графика PERIOD_H1 на 1 закрытой свече. При том не важно, на какой именно ТФ будет установлен советник с этим кодом. Если нужен на дневках, то меняется на PERIOD_D1.

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

Ozymandias.mq4

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

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

Спасибо! Изучил половину обучающих уроков, а про периоды что то упустил , всегда "0" ставил еще раз спасибо,

17 минут назад, Rever27 сказал:

Индикатор не обязан быть МТФ, чтобы взять с него любой период. 


   int Amplitude = 2
   double up = iCustom(Symbol(),PERIOD_H1,"Ozymandias",Amplitude,0,1);
   double down = iCustom(Symbol(),PERIOD_H1,"Ozymandias",Amplitude,1,1);

Данный код берет значение с часового графика PERIOD_H1 на 1 закрытой свече. При том не важно, на какой именно ТФ будет установлен советник с этим кодом. Если нужен на дневках, то меняется на PERIOD_D1.

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

Ozymandias.mq4 2 \u043a\u0411 · 1 загрузка

 

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

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

Кто сможет написать 

Написать информационный советник, в котором ордера не открываются.

1.       В окне настроек ввести строку Distance (по умолчанию =4 бара) целое положительное число

2.       При запуске на первом тике произвести анализ текущей ситуации.

3.       Определить Open бара №0. Алерт «Open бара №0=…»

4.       В окне терминала комментарии слева в столбик Заголовок «Алгоритм №1» +(количество строк = Distance):

Алгоритм №1

Бар №1: O1=(Open), Н1=(High), L1=(Low), C1=(Close)

Бар №2: O2=(Open), Н2=(High), L2=(Low), C2=(Close)

Бар №3: O3=(Open), Н3=(High), L3=(Low), C3=(Close)

Бар №4: O4=(Open), Н4=(High), L4=(Low), C4=(Close)

5.       Произвести проверку по поиску максимальное значение High (maxHigh). Алерт: «maxHigh=…, Bar №…»

6.       Произвести проверку по поиску максимальное значение Close(maxClose). Алерт:«maxClose=…, Bar №…»

7.       Произвести проверку по поиску минимальное значение Close(minClose). Алерт: minClose=…, Bar №…»

8.       Произвести проверку по поиску минимальное значение Low(minLow). Алерт: minLow=…, Bar №…»

9.       Отразить эти значения в окне терминала в следующей строке в том же столбике:

maxHigh=…, maxClose=…, minClose=…, minLow=…,

10.   Производить действия с п.6 по п.9 каждый раз при открытии нового бара. То есть все значения должны оставаться неизменными на протяжении формирования нового(нулевого) бара.

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

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

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

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

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

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

Войти

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

Войти

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


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

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