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

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


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

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

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

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

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

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

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

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

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

Перейти

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

Перейти

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

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


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



http://tlap.com/forum/ugolok-programmista/13/obuchenie-yazyku-mql4-pod-metatrader-4/4034/?do=findComment&comment=229399
где Period() это временной интервал, равный размеру текущей свечи. Можно указать хоть день, хоть год
Ссылка на сообщение
Поделиться на другие сайты

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

Подскажите в каких случаях в советниках на MQL4 используется False, FALSE, True, TRUE? Сейчас копаюсь в коде одного советника. Я думал что язык чувствителен к регистру. Но компилятор не ругается. То есть вот эти значения присвоены булевым переменным и они же подсвечены синим цветом

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

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

К регистру чувствительны имена переменных, значения FALSE и false равнозначны.

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

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

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

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

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


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

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

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

Допустим, у меня есть ф-ция CloseBuy() ... я могу просто добавить условие, по которому будут удаляться отложка, и поменять OrderClose на OrderDelete???

void CloseBuy()
{
for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol())
{
if (OrderMagicNumber() == Magic && OrderType() == OP_BUYSTOP)
{
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Green);
}
}
}
}

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

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

уважаемый Oll, прошу помощи... в общем написал функцию, но она не пашет...
if(условие)
{
OpenBuyOrder(); // открываем ордер на покупку
expiration = TimeCurrent() + 60*LifeTimeMinutes;
}
void DeleteOrderSell()
{
for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol())
{
if (OrderMagicNumber() == Magic && OrderType() == OP_SELLSTOP)
{
int time = TimeCurrent();
if(expiration {
OrderDelete(OrderTicket(), Green);
}
}
}
}
}

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
kempo ну я-бы проверку времени удаления вынес в основной блок программы, а функцию удаления оставил в чистом виде.
Других замечаний нет. По коду не видно где она запускается...
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Подскажите как на MQL5 для пользовательской функции передать данные типа enum? Например функция GetLastLot (int ltpop, int y, double x, ) через переменную ltpop хочу передать тип ордера (ORDER_TYPE_BUY или ORDER_TYPE_SELL....)
я даже не знаю как её (эту переменную ltpop)в пользовательской функции объявить. В данном случае компилятор ругается - 'ltpop' - cannot convert enum.

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

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


Подскажите как на MQL5 для пользовательской функции передать данные типа enum? Например функция GetLastLot (int ltpop, int y, double x, ) через переменную ltpop хочу передать тип ордера (ORDER_TYPE_BUY или ORDER_TYPE_SELL....)
я даже не знаю как её (эту переменную ltpop)в пользовательской функции объявить. В данном случае компилятор ругается - 'ltpop' - cannot convert enum.


Читать здесь

Объявлять так:
ENUM_ORDER_TYPE ltpop

Передать в функцию, можно так:
bool f_OrderSend ( ENUM_ORDER_TYPE ltpop, double lot, ....,...,....,... )
{
// ... здесь код функции
}
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

Друзья, здравствуйте :) !!! Помогите, пожалуйста, как определить максимальный фрактал из всех, за последние 50 баров??? Заранее, благодарю.

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

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


Друзья, здравствуйте :) !!! Помогите, пожалуйста, как определить максимальный фрактал из всех, за последние 50 баров???

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

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



Друзья, здравствуйте :) !!! Помогите, пожалуйста, как определить максимальный фрактал из всех, за последние 50 баров???

По количеству свеч до и после или по количеству пунктов между пред и след. фракталом?


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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Sany2912 - подумайте, ведь локальный максимум обязательно принадлежит фракталу! нафиг перебирать фракталы - ищи максимум и всё. с помощью ф-ции: double H50 = High [ iHighest ( NULL, 0, MODE_HIGH, 50, 1 ) ];
Ссылка на сообщение
Поделиться на другие сайты

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


Sany2912 - подумайте, ведь локальный максимум обязательно принадлежит фракталу! нафиг перебирать фракталы - ищи максимум и всё. с помощью ф-ции: double H50 = High [ iHighest ( NULL, 0, MODE_HIGH, 50, 1 ) ];



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

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

Уважаемые знатоки MQL начинаю программировать и не получается у меня связать индикатор с разрабатываемым советником. :-s Помогите пожалуйста, в долгу не останусь.

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

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

Kiman выложите индюк, а я дам Вам строку подключения (получения данных из буфера)

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

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


Sany2912 создаётся массив куда пишутся данные фракталов. в 1 размерность пишется цена хая и после заполнения массива сортируется по цене. В итоге Вы получаете данные всех фракталов за период в отсортированном по цене виде.

0ll, можно хотя бы маленький кусочек кода, как заполнить массив данными фракталов? Пожалуйста... :-s


Добавлено: 25-09-2015 10:02:11

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

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


0ll, можно хотя бы маленький кусочек кода, как заполнить массив данными фракталов? Пожалуйста... :-s

А какие данные нужны-то?
В общем картина такая:
- объявляете массив double arFR[15][2]; // 15 - предполагаемый максимум фракталов в диапазоне, если бар=50, а фрактал = 3 барам, то 50 / 3 = 17 - максимум. [2] - это поля для данных фрактала 1- цена, 2 - время (например) и т.д. кстати время надо привести к типу дабл.
- заполняете массив там, где ищите фракталы в неком цикле.
- после цикла поиска сортируете в любом порядке. Я предпочитаю по убыванию - тогда нули незаполненных ячеек массива будут в конце.
Ссылка на сообщение
Поделиться на другие сайты

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

В общем картина такая:
- объявляете массив double arFR[15][2]; // 15 - предполагаемый максимум фракталов в диапазоне, если бар=50, а фрактал = 3 барам, то 50 / 3 = 17 - максимум. [2] - это поля для данных фрактала 1- цена, 2 - время (например) и т.д. кстати время надо привести к типу дабл.
- заполняете массив там, где ищите фракталы в неком цикле.
- после цикла поиска сортируете в любом порядке. Я предпочитаю по убыванию - тогда нули незаполненных ячеек массива будут в конце.


Oll, спасибо за ответ! Только он мне совсем не понятен ~x( . Я могу найти только ближайший фрактал, но у меня так и не получается сравнить: какой же из них имеет максимальную цену?! Помогите, пожалуйста разобраться... Отправляю код.

Добавлено: 28-09-2015 12:50:48

Oll, я смог разобраться!!! Только вот теперь не могу понять, почему переменная "min" обнуляется?

for(int n = 0; n {
if(iFractals(NULL, 0, MODE_UPPER, n) != NULL) fractal_up = n + 1;//индекс бара ближайшего фрактала up
if(iFractals(NULL, 0, MODE_LOWER, n) != NULL) fractal_low = n + 1;
}

for(int i = 0; i {
price_up = iHigh(NULL, 0, fractal_up - i);
price_low = iLow(NULL, 0, fractal_low - i);//заполнение массива мин.ценами
}

int index_max_price = ArrayMaximum(price_up, WHOLE_ARRAY, 0);
int index_min_price = ArrayMinimum(price_low, WHOLE_ARRAY, 0);

double max = price_up[index_max_price];
double min = price_low[index_min_price];//присвоение переменной мин.цену

Comment("max: ", max, ", min: ", min);//в комментариях переменная min иногда равна нулю, из за чего?

Oll_help_please.mq4

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Sany2912 Ваш код не рабочий. совсем. Имейте в виду, что на исследуемом участке фракталов может и не быть.
Можно решить проблему в лоб, без массива, если анализ максимума делать в цикле поиска фрактала, типа:
- нашли фрактал
- сравниваем его хай с максимальным хаем, если больше, то пишем в макс., иначе следующий.
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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

Войти

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

Войти

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


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

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