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

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


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

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

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

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

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

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

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

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

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

Перейти

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

Перейти

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

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

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


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

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


DoubleToStr Вот этого не было.


Да это просто посмотреть в журнале, какие цены сравниваются. На работу никак не влияет...
Ну нет в MQL другого дебагера >:d
Ссылка на сообщение
Поделиться на другие сайты

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

У меня появился вопрос общего характера. Вот я к примеру пишу любой код.
extern int Slippage=3;
extern int MaPeriod=21;
extern int MaShift =3;
extern int TrailingStop= 30;

И иногда одно слово не меняет свой цвет на красный. Я знаю, что это ошибка, но почему она возникает, так я и не понял.

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

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


У меня появился вопрос общего характера. Вот я к примеру пишу любой код.
extern int Slippage=3;
extern int MaPeriod=21;
extern int MaShift =3;
extern int TrailingStop= 30;

И иногда одно слово не меняет свой цвет на красный. Я знаю, что это ошибка, но почему она возникает, так я и не понял.

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

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

Да в том и дело, что при компиляции ошибка выйдет и даже не одна. А такая фигня может быть в любом месте когда прописываю параметры,а самое главное, это может быть любое слово (Magic, StopLoss и т.д.).

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

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

Да в том и дело, что при компиляции ошибка выйдет и даже не одна. А такая фигня может быть в любом месте когда прописываю параметры,а самое главное, это может быть любое слово (Magic, StopLoss и т.д.).


Так при компиляции пишет, какая ошибка... Еще MQL чувствителен к регистру знаков. Может, объявляете одну и ту же переменную в разных местах....
Смотреть надо в конкретном случае-что..
Ссылка на сообщение
Поделиться на другие сайты

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


Только зачем это?


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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Viktor M. БУ сетки это уровень, при достижении которого ценой, суммарный PL сетки = 0. Отсюда легко посчитать прибыль.
БУ = Сумма ( Цена_ордера * лот_ордера ) / Сумма ( лот_ордера ). Суммы вычисляются в цикле по всем ордерам сетки - там, где Вы считаете количество ордеров добавляется 2 строчки:
SumLotPrice += OrderLots() * OrderOpenPrice();
SumLot += OrderLots();

После цикла вычисляем БУ сетки:
gridBUprc = SumLotPrice / SumLot;

Данный расчёт нужно делать при изменении количества открытых ордеров (на каждом тике делать не надо). Расчёт будет учитывать даже ордера открытые или закрытые вручную (если с магиком).
Ссылка на сообщение
Поделиться на другие сайты

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

Добрый день.
Возник вопрос с iCustom?
Есть индикатор FL11, как правильно записать параметры iCustom, чтобы красное/синее "солнышко", можно было использовать как фильтр для входа?
uptr = iCustom(NULL, 0, "FL11", 4, 0);
dntr = iCustom(NULL, 0, "FL11", 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);
}
потом условие
if( DN_Trend()==true)
........................

FL11.mq4

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
d1w4m3 Параметры индикатора (все extern) пишутся подряд после названия iCustom(NULL, 0, "FL11", ....... , 4, 0); , строго в порядке их объявления в индикаторе. Если не все параметры хотите писать, то тут правило такое: например из 10 параметров записали первые 4 - значит остальные принимают значение по умолчанию. Не по порядку - нельзя.
ПС: Этот индикатор может перерисовывать (изменять свои значения), так что аккуратнее с ним.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Спасибо уяснил \M/
Запутался еще в одном деле, закрытие частично ордера по профиту:
if ( CountSell()>0)
{
for(int i = OrdersTotal() -1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
Price = NormalizeDouble(OrderOpenPrice(),Digits);
if (OrderMagicNumber() == Magic && OrderType() == OP_SELL && NormalizeDouble(Ask+Profit*Point,Digits) if(!OrderClose(OrderTicket(), closeLots, Bid, Slippage, Black))
Print("Ошибка");
}
}
}
где ордер открыт Lots=0,3
closeLots=0.1
Закрывает весь ордер?


Добавлено: 13-07-2017 10:30:25

Увидел проблему((он закрывает 3 раза по 0.1, только понять как избежать этого не догоняю((или надо отдохнуть Изменено пользователем d1w4m3
Ссылка на сообщение
Поделиться на другие сайты

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

Увидел проблему((он закрывает 3 раза по 0.1, только понять как избежать этого не догоняю((или надо отдохнуть

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

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


Увидел проблему((он закрывает 3 раза по 0.1, только понять как избежать этого не догоняю((или надо отдохнуть

После частичного закрытия нужно увеличить Profit для оставшегося ордера, да и подтянуть СЛ не помешает...

Извиняюсь, но нельзя ли мне как тугодуму объяснить, где тут покопать, а где тут просверлить ^:)^)))а то что то совсем заплутал
Ссылка на сообщение
Поделиться на другие сайты

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


У меня появился вопрос общего характера. Вот я к примеру пишу любой код.
extern int Slippage=3;
extern int MaPeriod=21;
extern int MaShift =3;
extern int TrailingStop= 30;

И иногда одно слово не меняет свой цвет на красный. Я знаю, что это ошибка, но почему она возникает, так я и не понял.



Конкретно в этом куске ошибок нет. Возможно, в последующем, когда Вы используете эти объявленные переменные в коде и путаете тип данных (объявлен как int, а используете как double), то редактор может не подсвечивать такие переменные. Ну или банальная опечатка.
Ссылка на сообщение
Поделиться на другие сайты

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



Увидел проблему((он закрывает 3 раза по 0.1, только понять как избежать этого не догоняю((или надо отдохнуть

После частичного закрытия нужно увеличить Profit для оставшегося ордера, да и подтянуть СЛ не помешает...
Извиняюсь, но нельзя ли мне как тугодуму объяснить, где тут покопать, а где тут просверлить ^:)^)))а то что то совсем заплутал
В вашем коде есть условие выбора ордера:
if (OrderMagicNumber() == Magic && OrderType() == OP_SELL && NormalizeDouble(Ask+Profit*Point,Digits)в условии есть дистанция Profit. За первый проход цикла все ордера частично закрываются, но на следующем проходе цикла словие срабатывает снова и за 3 приёма закрывает всё. Чтоб работало корректно, после первого прохода надо увеличивать ожидаемый профит у оставшейся части ордеров - либо Profit, либо пересчитать Price.

Viktor M. почитайте эту тему
Ссылка на сообщение
Поделиться на другие сайты

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

Спасибо, но это я понимаю, вопрос в том?
Мне опять надо открывать цикл после функции OrderClose()?Чтобы найти получившийся ордер или тикет сохраняется?

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

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


Спасибо, но это я понимаю, вопрос в том?
Мне опять надо открывать цикл после функции OrderClose()?Чтобы найти получившийся ордер или тикет сохраняется?

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

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



Спасибо, но это я понимаю, вопрос в том?
Мне опять надо открывать цикл после функции OrderClose()?Чтобы найти получившийся ордер или тикет сохраняется?

Тикет меняется, а зачем искать получившийся ордер?
Вы в цикле частично закрываете все ордера по выбранному направлению, после цикла меняете цель профита и всё.

if ( CountSell()>0 && NormalizeDouble(Ask+Profit*Point,Digits) {
for(int i = OrdersTotal() -1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() == Magic && OrderType() == OP_SELL )
if(OrderClose(OrderTicket(), closeLots, Bid, Slippage, Black))
{
if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice()+SL, OrderOpenPrice()-TP1, 0))
Print("Ошибка ");
}
}
}
}
Что то я упускаю походу((
Ссылка на сообщение
Поделиться на другие сайты

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

Что то я упускаю походу((

Там где OrderModify меняйте условие выбора ордеров, т.е. переменные Profit или Price!!! - эти переменные отвечают за отработку условия частичного закрытия, я не знаю как они вычисляются, но их надо менять!
ПС: задавайте новый ТП и СЛ от текущей цены! а то приведёт к ошибке!
Ссылка на сообщение
Поделиться на другие сайты

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

if ( CountSell()>0 && NormalizeDouble(Ask+Profit*Point,Digits) {
for(int i = OrdersTotal() -1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() == Magic && OrderType() == OP_SELL )
if(OrderClose(OrderTicket(), closeLots, Bid, Slippage, Black))
Price = NormalizeDouble(OrderOpenPrice(),Digits)-NormalizeDouble(Ask+Profit*Point,Digits);
{
if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Price-TP, 0))
Print("Ошибка ");
}
}
}
}
Спасибо :d

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

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

Уважаемые Гуру MQL! Помогите пожалуйста вшить в советник работу в определенный день недели!. Например: понедельник -1, вторник-2, среда-3 и т.д. Благодарю за помощь!

Exp_Ex-_Открытие_позиций_по_времени.ex4

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

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

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

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

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

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

Войти

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

Войти

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


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

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