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

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


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

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

У одного брокера идет модификация ордеров, у другого ошибка 130.



А у этих брокеров котировки сколько имеют знаков после запятой? Может у вас отсутствует в коде приведение к новым пунктам. "Ошибка 130" чаще всего это математическая ошибка в расчетах. Если у вас на 4 знаке все работает, а на 5 знаке ошибка, то возможно дело в таком куске кода.

int OnInit()
{
if(Digits == 3 || Digits == 5)
{
Slippage *= 10;
TakeProfit *= 10;
StopLoss *= 10;
}
return(INIT_SUCCEEDED);
}
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Перейти

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

Перейти

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

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

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


Добавлено: 11-02-2017 12:35:22

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

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

по моему вопросу ответ так и не нашёлся, жаль!



Ваш вопрос:

Цитата

расскажите мне пожалуйста на людском языке как надо правильно писать функцию OnInit? OnDeinit,OnTick и где надо ставить void,где после return надо скобки, где ноль в скобках, короче у меня такая каша в голове. С учебника просто повторял код , там конечно int start() и всё в таком духе, перевёл на On Init и всё хана куча ошибок. Помогите!!!!!



Эту звучит как: "Расскажите мне по-быстренькому как там бота на MQL4 написать, а то я не знаю". Я поэтому и дал вам ссылку на этот курс, потому что на мой взгляд это самый простой и быстрый способ найти ответ на свой вопрос. Но вы решили ни чего не изучать и написать, что вам не дали ответа на ваш вопрос. Если вы не знаете, что такое OnInit, OnDeinit, OnTick, не знает где и как ставить скобки, то может вам стоит начать с самых азов, потому что это основа. Без понимания этого нет смысла пытаться, что то написать на MQL4.

OnInit - выполняется один раз при запуске советника, OnDeinit - выполняется один раз при завершении работы советника, OnTick - выполняется на каждом тике. Этот ответ вам вряд ли прояснит "кашу в голове".

Цитата

это я на счёт загрузки картинки



Добавьте картинку как приложение к сообщению и всё. Зачем усложнять)))
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Alexandrkas, Вы привели код процедуры OnInit(). У меня он прописан именно так, как у Вас. Работает на пятизнаке нормально (weltrade), на четырехзнаке у forex4you дает ошибку 130. Сегодня столкнулся на пятизнаке с ошибкой 131 у брокера - GerchikCo. Самое поганое, что это все в тестере на демо счетах. Если кто-нибудь имеет опыт обхода таких ситуаций - подскажите?

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

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

Уважаемые форумчане, по видео _https://www.youtube.com/watch?v=63REtIKc4gQ (это написание советника на TMA_Fair, написал свой и имею сейчас такую непонятку
ticket=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,vSpread,0,0,"TMA_BB",MagicNumber,0,Red);
if(ticket>0)
{
SL=NormalizeDouble(Bid+StopLoss*Point,Digits);
TP=NormalizeDouble(Bid-TakeProfit*Point,Digits);
if(OrderSelect(ticket,SELECT_BY_TICKET)) OrderModify(ticket,OrderOpenPrice(),SL,TP,0);
}
Код взят из урока. У одного брокера идет модификация ордеров, у другого ошибка 130. Подскажите, как разрулить такую ситуацию?



Добрый день!
функция OrderModify пытается изменить стоп-лосс или тейк-профит слишком близко к текущей цене. Нормализуйте SL и TP к стоплевелу брокера.

Цитирую справку
Спойлер

Цитата

Цены StopLoss и TakeProfit не могут располагаться слишком близко к рынку. Минимальное расстояние стопов в пунктах можно получить, используя функцию MarketInfo() с параметром MODE_STOPLEVEL. В случае ошибочных, а также ненормализованных стопов генерируется ошибка 130 (ERR_INVALID_STOPS). Нулевое значение MODE_STOPLEVEL означает либо отсутствие ограничения на минимальную дистанцию для стоп-лосса/тейк-профита, либо факт использования торговым сервером внешних механизмов динамического контроля уровней, которые не могут быть транслированы в терминал. Во втором случае GetLastError() может возвращать ошибку 130, так как уровень MODE_STOPLEVEL фактически является "плавающим".

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

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

Уважаемые программисты. Может ли кто нибудь создать канальный индикатор по следующим параметрам:
Индикатор должен в окне графика отображать 5 каналов по Open/Close, каждый канал, чтобы по возможности был цветоизменяемым.
Если используем индикатор на M1 ТФ, то индикатор строит(допустим сейчас время 9:00):
M1 канал по Open/Close каждой свечи начиная с 9:00 до 10:00;
M5 канал по Open/Close каждой 5ой свечи начиная с 9:00 до 10:00;
М15 канал по Open/Close каждой 15ой свечи начиная с 9:00 до 10:00;
М30 канал по Open/Close каждой 30ой свечи начиная с 9:00 до 10:00;
H1 канал по Open/Close 9ти и 10 часовой свечи. И со следуещего часа всё начинается по новой.

P.S. Если криво обозначил ТЗ прошу извинить.
Если кто то сможет создать данный индикатор, то я был бы очень благодарен вам.
Заранее спасибо

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

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

Добавлено: 12-02-2017 08:18:01

Написал свой первый советник для торговли на Форекс в Metatrader 4 .Использовал для этого его MetaEditor.Помоги,пожалуйста, разобраться.Советник в
тестере «по ценам открытия» работает хорошо. Но на Демо счете, на контрольных точках и всех тиках в тестере — выставляет до 500 ордеров за несколько секунд, а за день — 2-3 пачки таких ордеров.Как сделать, чтобы на Демо и реальном счете он выставлял 1 ордер на Д1?


Добавьте в коде подсчет количества ордеров:
Код: [Выделить]
//Подсчет Sell и Buy ордеров
int CountSell=0, CountBuy=0;
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY) CountBuy++;
if(OrderType()==OP_SELL) CountSell++;
}
И проверку:
Код: [Выделить]
if(CountBuy==0 и есть сигнал на покупки) {открываем ордер buy}
if(CountSell==0 и есть сигнал на продажи) {открываем ордер sell}




Спасибо тебе,ilnur17021992, за совет!!!
Только у меня, когда я вставляю подсчет количества ордеров и проверку, редактор "ругается"(см.скрин).Может я это не туда вставляю или не так? Ума не хватает как сделать, а в Интернете не могу найти.Будь добр,добавь в советник в нужное место или подробно напиши куда и как

Ошибка.jpg
DMB.mq4

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

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


Добавлено: 12-02-2017 13:18:22

Код нужно поместить внутрь функции. У тебя же он просто лежит между функциями.



В том то и дело. что я не знаю как - я новичок Изменено пользователем iket
Ссылка на сообщение
Поделиться на другие сайты

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

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

К примеру так можно:

bool IsOrderOpened(int Order_Type)
{
int CountSell=0, CountBuy=0;
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY) CountBuy++;
if(OrderType()==OP_SELL) CountSell++;
}
if(CountBuy != 0 && Order_Type == OP_BUY)
return(true);

if(CountSell != 0 && Order_Type == OP_SELL)
return(true);

return(false);
}


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

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

Добрый всем вечер.
Есть индикатор "!FT PANEL". Прикладываю.
Если его запустить то получим примерно такую картину:

Код открытый.
Не могу понять как автор индикатора получил полупрозрачный фон панели.
Прошу знающих подсказать куда в коде нужно смотреть.

FT_PANEL.mq4

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

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

Панель нарисована с помощью шрифта Webdings. Он вместо обычных печатных символов рисует различные значки. Только вот не пойму в каком месте панель полупрозрачная? :-/ График под ней не просматривается. Было бы гораздо правильней, на мой взгляд, не мучиться с Webdings, а нарисовать прямоугольник с помощью стандартных возможностей MQL. А вот чтобы он стал полупрозрачным, его нужно "рисовать объект как фон".

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

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

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

Еще вопрос: Где в коде лейбл "ALPHA TRADER", который в заголовке?

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

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

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


Строки 105-133 (создание объектов).

Еще вопрос: Где в коде лейбл "ALPHA TRADER", который в заголовке?


Строки 139 и 142.

Прозрачность в данном индикаторе достигается путем включения свойства "График сверху" в настройках терминала: F8 -> вкладка "Общие".
Изменено пользователем SilverKZ
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


Панель нарисована с помощью шрифта Webdings. Он вместо обычных печатных символов рисует различные значки. Только вот не пойму в каком месте панель полупрозрачная? :-/ График под ней не просматривается. Было бы гораздо правильней, на мой взгляд, не мучиться с Webdings, а нарисовать прямоугольник с помощью стандартных возможностей MQL. А вот чтобы он стал полупрозрачным, его нужно "рисовать объект как фон".



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

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


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



Вот что-то состряпал побырому, чисто для примера скрипт.

Square.mq4

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

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

Подскажите пожалуйста.
Как из совы сделать проверку - открыт ли в терминале график нужного инструмента, а если не открыт, то открыть и построить на нем горизонтальную линию.

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

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

Подскажите пожалуйста.
Как из совы сделать проверку - открыт ли в терминале график нужного инструмента, а если не открыт, то открыть и построить на нем горизонтальную линию.



Вот для примера такой скрипт накидаем:
extern string          chartSymbol="EURUSD";
extern ENUM_TIMEFRAMES chartTF=PERIOD_M1;
//---------------------------------------------------------
void OnStart()
{
if(WindowHandle(chartSymbol,chartTF)==0)
{
long id=ChartOpen(chartSymbol,chartTF);
if(id>0)
{
int step=10;
if(Digits==5||Digits==3)step*=10;
double linePrice=SymbolInfoDouble(chartSymbol,SYMBOL_BID)-step*Point;
//рисуем линию
ObjectCreate(id,"Line",OBJ_HLINE,0,0,linePrice);
ObjectSet("Line",OBJPROP_STYLE,2);
ObjectSet("Line",OBJPROP_COLOR,clrRed);
ObjectSet("Line",OBJPROP_WIDTH,1);
ObjectSetInteger(id,"Line",OBJPROP_SELECTABLE,true);
ObjectSetInteger(id,"Line",OBJPROP_HIDDEN,false);
ObjectSetInteger(id,"Line",OBJPROP_STYLE,0);
}
}
}


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

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


Всем доброго времени суток!
У меня следующая проблема - не могу разобраться как сделать, чтобы на открытие каждой свечи открывались ордера. не важно какие, условие смогу прописать. А вот именно, чтоб на открытии - у меня не получается. Буду очень признателен за помощь!


Вот функция определения нового бара. Если появился новый бар, то выдает true.
//Функция определения нового бара
//Функция возвращает истину (true) если это не первый запуск и пришел новый тик нового бара
bool Fun_New_Bar()// Ф-ия обнаружения нового бара
{
static datetime Prev_Time=0;// Время текущего бара
if(Prev_Time==0)//если предварительное время равно 0
{
Prev_Time=Time[0];//если предвар. время равно времени нулевого бара, то это первый запуск функции
return(false);//возвращаем ложь
}
if(Prev_Time!=Time[0])//если предвар. время не равно времени нулевого бара, то есть новый бар
{
Prev_Time=Time[0];//Поймался новый бар, присваиваем предв. времени время нового бара
return(true);//есть новый бар, возвращаем истину
}
return(false);
}


Получается так: if(Fun_New_Bar() == true) есть новый бар -> вход
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Можно использовать условие volume[0]


Добавлено: 17-02-2017 14:47:03

DreamWorks


Огромное спасибо за ответ. Но непонятно почему не реагирует линия на смену цвета и стиля Изменено пользователем alex32926
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Но непонятно почему не реагирует линия на смену цвета и стиля


Пардон. Неправильно немного написал... Вот так правильно:

//рисуем линию
ObjectCreate(id,"Line",OBJ_HLINE,0,0,linePrice);
ObjectSetInteger(id,"Line",OBJPROP_COLOR,clrAqua);
ObjectSetInteger(id,"Line",OBJPROP_SELECTABLE,true);
ObjectSetInteger(id,"Line",OBJPROP_HIDDEN,false);
ObjectSetInteger(id,"Line",OBJPROP_STYLE,4);
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Индикатор Williams percent Range, надо чтобы сова продавала на ВЫХОДЕ из зоны перекупленности и покупала на ВЫХОДЕ из перепроданности. Хотя бы логически как это сделать, не понимаю. Ну и если не лень то кодом)

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

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

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


MultiInstrument.mq4

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

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


Индикатор Williams percent Range, надо чтобы сова продавала на ВЫХОДЕ из зоны перекупленности и покупала на ВЫХОДЕ из перепроданности. Хотя бы логически как это сделать, не понимаю. Ну и если не лень то кодом)


Сваял на скорую руку :).

WilliamsPercentRange_BOT.mq4
WilliamsPercentRange_BOT.ex4

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

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


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



Исправлено :).

MultiInstrument.mq4
MultiInstrument.ex4

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

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

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

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

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

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

Войти

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

Войти

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


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

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