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

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


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

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

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

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

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

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

Перейти

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

Перейти

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

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

Помогите, кому не трудно написать условие для входа допустим в sell: анализируем 2 свечи, первая должна закрыться за линией болинджера MODE_UPPER (то есть свеча бычья), вторая свеча должна быть медвежья независимо от линии и на закрытии этой свечи вход. Заранее спасибо.

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

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


Помогите, кому не трудно написать условие для входа допустим в sell: анализируем 2 свечи, первая должна закрыться за линией болинджера MODE_UPPER (то есть свеча бычья), вторая свеча должна быть медвежья независимо от линии и на закрытии этой свечи вход. Заранее спасибо.



Как-то так :

if( (iOpen(NULL,0,2) iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_UPPER,2)> iClose(NULL,0,2)) && (iOpen(NULL,0,1)>iClose(NULL,0,1) )
{

.... Открытие ордера

}

Добавлено: 17-11-2016 13:22:44


Спасибо, vitek01
И снова нужна помощь по этому же уроку.
В Дом.Зад. нужно, чтобы советник закрывал все открытые им ордера при достижении определенного убытка в пунктах.
Подскажите, как это реализовать, или хотя бы откуда начинать "копать"?



Организуется цикл, который по перебирает все ордера, открытые этим советником (проверяет по меджику).
Считается разница между текущей ценой и ценой открытия ордера - результаты всех ордеров суммируются.
Если сумма больше определенного убытка - получаем сигнал на закрытие.
Организуем второй цикл, где все ордера с нашим меджиком закрываются

Добавлено: 17-11-2016 14:05:18

alex161271 У вас в условии уже "цикл" заложен, который выполняется с каждым тиком
"Удаляем противоположный ордер - Открываем новый "
на следующем тике опять "Удаляем противоположный ордер - Открываем новый" и тд и тп
Изменено пользователем AndreyGold
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Подскажите пожалуйста, как можно подсчитать профит за определенный период, например за последнюю неделю?

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

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


Подскажите пожалуйста, как можно подсчитать профит за определенный период, например за последнюю неделю?



Если в тестере - то по ходу запоминаем Баланс на начало недели, через AccountBalance()
и смотрим результат на конец недели.
Если на какой-то текущий момент на реале то внутри необходимого интервала дат перебираются итоги
всех задействованных ордеров и через OrderProfit(), OrderSwap(), OrderCommission() по каждому ордеру
высчитывается итог каждого ордера ну и соответственно интересующего нас периода.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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



Подскажите пожалуйста, как можно подсчитать профит за определенный период, например за последнюю неделю?



Если в тестере - то по ходу запоминаем Баланс на начало недели, через AccountBalance()
и смотрим результат на конец недели.
Если на какой-то текущий момент на реале то внутри необходимого интервала дат перебираются итоги
всех задействованных ордеров и через OrderProfit(), OrderSwap(), OrderCommission() по каждому ордеру
высчитывается итог каждого ордера ну и соответственно интересующего нас периода.

Спасибо. Я так и мыслю. Только как задать даты интервала? Пробовал через
int day = TimeDay(TimeCurrent());
возвращает текущую дату. А как получить например понедельник 14.11.2016?
Ссылка на сообщение
Поделиться на другие сайты

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




Подскажите пожалуйста, как можно подсчитать профит за определенный период, например за последнюю неделю?



Если в тестере - то по ходу запоминаем Баланс на начало недели, через AccountBalance()
и смотрим результат на конец недели.
Если на какой-то текущий момент на реале то внутри необходимого интервала дат перебираются итоги
всех задействованных ордеров и через OrderProfit(), OrderSwap(), OrderCommission() по каждому ордеру
высчитывается итог каждого ордера ну и соответственно интересующего нас периода.

Спасибо. Я так и мыслю. Только как задать даты интервала? Пробовал через
int day = TimeDay(TimeCurrent());
возвращает текущую дату. А как получить например понедельник 14.11.2016?

Сергей Есть функция TimeDayOfWeek() возвращает день недели указанной даты в нее загоняете TimeDay(TimeCurrent()) и минусуя разницу между текущим днем недели и понедельником получаете
дату понедельника
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


alex161271 У вас в условии уже "цикл" заложен, который выполняется с каждым тиком
"Удаляем противоположный ордер - Открываем новый "
на следующем тике опять "Удаляем противоположный ордер - Открываем новый" и тд и тп



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

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



alex161271 У вас в условии уже "цикл" заложен, который выполняется с каждым тиком
"Удаляем противоположный ордер - Открываем новый "
на следующем тике опять "Удаляем противоположный ордер - Открываем новый" и тд и тп



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


Какое условие неверно ?
Подход такой :
Я так понимаю у вас не должен удаляться ордер, если он уже был открыт с удвоенным лотом. Вы переменную вначале программы объявите тип bool со значением false, как только произошло переоткрытие ордера ставим ей true и обнуляем эту переменную если первый ордер закроется (это надо отдельно проверять). А в ветке программы где переоткрывается ордер ставим допусловие для входа по значению
этой переменной false.
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте трейдеры. У меня к вам вопрос касательно уровня БУ. Я при создании прикрепленного ниже советника решил добавить в него данную функцию, однако в связи с его спецификой у меня возникли трудности ее применения. В интернете решение этой проблемы отсутствует. Буду благодарен вам за помощь в разрешении этой проблемы. P.S. Более подробное описание всех функций и характеристик записаны внутри.

Советник.mq4

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

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


Здравствуйте трейдеры. У меня к вам вопрос касательно уровня БУ. Я при создании прикрепленного ниже советника решил добавить в него данную функцию, однако в связи с его спецификой у меня возникли трудности ее применения. В интернете решение этой проблемы отсутствует. Буду благодарен вам за помощь в разрешении этой проблемы. P.S. Более подробное описание всех функций и характеристик записаны внутри.



Я такого замудренного кода еще не видел, пытался разобратся но как в анегдоте про фоменко: я бросал пить, бросал бросал, да и бросил бросать пить(может я просто такой тугодум). Все переменные с манипуляциями цен нужно нормализовывать обязательно через - NormalizeDouble();
Ссылка на сообщение
Поделиться на другие сайты

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


Здравствуйте трейдеры. У меня к вам вопрос касательно уровня БУ. Я при создании прикрепленного ниже советника решил добавить в него данную функцию, однако в связи с его спецификой у меня возникли трудности ее применения. В интернете решение этой проблемы отсутствует. Буду благодарен вам за помощь в разрешении этой проблемы. P.S. Более подробное описание всех функций и характеристик записаны внутри.



Александр_F Я вижу две ошибки. У Вас BU Задается как 30 по умолчанию, затем вы его при инициализации зачем-то два раза (????) умножаете на 10.
А при проверке надобности установки БУ Вы BULevel берете и вычитаете (или складываете) с ценой Bid или Ask (они из себя представляют X.XXXXX (для пятизнака) и тд и тп). Вы к виду цены через умножение на _Point забыли привести.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


Организуется цикл, который по перебирает все ордера, открытые этим советником (проверяет по меджику).
Считается разница между текущей ценой и ценой открытия ордера - результаты всех ордеров суммируются.
Если сумма больше определенного убытка - получаем сигнал на закрытие.
Организуем второй цикл, где все ордера с нашим меджиком закрываются


Добавлено: 17-11-2016 14:05:18

alex161271 У вас в условии уже "цикл" заложен, который выполняется с каждым тиком
"Удаляем противоположный ордер - Открываем новый "
на следующем тике опять "Удаляем противоположный ордер - Открываем новый" и тд и тп


Спасибо! Очень помогли!
Сейчас занимаюсь следующим - пятым уроком.
Здесь снова вопрос. В ДЗ нужно включать ТрейлингСтоп, опираясь на фракталы.
Фракталы рисуют стрелочки вверх и вниз.
Как объяснить советнику, что когда стрелочка вверх, то покупаем, а когда вниз - продаем. И что делаем это именно на N баре, после стрелочки?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
RichLux Есть функция https://docs.mql4.com/ru/indicators/ifractals в ней все есть и номер бара и тип фрактала - почитайте.
Ссылка на сообщение
Поделиться на другие сайты

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

Ребят, подскажите пожалуйста.

Есть некий советник, выглядящий следующим образом:

Цитата


void OnTick()
{
OrderSend(бла-бла-бла);
}



И если поставить его на график - немедленно произойдёт открытие ордера.

Вопрос в следующем.
Как сделать так, что б работа советника начиналась со следующей свечи.
А текущую игнорировать и не рассматривать.

Суть в том чтобы робот начал работать и искать условия для входа, на следующих свечах, а не открывал сразу же ордер, после установки его на график. Надеюсь внятно изложил. :-?
Изменено пользователем Richie Rich
Ссылка на сообщение
Поделиться на другие сайты

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

Вот например не самый удачный пример, но работает
DateTime T;
bool work=0;
void OnInit()
{
T=iTime(Sym,Period(),0);
}
void OnTick()
{
if(iTime(Sym(),Period,0) > T)
work=true;
if(work==true)
{
OrderSend(бла-бла-бла);
}
}

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

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

AndreyGold Большое Спасибо вам за помощь! Я принял во внимание ваши советы, с нетерпением жду открытия рынка

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
vitek01, большое спасибо! =d> =d> =d>

Поправив синтаксис ваш код принимает такой рабочий вид:

Цитата

datetime T; bool Work = 0;

void OnInit() { T = iTime(Symbol(),Period(),0); }

void OnTick()
{
if (iTime(Symbol(),Period(),0) > T) Work = 1;

if (Work == 1)
{
bool x = OrderSend(бла-бла-бла);
}
}

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

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

xbms... Прекрасная подача учебного материала. Немногим Великим было дано. И ежели отрок посетил сию нишу, желание сиюминутное может оборотиться потребностью вопиющей.

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

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

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

В данном советнике, при компиляции выскакивает два "жёлтых" предупреждения,
связанных с выносом настроек индикатора во внешние переменные.

Не могу придумать как от них избавится.
На работу программы не влияют, а глаз мозолят. ~x(

Спойлер

Цитата


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

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

Здравствуйте подскажите как дописать код чтобы советник закрывал часть лота при достижении определенного кол-ва прибыли в пунктах ?

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

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


Здравствуйте подскажите как дописать код чтобы советник закрывал часть лота при достижении определенного кол-ва прибыли в пунктах ?



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

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

Как-то так :

Спойлер

double punktov=0;
double nado puktov=0; // Количество пунктов, для определения частичного закрытия
double Lot=1; // Количество лотов, которые надо закрыть у каждого ордера
if(OrdersTotal()>0)
{

for(i=1;i {
if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()=="OP_BUY")
{
punktov=punktov+(Bid-OrderOpenPrice())*_Digits;
}
if(OrderType()=="OP_SELL")
{
punktov=punktov+(OrderOpenPrice()-Ask)*_Digits;
}

}

}
if(punktov>=nado puktov)
{



for(i=1;i {
if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()=="OP_BUY")
{
if(OrderClose(OrderTicket(), Lot, Bid, 0, clrGold)==0) Alert("Ошибка модификации лота");
}
if(OrderType()=="OP_SELL")
{
if(OrderClose(OrderTicket(), Lot, Ask, 0, clrGold)==0) Alert("Ошибка модификации лота");
}

}

}

}

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

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


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

В данном советнике, при компиляции выскакивает два "жёлтых" предупреждения,
связанных с выносом настроек индикатора во внешние переменные.

Не могу придумать как от них избавится.
На работу программы не влияют, а глаз мозолят. ~x(

Спойлер

Цитата




избавился

High-Low_EA_2.31.mq4

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

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

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

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

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

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

Войти

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

Войти

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


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

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