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

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


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

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

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

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

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

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

Перейти

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

Перейти

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

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

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

Zeron.mq4
Zeron.ex4
Alpari_Limited_MT4.png

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

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

Написал функцию закрытия ордеров по обратному сигналу. А она не работает. Может кто подскажет, где я накосячил?

void ExtrClosMidi()
{
//Закрытие ордера на продажу по сигналу СП-0
if(CountSell()>0)
{
if(SP_midi0>0 && Martin==false) // условие экстренного закрытия ордеров по сигналу СП-0
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
{
if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Black))
Alert(Symbol()," Ошибка закрытия ордера на продажу!");
SendMail(Symbol()," Ошибка закрытия ордера на продажу");
}
}
}return;
}
}
//Закрытие ордера на покупку по сигналу индикатора
if(CountBuy()>0)
{
if(SP_midi0 {
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
{
if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Black))
Alert(Symbol()," Ошибка закрытия ордера на покупку!");
SendMail(Symbol()," Ошибка закрытия ордера на покупку");
}
}
}return;
}
}
}
//Окончание закрытия ордеров+++++++++++++++++++++++++++++++++++++++++++++++++++++

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

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

А что пишет - какие ошибки в журнале ? Если нет ошибок в журнале надо полностью текст программы смотреть, там у Вас есть функции и переменные, которые могут повлиять на закрытие ордеров.
Вы сами гляньте, куда у Вас вообще программа заходит при удалении ордера.

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

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

Ну как я понимаю - формат datatime значит указывается конкретная дата + время с точностью до секунды.

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

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

Не понятно а какое значение нужно поставить если я хочу чтобы отложенный ордер закрылся например через 30 мин
те через две свечи если ордер не сработал ?

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

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

Попробуйте так
datetime x=TimeCurrent()+30*60;

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

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

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

Здравствуйте трейдеры. У меня к вам вопрос касательно функции "долива". Суть в следующем, советник открывает отложенные ордера вверх и вниз от текущей цены рынка. Например 3 отложки вверх и 3 отложки вниз, у каждой свой TP и SL. Допустим цена двинулась вверх, и открыла два ордера на OP_BUY. В то время как эти два ордера открылись, снизу от цены образовалось пустое пространство, которое нужно заполнить ордерами OP_SELLSTOP или OP_SELLLIMIT. Казалось-бы, все логично, но я не могу придумать, как обыграть долив при условии функции CountOrders (это количество открываемых отложек), + специфика выбора OP_Limmit и OP_Stop. Все возможные варианты решения проблемы не дали никаких результатов ~x( ~x( ~x( Я прикрепляю ниже его код и если вы знаете как решить эту проблему, видите ошибки или есть какие нибудь идеи, я буду вам очень благодарен за помощь. (P.S. В советнике прописана один из вариантов)

Советник_-_копия.mq4

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

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


Здравствуйте трейдеры. У меня к вам вопрос касательно функции "долива". Суть в следующем, советник открывает отложенные ордера вверх и вниз от текущей цены рынка. Например 3 отложки вверх и 3 отложки вниз, у каждой свой TP и SL. Допустим цена двинулась вверх, и открыла два ордера на OP_BUY. В то время как эти два ордера открылись, снизу от цены образовалось пустое пространство, которое нужно заполнить ордерами OP_SELLSTOP или OP_SELLLIMIT. Казалось-бы, все логично, но я не могу придумать, как обыграть долив при условии функции CountOrders (это количество открываемых отложек), + специфика выбора OP_Limmit и OP_Stop. Все возможные варианты решения проблемы не дали никаких результатов ~x( ~x( ~x( Я прикрепляю ниже его код и если вы знаете как решить эту проблему, видите ошибки или есть какие нибудь идеи, я буду вам очень благодарен за помощь. (P.S. В советнике прописана один из вариантов)


Александр_F Логика должна быть такая : если у Вас четкое правило не более трех ордеров в одну сторону, значит перед открытием 4го например вверх надо удалить ненужный, который был первый вверх. Изменено пользователем AndreyGold
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Товарищи программисты, нужна помощь! :((

В данном советнике использую функцию проверки открытия ордера на текущей свече.
Был ли на ней ордер либо нет.
Если был - пропускаем эту свечу и не рассматриваем.
Если нет - рассматриваем возможность открыть ордер.

Собственно максимум один ордер на каждой свече.





Я это реализовал с помощью проверки часа открытия последнего ордера с текущим часом для работы на часовых свечах.

И соответственно проверка дня открытия последнего ордера с текущим днём для торговли на дневном таймфрейме.


Выглядит это следующим образом:




Функции возвращают True, если на текущей свече уже был открыт ордер,
либо False, если на текущей свече ещё не было открыто ордера.




Цитата

bool One_Order_in_Hour()
{
for(int i=0; i {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol())
{
if (TimeHour (OrderOpenTime()) == Hour () &&
TimeDay (OrderOpenTime()) == Day () &&
TimeMonth(OrderOpenTime()) == Month() &&
TimeYear (OrderOpenTime()) == Year ()) return(1);
}
}
return(0);
}







Цитата

bool One_Order_in_Day()
{
for(int i=0; i {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol())
{
if (TimeDay (OrderOpenTime()) == Day () &&
TimeMonth(OrderOpenTime()) == Month() &&
TimeYear (OrderOpenTime()) == Year ()) return(1);
}
}
return(0);
}







Всё бы ничего, если б эти функции катастрофически не тормозили время прогона советника в тестере раз так в ...надцать. ~x(
Примерно с 3-5 минут до 7-8 часов.

Может есть возможность сделать данную проверку иным способом?
И было бы шикарно использовать данную примочку на любом таймфрейме, а не только на 1Н и 1Д, как у меня.

Надеюсь у кого-нибудь найдёться в закромах подобна функция. ;)
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

Richie, у тебя тормозит оттого, что ты каждый раз, а скорее даже каждый тик заглядываешь в MODE_History. если это не вспомогательный советник и в нем же ты открываешь ордера, можно сделать флаг. К примеру, делаешь его true, каждый раз как открылся ордер, а на каждой новой свече сбрасываешь его на false. И все, на тиках будешь просто проверять этот флаг. Ну, я бы так сделал. И на любом ТФ будет работать.

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Arius777 то есть сразу после OrderSend некоему булевому значению "X" присваиваем true.
А при открытии новой свечи присваиваем X = false;

Но вот как сделать проверку данной свечи? Было б шикарно если вы привели пример.

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

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

Да где-то выше это уже мусолилось...

Ну ладно, вот кратко

Спойлер


datetime Newcandle;
bool Activeorder=false;

void OnTick()
{
if (Newcandle!=Time[0])
{
Activeorder=false;
Newcandle = Time[0];
}
void MyFunction(...)
{
...
if (!Activeorder)
{
...//здесь какие-то Ваши условия
if (OrderSend(...))
Activeorder=true;
}
}
}

Ну вот как-то так если кратко - работать будет на всех ТФ, не более одного ордера на каждой свече. >:d Изменено пользователем Arius777
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Arius777, Браво! Яро плюсую! =d>

Вот так себе сделал: 8->

Спойлер

Цитата

datetime NewCandle;
bool ActiveOrder = false,

void OnTick()
{
if (NewCandle != iTime(Symbol(),TimeFrame,0))
{
NewCandle = iTime(Symbol(),TimeFrame,0); ActiveOrder = 0;
}

if (ActiveOrder == 0)
{
if (условия на бай) { SendBuy (); ActiveOrder = 1; }
if (условия на селл) { SendSell (); ActiveOrder = 1; }
}
}


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

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

Всем доброго дня! Подскажите пожалуйста как поставить удаление ордера в советнике.

Ситуация такая:

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

Буду очень благодарен за помощь.

Спасибо.

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

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


Всем доброго дня! Подскажите пожалуйста как поставить удаление ордера в советнике.

Ситуация такая:

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

Буду очень благодарен за помощь.

Спасибо.



Анализируем, в "цикле" OrderSelect() если появился тип ордера OP_BUY или OP_SELL, то второй ордер с типом OP_SELLSTOP (OP_SELLLIMIT)или OP_BUYSTOP (OP_BUYLIMIT) удаляем через OrderDelete(......)
Ссылка на сообщение
Поделиться на другие сайты

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


Здравствуйте вопрос по частичному закрытию лота , а как закрывается остальная часть лота ?



Просто закрывается через OrderClose -> а там OrderLots, выбранного ордера через OrderSelect
Ссылка на сообщение
Поделиться на другие сайты

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

Всем доброго! :-H

Прошу помощи в написание простого индикатора.
Программировать мало умею, и по сему посоветуйте какой нибудь похожий индикатор который можно было бы изменить до своих нужд.
Принцип индикатора в том чтоб выделять прямоугольником 4 и более баров (желательно настраиваемый количество) с разнонаправленными типами.
Например:

Заранее спасибо !

Спойлер

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

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

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

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

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

Всем, доброго времени суток, такая проблема...
Хочу написать небольшой индикатор, которые будет собирать данные, за последние 10 дней, о том, как реагирует рынок на открытие Лондона, то есть бычья свеча или медвежья по отношению к предыдущей часовой свече, но не знаю как сделать, что бы он собирал данные за разные дни с 11ти часовой свечи к 10ти часовой (мск.). Подскажите пожалуйста как это правильно сделать.

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

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

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

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

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

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

Войти

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

Войти

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


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

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