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

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


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

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

Никто не поможет вшить в скомпилированный код.. надо файл с расширением mq4

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

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

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

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

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

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

Перейти

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

Перейти

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

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано
d1w4m3 Получилось ?
Небольшое замечание: NormalizeDouble() не надо использовать часто - не за чем. Эта функция используется только для передачи цены в функции работы с ордерами! т.е. OrderModify() OrderOpen(). В других случаях это просто потеря времени.
Ссылка на сообщение
Поделиться на другие сайты

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


d1w4m3 Получилось ?
Небольшое замечание: NormalizeDouble() не надо использовать часто - не за чем. Эта функция используется только для передачи цены в функции работы с ордерами! т.е. OrderModify() OrderOpen(). В других случаях это просто потеря времени.



Конечно получилось)Спасибо учителям)
мм)если не затруднит:
uptr = iCustom(NULL, 0, "FL11",12.0,34.0,69.0,"5,3","5,3","5,3",172,174,82,"",FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,4, 0);
dntr = iCustom(NULL, 0, "FL11",12.0,34.0,69.0,"5,3","5,3","5,3",172,174,82,"",FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,5, 0);
bool UP_Trend()
{
if(uptr > 0 && uptr != 2147483647.0) return(true);
return(false);
}
//+------------------------------------------------------------------+
bool DN_Trend()
{
if(dntr > 0 && dntr != 2147483647.0) return(true);
return(false);
}
В чем я тут мог ошибиться?Вроде буферы взял правильно?
Ссылка на сообщение
Поделиться на другие сайты

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

В чем я тут мог ошибиться?Вроде буферы взял правильно?

Может на 0 баре нет ничего? Я так думаю и на 1 баре может не быть... Понаблюдайте за индюком.
Ссылка на сообщение
Поделиться на другие сайты

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

Доброго времени суток всем. во втором видеоуроке автор показал как определять максимум и минимум за последние 10 баров, не подскажет ли кто нибудь, как определить те же минимум и максимум цены скажем за первые семь (например) часов. Что то вроде стратегии пробой утреннего флэта . Попытка разобраться самостоятельно ни к чему не привела -я только начал осваивать MQL и опыта и знаний 0. Заранее спасибо

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
вут716 Вам понадобятся несколько функций, алгоритм такой:
Определяем кол-во бар для анализа
barcount = 7 * 60 / _Period; // 7 часов * 60 минут / текущий период графика
При наступлении часа прорыва флета определяем High/Low
iHigh(NULL, 0, iHighest(NULL, 0, MODE_HIGH, barcount, 0)); // с Low аналогично
Ссылка на сообщение
Поделиться на другие сайты

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

Добрый день.
В чем может быть проблема?
2017.07.17 11:17:26.815 TestGenerator: unmatched data error (volume limit 1555 at 2017.04.13 18:30 exceeded)

uptr = iCustom(NULL, 0, "FL11",12.0,34.0,69.0,"5,3","5,3","5,3",172,174,82,"",FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,4, 2);
dntr = iCustom(NULL, 0, "FL11",12.0,34.0,69.0,"5,3","5,3","5,3",172,174,82,"",FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,5, 2);

if( lastBarTime != Time[0] && Ask > ma && !CountSell() > 0 && BuySignal()==true && UP_Trend()==true)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "Sloper", Magic, 0, Blue);
if (ticket>0)
{
TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

if (OrderSelect(ticket, SELECT_BY_TICKET))
if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Ошибка на покупку");
lastBarTime = Time[0];
}
bool UP_Trend()
{
if(uptr > 0 && uptr != 2147483647.0) return(true);
return(false);
}
bool DN_Trend()
{
if(dntr > 0 && dntr != 2147483647.0) return(true);
return(false);
}

Не работает после добавления FL11

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

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

Здравствуйте. Ограничьте историю в барах пожалуйста, очень мешает лишнее на графике...


Добавлено: 17-07-2017 18:23:37

-Volume_Custome_2xMA.mq4
-Volume_Custome_2xMA.mq4

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

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

Не то,спасибо. И у меня тоже немного не то. Мне важно знать ,что у только закрытой свечи больше объема, чем у предыдущей! Поэтому подвал стандартный вообще не нужен, а на этом много линий((

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Strong-Tezis, так какой, в итоге, из 3-х одинаково названных индюков в топике правильный?
Надо оставить один - или указать какой правильный в килобайтах.
Ссылка на сообщение
Поделиться на другие сайты

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

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


Добавлено: 18-07-2017 12:34:14

---Volume vLine(Last) - Это почти готовая версия того что было нужно. Единственное что мне не удалось, это удаление объектов или перерасчет, пересчитывает(удаляет лишние линии) при повторной загрузке шаблона. Если кроме меня кому то тоже был нужен такой индик, то сорри ,сделал все что мог...

---Volume_vLine.mq4
---Volume_vLineLast.mq4

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

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

Добрый вечер, как правильно задать? Например если 2 свечи D1 подряд бычьи, то это аптренд (ищу покупки), пока не появиться 2 медвежьи свечи подряд, начинаю искать продажи, а то получается что он постоянно проверяет условие?
open1 = NormalizeDouble(iOpen(NULL, PERIOD_D1, 1), Digits);
open2 = NormalizeDouble(iOpen(NULL, PERIOD_D1, 2), Digits);
close1 = NormalizeDouble(iClose(NULL, PERIOD_D1, 1), Digits);
close2 = NormalizeDouble(iClose(NULL, PERIOD_D1, 2), Digits);
bool DN_Trend()
{
if( close1>open1 && close2>open2 ) return(true);//1й и 2й бар медвежий
else return(false);
}
//+------------------------------------------------------------------+
bool UP_Trend()
{
if(open1>close1 && open2>close2) return(true);//1й и 2й бар бычий
else return(false);
}

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

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

if(open1>close1 && open2>close2) return(true);//1й и 2й бар бычий - это медвежьи бары :d
Чтоб на каждом тике не вычисляла тренд надо проверять день недели, если новый день - вычисляем.

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

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

Спасибо))Я утром уже увидел)) #:-s
мммм.. я опять не правильно задал вопрос походу)
Задача чтоб было условие: если было 2 бара up D1, то покупки разрешаются, пока не появятся 2 бара down D1.

Новый_точечный_рисунок.jpg

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

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

Задача чтоб было условие: если было 2 бара up D1, то покупки разрешаются, пока не появятся 2 бара down D1.

Я и пишу: Появился новый дневной бар - определяем тренд.
Новый дневной бар можно определить так:
bool isNewDay()
{
static int opDay = 0;
if ( DayOfYear() != opDay ) { opDay = DayOfYear(); return(true); } return(false);
}
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Доброе утро.
Возник вопрос с индикатором Slope?Почему не получается реализовать вход через функцию?
Что я упускаю?
//возвращает данные DN буфера
double Reds(int shift)
{
double buf = iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1,shift);
return(buf);
}
//возвращает данные UP буфера
double Greens(int shift)
{
double buf = iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, shift);
return(buf);
}
bool SellSignal()
{
//если последний столбик красный, а предпоследний зеленый
if(Reds(1)!=0&&Greens(2)!=0) return(true);
else return (false);
}
bool BuySignal()
{
//если последний столбик зеленый, а предпоследний красный
if(Greens(1)!=0&&Reds(2)!=0) return(true);
else return (false);

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

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

попробуй принтом вывести оба буфера в лог, может там не "0"? У значений дубль иногда бывает, что 0.00...001 = 0. Пару раз сталкивался, с тех пор опасаюсь с 0 сравнивать - только через

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

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

Ок спасибо, правильно я понимаю просто Print(buf);? а потом \тестер\logs

При таком условии все работает. Но хочется научится и через функцию, как правильно сделать и записать код)
uptr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, n), 4);
bool UP_Trend()
{
if(uptr > 0 && uptr != 2147483647.0) return(true);
return(false);
}

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

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

нет, на новом баре читаешь буфера: uptr = iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, 1);
ну или через функцию:
double Reds(int shift) { return( iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1, shift) ); }
потом Print( "
Функцию сравнения можно записать так (на выбор):
bool UP_Trend() { return ( uptr > 0 && uptr bool DN_Trend() { return ( Reds(1) > 0 && Reds(1)

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

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

Извиняюсь, а где про такую запись можно почитать и вникнуть, в чем я не прав при такой записи?
double Reds(int shift)
{
double buf = iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1,shift);
return(buf);Print("buf=",buf);
}
и при Вашей выдает ошибку "declaration without type" или я опять туплю))


Добавлено: 23-07-2017 13:41:09

bool SellSignal()
{return(Reds(1) > 0 && Reds(1)0 && Greens(2)Вот вроде заработало)))Но как то не красиво и он открывает на первый бар, по изменению цвета, даже если shift поменять,
то да весь смысл теряется, задача вообще была чтоб он открыл через функцию на 3 бар? Изменено пользователем d1w4m3
Ссылка на сообщение
Поделиться на другие сайты

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

после return ничего работать не будет, даже Print. :d
сунь параметр shift в SellSignal() и будет так:
bool SellSignal(int shift)
{return(Reds(shift) > 0 && Reds(shift)0 && Greens(shift+1)

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

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


после return ничего работать не будет, даже Print. :d
сунь параметр shift в SellSignal() и будет так:
bool SellSignal(int shift)
{return(Reds(shift) > 0 && Reds(shift)0 && Greens(shift+1)


Вот я валенок))невнимательность главная проблема походу)

Добавлено: 24-07-2017 04:32:52

Я очень извиняюсь, но теперь я в конец запутался)
//возвращает данные DN буфера
double Reds(int shift)
{
double buf = iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1,shift);
return(buf);
}
//возвращает данные UP буфера
double Greens(int shift)
{
double buf = iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, shift);
return(buf);
}
//если последний столбик красный, а предпоследний зеленый
bool SellSignal(int shift)
{return(Reds(shift) > 0 && Reds(shift)0 && Greens(shift+1)
//если последний столбик зеленый, а предпоследний красный
bool BuySignal(int shift)
{return(Greens(shift)>0 && Greens(shift)0 && Reds(shift+1) Изменено пользователем d1w4m3
Ссылка на сообщение
Поделиться на другие сайты

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

Я очень извиняюсь, но теперь я в конец запутался)

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

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

нет я структуру примерно понял, запутался в
//возвращает данные DN буфера

double Reds(int shift) { return( iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1, shift) ); }

а потом как мы можем всунуть shift в bool переменную????Я такого ни где не видел, и мы ее уже объявляли??
bool SellSignal(int shift)
{return(Reds(shift) > 0 && Reds(shift)0 && Greens(shift+1)Ибо я структуру сам запутал?Но буфер то надо вернуть....

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

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

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

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

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

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

Войти

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

Войти

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


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

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