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

Обучение языку MQL5 под MetaTrader 5


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

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


Подскажите, как можно сделать в коде советника простейшую инфопанель в виде прямоугольника с фоном и в него выводить значения из функции fComments()?

Спойлер

void fComment()

{

Comment(

"Сделка: "+DirString+"\n"+

"Направление тренда: "+TrendString+"\n"+

(string)fWorkTime()

// и прочие, которые меняются в зависимости от цели тестирования

}




На mql4 это выглядит так, не думаю что на mql5 сильно отличается:
extern color BackgroundColor = clrBlack;
extern color TextColor = clrWhite;

void start()
{

ObjectCreate(0, "Fon", OBJ_RECTANGLE_LABEL, 0, 0, 0); // Создание объ.
ObjectSetInteger(0, "Fon", OBJPROP_CORNER, 0); // Привязка угол
ObjectSetInteger(0, "Fon", OBJPROP_XDISTANCE, 5); // Координата Х
ObjectSetInteger(0, "Fon", OBJPROP_YDISTANCE, 35); // Координата Y
ObjectSetInteger(0, "Fon", OBJPROP_XSIZE, 200); // Ширина фона
ObjectSetInteger(0, "Fon", OBJPROP_YSIZE, 200); // Высота фона
ObjectSetInteger(0, "Fon", OBJPROP_BGCOLOR, BackgroundColor); // Цвет фона

ObjectCreate("Сделка", OBJ_LABEL, 0, 0, 0); // Создание объ.
ObjectSet("Сделка", OBJPROP_CORNER, 0); // Привязка угол
ObjectSet("Сделка", OBJPROP_XDISTANCE, 15); // Координата Х
ObjectSet("Сделка", OBJPROP_YDISTANCE, 45); // Координата Y
ObjectSetText("Сделка",(string)DirString,10,"Arial",TextColor); // Заполняем текст

ObjectCreate("Направление тренда", OBJ_LABEL, 0, 0, 0); // Создание объ.
ObjectSet("Направление тренда", OBJPROP_CORNER, 0); // Привязка угол
ObjectSet("Направление тренда", OBJPROP_XDISTANCE, 15); // Координата Х
ObjectSet("Направление тренда", OBJPROP_YDISTANCE, 60); // Координата Y
ObjectSetText("Направление тренда",(string)TrendString,10,"Arial",TextColor); // Заполняем текст

ObjectCreate("WorkTime", OBJ_LABEL, 0, 0, 0); // Создание объ.
ObjectSet("WorkTime", OBJPROP_CORNER, 0); // Привязка угол
ObjectSet("WorkTime", OBJPROP_XDISTANCE, 15); // Координата Х
ObjectSet("WorkTime", OBJPROP_YDISTANCE, 75); // Координата Y
ObjectSetText("WorkTime",(string)fWorkTime() ,10,"Arial",TextColor); // Заполняем текст
}

void deinit()
{
//Удаление объектов
ObjectDelete("Fon");
ObjectDelete("Сделка");
ObjectDelete("Направление тренда");
ObjectDelete("WorkTime");
}
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 296
  • Создано
  • Последний ответ

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

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

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

Здравствуйте, друзья юные программисты! В этой ветке предлагаю обсуждать все возникающие вопросы в процессе освоения тонкостей языка MQL5. В настоящий момент мы записываем цикл уроков по MQL5, пока

Перейти

Уважаемые коллеги, добавлю от себя... По ссылке полный справочник по функциям MQL5, с примерами, который вы можете скачать себе локально. Хорошая штука, рекомендую :) https://yadi.sk/d/BBFYJw_-trnbN

Перейти

Нечеловеческое спасибо за тему >000 ЧИТАЕМ В ПЕРВУЮ ОЧЕРЕДЬ ПОЛНАЯ ДОКУМЕНТАЦИЯ ПО MQL5, ОНЛАЙН, БЕСПЛАТНО И БЕЗ СМС Руководство по интерфейсу // Алгоритимеческий трейдинг на MQL5 // Описание те

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

Добрый день! Пытаюсь переложить советника с МТ4 в МТ5, с хендлами и динамическими массивами разобрался, затык пока в написании команды на открытия ордера с tp и sl, без условий и риска. Смотрел видео по открытию ордеров через OClass, хочу через него, но ни чего не понятно. Написание советников на МТ4 освоил на ваших вебинарах, очень доступные на понимание. Жду продолжения по МТ5. А сейчас подскажите как написать функцию по открытию ордера или где прочитать. Прилагаю мой старый код из МТ4 по открытию позиции.
//----------открытие ордеров----------------------------------

if(CountSell()+CountBuy()==0 && MaFast1 {
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"15",Magic,0,Red);
if(ticket>0)
{
SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);

if(OrderSelect(ticket,SELECT_BY_TICKET))
if(!OrderModify(ticket,OrderOpenPrice(),SL,TP,0))
Print("Ошибка модификации ордера на продажу!");
}
else Print("Ошибка открытия ордера на продажу!");
}
if(CountSell()+CountBuy()==0 && MaFast1>MaSlow1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"15",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("Ошибка модификации ордера на покупку!");
}
else Print("Ошибка открытия ордера на покупку!");
}

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

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

у меня открытие ордера сейчас вот так:

//это располагаем вверху
#include
CTrade *trade;

//а это непосредственно перед открытием ордера
trade.Sell(0.1,_Symbol,Bid,SL,TP,comment);

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

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

Самое жирное в mt5 это возможность юзать фьючерсные объемы + лента принтов (возможная работа с футпринтом) \M/ Было бы хорошо разобраться в этом направлении ;;)

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

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

Здравствуйте все!

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

Это нужно для принятия решения по следующей сделке.

Можно не писать для меня код, главное дайте способ :) А то сам не соображу.

И второй вопрос: можно ли при закрытии сделки с рынка trade.PositionClose(ticket,slippage) добавить свой comment?

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

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

Всем привет! Помогите разобраться, нашел советник, на мой взгляд хорошая заготовка, в нем есть проверка на уже открытые позиции, но она не работает, если поставить большие SL и TP, то открываются ордера в одном направлении, а если открываются встречные, то они не закрывают первые, а закрываются только по TP или SL. Как я понимаю этого в МТ5 быть не должно. Советник прилагаю.

my_first_mql5_.mq5

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

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


Здравствуйте все!

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




Через сравнение цены закрытия позиции с ценой стоп лоса этой позиции...

//+----------------------------------------------------------------------------+
//| Описание : Возвращает флаг закрытия последней позиции по стопу. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, osl;
int dg, i, j=-1, k=OrdersHistoryTotal();

if (sy=="0") sy=Symbol();
for (i=0; i if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op if (mn if (t t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY") ocp=NormalizeDouble(OrderClosePrice(), dg);
osl=NormalizeDouble(OrderStopLoss(), dg);
if (ocp==osl) return(True);
}
return(False);
}
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Через сравнение цены закрытия позиции с ценой стоп лоса этой позиции


Благодарю Вас! Принцип ясен - пойду делать ;)
Ссылка на сообщение
Поделиться на другие сайты

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

Всем привет! Помогите разобраться, нашел советник, на мой взгляд хорошая заготовка, в нем есть проверка на уже открытые позиции, но она не работает, если поставить большие SL и TP, то открываются ордера в одном направлении, а если открываются встречные, то они не закрывают первые, а закрываются только по TP или SL. Как я понимаю этого в МТ5 быть не должно. Советник прилагаю.



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

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

Значит, у твоего брокера хеджинговая система учёта позиции, т.е. как в mt4. Это значит, что по одному инструменту можно держать несколько открытых позиций как в одну, так и в другую сторону.



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

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

В шапку темы добавлено голосование.



Всем привет, особый поклон администратору! Если торговать на форексе, то конечно же достаточно только МТ4.
MQL5 (МТ5) это продукт для российской биржи, придет время и все будут перебираться на российскую (реальную) биржу и тогда ваши вебинары будут очень востребованы. На сайте робофорекс есть 8 занятий по МТ5 от 2014 года, но они не так понятны в изложении, как у вас, хотя им то же большое спасибо. По мне, так не надо заморачиваться с советником МТ5 для форекса, на них все равно ни кто не торгует (имхо), а если кому надо, то и сами напишут, я себя чайником считаю в программировании и то за две недели перекинул своего советника с МТ4 на МТ5, советник на МТ4 написал по вашим вебинарам в них информации достаточно.
Поэтому перескочите сразу на основу советника по рынку фортс, так как это совершенно другой принцип построения кода (конкретное время торговли, бары, вход в сделки, шаг в разных пунктах и пр.) И ваш сайт от этого только выиграет, т.к. по фортсу в сети ни чего путевого нет, а вы открывайте параллельно платные услуги по созданию советников для фортса. Я бы и сам у вас шаблон заказал, стратегию сам добавлю.
Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Обучение языку MQL5 под MetaTrader 5 Опубликовано

Уважаемые программисты!
Помогите чайнику!
Как правильно подключаться к стандартной библиотеке классов mql5 ?
В частности к linalg:
- подключил библиотеку по #include
- выбрал элемент класса
-типы входных параметров функции объявлены как в в объявлении класса

При компиляции выдает ошибку типа входного параметра функции?
Возможно что-то упустил при подключении библиотек? ЧТО?

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

  • 2 weeks later...
  • 4 weeks later...
Обучение языку MQL5 под MetaTrader 5 Опубликовано

Здравствуйте, коллеги!

Подскажите, можно ли сделать при выборе параметров эксперта выпадающее меню по аналогии с bool, но с фиксированным набором цифр, например от 0 до 3?

Вот по такому принципу

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

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

конечно можно, пример кода:
enum ELessSession {_1_Order, _2_Orders, _3_Orders, _4_Orders, _5_Orders};

extern ELessSession eLessSessionTPAfter = _3_Orders;

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

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

Здравствуйте все! Вопрос по MQL5.

Мне хочется вставлять комменты в функцию закрытия сделки по тикету.

Пока пользовался классом CTrade, но он не даёт такую возможность.

То есть надо использовать OrderSend, правильно?

Тут я не понимаю: https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions#trade_action_deal в примере пишется функция OnStart. Или можно прописать всё в пользовательскую функцию и вызывать её при необходимости?

Надо ли что-то добавлять в OnInit?

И не будет ли конфликтов, если я закрытие напишу через OrderSend, а открытия и модификации оставлю на базе класса CTrade?

Спасибо!


Добавлено: 13-04-2017 07:14:04

Решил вот как:
Файл с классом CTrade лежит по пути
MQL5/Include/Trade/Trade.mhq 

Плюс в этой же папке ещё несколько, которые он использует.
Я скопировал содержимое всей папки
MQL5/Include/Trade/ в свою MQL5/Include/ARG,
внёс изменения в файл Trade.mhq, переименовал его и уже его прописал в советник
#include 

Можно, конечно, было подправить пути в Trade.mhq и не копировать папку целиком, но не принципиально.

Мало ли, обновления придут и затрут исходный Trade.mhq? А мой в другом месте лежит Изменено пользователем kofesutra
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте, все! Чего-то я туплю совсем, помогите, друзья!
Задача: написать функцию проверки есть ли открытая позиция по инструменту (паре) и мэджику или позиции нет.
Предполагается, что на одной паре разные советники (с разными мэджиками) могут открывать не больше одной сделки.
Вот так будет верно?

bool fPositionPresenceCheck()
{bool z=false;
if(PositionsTotal()==0)
{z=false;}
else
{
string deal_symbol="";
long deal_magic=0;

for(int x=PositionsTotal();x>0;x--)
{
deal_symbol=PositionGetSymbol(x);
deal_magic=PositionGetInteger(POSITION_MAGIC);

if(deal_symbol==_Symbol && deal_magic==_Magic)
{z=true; break;}
}
}

return(z);
}
Ссылка на сообщение
Поделиться на другие сайты

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


Здравствуйте, все! Чего-то я туплю совсем, помогите, друзья!
Задача: написать функцию проверки есть ли открытая позиция по инструменту (паре) и мэджику или позиции нет.
Предполагается, что на одной паре разные советники (с разными мэджиками) могут открывать не больше одной сделки.
Вот так будет верно?

bool fPositionPresenceCheck()
{bool z=false;
if(PositionsTotal()==0)
{z=false;}
else
{
string deal_symbol="";
long deal_magic=0;

for(int x=PositionsTotal();x>0;x--)
{
deal_symbol=PositionGetSymbol(x);
deal_magic=PositionGetInteger(POSITION_MAGIC);

if(deal_symbol==_Symbol && deal_magic==_Magic)
{z=true; break;}
}
}

return(z);
}



Если уверены, что позиций по символу не может быть больше 1, в MQL5 достаточно использовать функцию PositionSelect.
_https://www.mql5.com/ru/docs/trading/positionselect
Скажем, PositionSelect("EURUSD") вернет true, если по этой паре есть поза (ну и, после успешного выполнения PositionSelect можно запрашивать разные свойства выбранной позиции функциями вроде PositionGetString. Например, проверить тот же magic с помощью PositionGetInteger(POSITION_MAGIC))

P. S.: А ваш код некорректен уже потому, что вы пытаетесь получить свойства позиции, не выделив её сначала с помощью функций PositionSelect или PositionSelectByTicket Изменено пользователем Pavel888
Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Обучение языку MQL5 под MetaTrader 5 Опубликовано

Уважаемые программисты. Если у кого то появится свободное время и желание помочь ближнему >:dБольшое спасибо.

_sx_ClearMethod_MTF.mq4
_simplex_ClearMethod.mqh
CCFp_mtf_-_alerts_2.03_composite__1.mq4

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

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

Привет MQL5-шникам!

Проще всего создать советник через мастер редактора MQL5! Мне понравилась там система весовых коэффициентов для каждого индикатора!

К сожалению, нет в списке индикатора Volumes... Кто подскажет, где взять для него сигнальную библиотеку?

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

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

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

Доброго всем дня, прошу помочь.
Необходимо пометить стрелкой найденный бар, на графике. В справочнике слишком сложный для меня пример.

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

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

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

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

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

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

Войти

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

Войти

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


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

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