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

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


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

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

Ребята, привет всем!

Подскажите, как в советнике вернуть наличие стрелочки фрактала вверх или вниз и спустя 2 полнотелые свечи после этой стрелочки выставить отложенный ордер.


double iFractals(
string symbol, // имя символа
int timeframe, // таймфрейм
int mode, // индекс линии
int shift // сдвиг
);


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

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

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

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

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

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

Перейти

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

Перейти

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

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

я уже мучал функцию фрактала, но по сути она возвращает только уровень цены при возникновении этого фрактала.


Здравствуйте! Функция iFractals() возвращает цену верхнего фрактала, если параметром int mode указать 1, и цену нижнего фрактала, если 2.

...и спустя 2 полнотелые свечи после этой стрелочки выставить отложенный ордер.


Находите последний (самый свежий) фрактал. Считайте бары после последнего фрактала до текущего (нулевого). Если на первом и втором баре нет фракталов, а на третьем есть, то ставьте отложку.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Локальный максимум это синяя линия или серая?

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

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

В индикаторе - это линия level_0.


Добавлено: 14-05-2017 11:03:06

Уважаемый DreamWorks! Вы очень помогли в первой моей просьбе. Честно говоря, постеснялась напрямую к Вам обратиться. А зря... По факту, Вы - единственный, кто откликнулся. Спасибо.
В данном индикаторе использую только эту функцию, все остальные отключаю. Выложила скрины рабочей области и настроек данного индикатора, чтобы было понятнее.

Рабочая_область.png
Настройки_индикатора_Gann_SQ9_A2.docx

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

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

Привет. Сразу к делу. Может кто знает, как отобразить в коде советника, ближайшие ценовые зоны, которые строит индикатор. Нужно собственно выяснить минимум и максимум ближайшей зоны сверху и аналогично мин макс ближайшей зоны снизу,. Через iCustom не получается , буфера отображают информацию о фракталах, и на их основе индикатор строит прямоугольники. Через ObjectsTotal(), я сам догнать пока не могу , еще и примеров такого кода найти не могу.
Кто знает ,как это сделать отзовитесь :) Думаю и другим новичкам в MQL это будет интересно и полезно.

Shved-Supply-and-Demand-e600.mq4

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
М13 индикатор при SetGlobals == true создаёт глобальные переменные с ценами, может это Вам подойдёт? можно добавить в индикатор создание дополнительных переменных сюда:
if (SetGlobals == true)
{
GlobalVariableSet("SSSR_HI_"+Symbol()+Period()+i, zone_hi);
GlobalVariableSet("SSSR_LO_"+Symbol()+Period()+i, zone_lo);
GlobalVariableSet("SSSR_HITS_"+Symbol()+Period()+i, zone_hits);
GlobalVariableSet("SSSR_STRENGTH_"+Symbol()+Period()+i, zone_strength);
GlobalVariableSet("SSSR_AGE_"+Symbol()+Period()+i, zone_start);
}
Ссылка на сообщение
Поделиться на другие сайты

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

Уважаемый DreamWorks! Вы очень помогли в первой моей просьбе. Честно говоря, постеснялась напрямую к Вам обратиться. А зря... По факту, Вы - единственный, кто откликнулся. Спасибо.


Пожалуйста. Да, почему-то народ разбежался. Было как-то поактивней раньше. Понимаю, что профи могут быть заняты и не до этого. Но здесь очень много обучающихся, и такие вот небольшие просьбы могут быть очень полезными для приобретения навыков в программировании, а также полезными для тех, кто с этими просьбами обращается. Поэтому, студенты-MQL, не проходите мимо!

iloirin, вот Ваш индикатор.

Gann_SQ9_A2.mq4

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

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

Уважаемый DreamWorks! Огромное спасибо Вам за участие в "форекс-будущем" новичка. У меня в ближайших планах начать изучение mql-программирования. На сайте есть видео-курс и ветка на форуме. Но пока у меня еще очень мало знаний. Еще раз спасибо за поддержку. Удачи Вам!

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

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

Приветствую. У меня функция передаёт в онтик ценовые значения. Загоняю их в массив и что бы было удобнее брать оттуда свежие данные пытаюсь перевернуть направление индексации функцией ArraySetAsSeries.
Проверка (ArrayGetAsSeries) показывает, что индексация происходит как у таймсерий, но принт печатает, что ничего не изменилось.
Помогите пожалуйста разобраться.

Спойлер

extern int BarsForFractal = 11;

int i=0;
double fr;
double Arr_Fr[];

//+------------------------------------------------------------------+
int OnInit(){return(INIT_SUCCEEDED);}
//+------------------------------------------------------------------+
void OnDeinit(const int reason){}
//+------------------------------------------------------------------+
void OnTick()
{
if (!NewBar()) return; // если не новый бар, то выходим

fr=Fractal();
if (fr==0) return;

if (fr!=0)
{
ArrayResize (Arr_Fr,100000);
ArraySetAsSeries (Arr_Fr,true);

Arr_Fr [ i ] = fr;
if (Arr_Fr [ i ] >0) i++;

if (ArrayGetAsSeries (Arr_Fr)) Print("ArrayGetAsSeries true");
else Print ("ArrayGetAsSeries false");

Print ("massive___",Arr_Fr[0],"_",Arr_Fr[1],"_",Arr_Fr[2],"_",Arr_Fr[3],"_",Arr_Fr[4]);

}
}
//+------------------------------------------------------------------+
double Fractal() // возвращает значение фрактала из BarsForFractal баров
{
double UpFr=0,DwFr=0,Fr=0; int indxUpFr,indxDwFr;

indxUpFr = iHighest (Symbol(),0,MODE_HIGH,BarsForFractal,1);
if (indxUpFr==(BarsForFractal+1)/2) { UpFr = iHigh (Symbol(),0,(BarsForFractal+1)/2); Print("Up__Fr________"+DoubleToString (UpFr,Digits)); }
else UpFr=0;

indxDwFr = iLowest (Symbol(),0,MODE_LOW,BarsForFractal,1);
if (indxDwFr==(BarsForFractal+1)/2) { DwFr = iLow (Symbol(),0,(BarsForFractal+1)/2); Print("Dw__Fr________"+DoubleToString (DwFr,Digits)); }
else DwFr=0;

if (UpFr!=0) Fr=UpFr;
if (DwFr!=0) Fr=DwFr;

return (Fr);
}
//+------------------------------------------------------------------+
bool NewBar() // новый бар
{
static datetime PrevBar=0;
if (PrevBar==Time[0]) return(false);
PrevBar=Time[0];
return(true);
}
//+-------------------------------------------------------------------------------------+



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

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

Здравствуйте подскажите, как оформить в виде кода закрытие позиции по такому условию :
например позиция Buy, закрытие должно произойти , когда цена Bid выше уровня открытия на заданное кол-во пунктов и в то же время ниже минимума предыдущей свечи. Спасибо.

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Николайец Вы перед выводом переворачивайте, а после вывода возвращайте назад, тогда увидите работу функции. В Вашем случае в этом нет необходимости, если опишите что хотите получить, то может найдём более эффективный алгоритм.

М13 индикатор создаёт и поддерживает в актуальном состоянии глобальные переменные с ценами областей и доступ к ним легче, чем из советника перебирать и анализировать графические объекты. НО придётся несколько модифицировать код индикатора, т.к. Вам нужно и хай и лоу зоны. Только зоны там разные, какие именно нужны Вы не описали...
Ссылка на сообщение
Поделиться на другие сайты

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

Николайец Вы перед выводом переворачивайте, а после вывода возвращайте назад, тогда увидите работу функции. В Вашем случае в этом нет необходимости, если опишите что хотите получить, то может найдём более эффективный алгоритм.


Хочу брать последние десять значений фракталов и поработать с ними. Вот, застрял)
Ссылка на сообщение
Поделиться на другие сайты

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

Хочу брать последние десять значений фракталов и поработать с ними. Вот, застрял)

Последнее значение нужно писать в 0 ячейку всегда, переворачивать ничего не надо. При появлении нового фрактала сдвигать ячейки 0-8 в область 1-9, таким образом освобождая для записи 0-ячейку. Только будьте осторожны с копированием массива самого в себя, лучше используйте посредника - пустой массив.

Вот пример экспериментального скрипта по копированию массива в себя (так лучше не делать - результаты будут не стабильные), но поиграться с массивами в скрипте можно

Array_Copy.mq4

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

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

Здравствуйте, коллеги!
Никак не могу найти способ найти хай/лоу диапазона. Не за определенное количество свечей, как в первом уроке было, а, например, с 22.00 вчера по 7.00 сегодня. На буднях число свечей одинаковое, а вот при переходе через выходные разное.
Помогите, пожалуйста.

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

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

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

Хмм... На сколько разное? Приведите пример.
Можно конечно заморочиться и при DayOfWeek() == 1 рассчитывать номер свечи пятницы 22-00 с помощью функции iBarShift() и взять экстремумы на реальную разницу свечей.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Сейчас посчитал у двух разных брокеров - у Ф4Ю (мск-1) на буднях (М15) 47 баров, на переходе 43. На часовом 10 и 11 соответственно. У брокера с мск разницы нет. Забавно...
У Ф4Ю в пятницу последний бар в 22.59 по терминалу. В будни 23.59.

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

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

Сейчас посчитал у двух разных брокеров - у Ф4Ю (мск-1) на буднях (М15) 47 баров, на переходе 43

Для Вашей системы критичен этот лишний час? если на ф4ю будет брать от 21-00 пятницы? Если критично, то надо делать специальный расчёт для понедельника, как выше описал.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
0ll если Вы спрашиваете по расположению, то ближайшие, по отношению к цене сопротивление Res и поддержка Sup, если зона пробивается, то соответственно следующая за ней. Макс и мин зоны нужен для формализации торгового алгоритма.Если имеете ввиду по силе, то для отбоя можно все, кроме слабых Weak, думаю это лучше вынести во внешние параметры. Вообще было-бы здорово научиться работать с графическими объектами и такими индикаторами в частности. Глобальные переменные я посмотрел, но как их перебрать , по каким параметрам, чтобы получить нужные мне значения, я пока не знаю. Буду благодарен, если поможете.
Изменено пользователем М13
Ссылка на сообщение
Поделиться на другие сайты

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

Последнее значение нужно писать в 0 ячейку всегда, переворачивать ничего не надо. При появлении нового фрактала сдвигать ячейки 0-8 в область 1-9, таким образом освобождая для записи 0-ячейку.


Читал про такое решение перед тем как обратиться за помощью сюда, но закодировать не смог, не нашёл нигде примеров. Может Вы знаете где посмотреть?



Добавлено: 16-05-2017 14:39:04

Oll
Цитата

Николайец Вы перед выводом переворачивайте, а после вывода возвращайте назад, тогда увидите работу функции.


Спойлер

if (fr!=0)
{
ArrayResize (Arr_Fr,100000);

Arr_Fr[ i ]=fr;
if (Arr_Fr[ i ]>0) i++;

ArraySetAsSeries (Arr_Fr,true);

Print ("massive___",Arr_Fr[0],"_",Arr_Fr[1],"_",Arr_Fr[2],"_",Arr_Fr[3],"_",Arr_Fr[4]);

if (ArrayGetAsSeries (Arr_Fr)) Print("ArrayGetAsSeries true");
else Print ("ArrayGetAsSeries false");

ArraySetAsSeries (Arr_Fr,false);

if (ArrayGetAsSeries (Arr_Fr)) Print("ArrayGetAsSeries true");
else Print ("ArrayGetAsSeries false");

}


Теперь принты гласят, что в массиве одни нули, а перевороты работают... Изменено пользователем Николайец
Ссылка на сообщение
Поделиться на другие сайты

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

закодировать не смог, не нашёл нигде примеров. Может Вы знаете где посмотреть?

Вот примерно так (без разницы верхний/нижний):
Сначала определяем массивы: double fr[10], f0[9];
Потом в коде совы:
if ( newBar() ) {
double frc = checkFrc(); // если есть фрактал frc = цена, если нет frc = -1;
if ( frc > 0 ) {
ArrayCopy( f0, fr, 0, 0, 9 ); // копируем первые 9 ячеек в промежуточный буфер f0
ArrayCopy( fr, f0, 1, 0, 9 ); // копируем обратно, но в 1 ячейку
fr[0] = frc; } // записываем текущее значение фрактала
}

М13 глобальные переменные не надо перебирать - к ним обращаться по именам, которые Вы сами зададите. Но если хотите универсального решения, в том числе для индикаторов без исходного кода, то да, нужно обращаться через графические объекты в цикле, примерно так:
Определяемся с постоянной частью имени "своих" объектов: string objName0 = "SSSR"; // SSSR - это в Вашем случае, для других индюков будет другое имя.
int L = StringLen( objName0 ); // длина имени
for ( int i = ObjectsTotal() - 1; i >= 0; i-- ) // перебираем объекты (только не надо это делать на каждом тике!!! )
if(StringSubstr( ObjectName(i), 0, L) == objName0 ) // нашли наш объект
{ // здесь определяем что это за зона, находим границы цен и т.д. }
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

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

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

Прошу Вас, направьте мои мысли в правильном направлении :)
Что хочу сделать: журнал сделок с возможностью вписывать в него и дополнительные заметки (например, "выход из позиции по фильтру №2"),
по каждому роботу, сету и паре отдельно (мои роботы не мультивалютные),
дальше для анализа импортировать этот журнал в табличный редактор (это уже за пределами mql5).

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

Спасибо!

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

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

Пиши в текстовый файл .csv набор нужных полей через разделитель ";", потом открывай в ехеле и сразу получишь таблицу для анализа.
Тут только мелкая проблема с разделителем десятичной точки и языковыми настройками винды. Ехель по умолчанию (если винда русская) воспринимает точку как разделитель даты, поэтому надо при записи менять точку на запятую

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

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

Здравствуйте, коллеги!
Написал простой перевертыш по авторскому индикатору. Индикатор не ломаный, скомпилировался нормально. Но терминал при тестировании выдает cannot open fail и так далее.
Подскажите, в чем подвох?)

WPRRSI_UPDOWN.rar

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

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

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

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

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

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

Войти

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

Войти

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


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

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