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

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


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

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

Скажите уважаемые камрады, чтобы работать с переменными советников на уровне двух терминалов, нужно создать DLL в програме C++ Builder, если правильно то подмигните хотя бы ?

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

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

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

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

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

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

Перейти

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

Перейти

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

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

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


Ну логично, что ты после закрытия ордера будешь ждать, пока сервер тебе выдаст ответ, после этого это будешь открывать csv, искать последнюю строчку, записывать туда данные, закрывать csv, далее только переходить к следующему ордеру. Но по времени это миллисекунды, не думаю, что тут стоит волноваться. Если ты закрываешь сетку, то вначале отсортируй ордера по лотности, а потом закрывай с самого большого, тогда тебе будет уже пофиг на задержки остальных, самый прибыльный ты закроешь первым. Всегда есть проскальзывание сервера, от него ты никак не застрахован. У меня может быть 1-2% сеток, которые должны быть в БУ закрываются в небольшой минус, но я даже не парюсь, он быстро отрабатывает.
По истории, я не анализирую спреды во время закрытия ордеров, мне не нужно особо, но после закрытия каждого ордера у меня идет принт, в который я записываю "ордер закрыт, все хорошо", профит ордера, плюс текущий спред. Можно спокойно проверить после этого из логов это значение.
Если просто интересен спред по паре, поставь мой индикатор "Spread Detected by ReVeR" на нее, он будет рисовать значение спреда каждый тик (минимум, максимум, средний по свече), плюс записывать, если нужно, это значение в файл.

Скажите уважаемые камрады, чтобы работать с переменными советников на уровне двух терминалов, нужно создать DLL в програме C++ Builder, если правильно то подмигните хотя бы ?


Знаю, что можно и без DLL, но как - не знаю, не было задачи узнать. Вот пример программы без dll, которая копирует сделки с одного терминала на другой: ТЫК

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

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

Вроде как должна работать но почему-то не хочет


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

double max_prlock;
int ticket;
for(int y=OrdersTotal()-1; y>=0; y--) //перебор ордеров {
if(OrderSelect(y,SELECT_BY_POS,MODE_TRADES)) {
if(OrderSymbol()==Symbol() && (OrderMagicNumber()==magic_b || OrderMagicNumber()==magic_s))
//находим наш единственный ордер с уникальным магиком
{
prlock=OrderProfit();// и если он есть то определяем его профит в переменную
if(prlock>max_prlock) {
prev_prlock=prlock;
ticket=OrderTicket();
}
}
}
}
........
далее сравниваем профит ордера с max_prlock
........

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

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

Скажите уважаемые камрады, чтобы работать с переменными советников на уровне двух терминалов, нужно создать DLL в програме C++ Builder, если правильно то подмигните хотя бы ?


Знаю, что можно и без DLL, но как - не знаю, не было задачи узнать. Вот пример программы без dll, которая копирует сделки с одного терминала на другой: ТЫК


Ну копировщик зделок это не то, нужны даные переменных с разных терминалов(не очень особо нужны,но задача на ближаишее будущее уже созревает). Есть статья по этой теме "Как написать DLL для MQL4 на C++Builder.", там вроде не так сложно, даже для меня.
Ссылка на сообщение
Поделиться на другие сайты

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



Скажите уважаемые камрады, чтобы работать с переменными советников на уровне двух терминалов, нужно создать DLL в програме C++ Builder, если правильно то подмигните хотя бы ?


Знаю, что можно и без DLL, но как - не знаю, не было задачи узнать. Вот пример программы без dll, которая копирует сделки с одного терминала на другой: ТЫК


Ну копировщик зделок это не то, нужны даные переменных с разных терминалов(не очень особо нужны,но задача на ближаишее будущее уже созревает). Есть статья по этой теме "Как написать DLL для MQL4 на C++Builder.", там вроде не так сложно, даже для меня.


Я пока встречал передачу через DLL, реестр windows, файл, виртуальный файл,,
в этой ветке есть библиотеки, пробуйте:
https://www.mql5.com/ru/forum/116821
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

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

файл


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

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

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

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

Добавлено: 29-11-2018 18:56:41

Вроде как должна работать но почему-то не хочет

Нельзя удалять ордера в прямом цикле перебора. После удаления 0 ордера 1 ордер становится 0-вым, а цикл переходит дальше к 1-му ордеру, который был 2-ым до удаления...
Придумайте другую логику закрытия, например считайте сколько ордеров с начала списка можно удалить, а потом отдельным циклом удаляйте, или через тикеты... Изменено пользователем 0ll
Ссылка на сообщение
Поделиться на другие сайты

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

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

Исходный_код.mq4
Test4.mq4

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

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

Доброго времени суток. Изучаю курс и столкнулся с проблемой ошибки при тестировании. в журнале появляется "cannot open file 'C:\Program Files (x86)\MetaTrader 4 - RoboForex\MQL4\indicators\TMA_Fair.ex4' [2]" . Разбираю 3 урок С внешним индикатором. с чем может быть связана данная ошибка и как ее исправить.

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

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

столкнулся с проблемой ошибки при тестировании. в журнале появляется "cannot open file 'C:\Program Files (x86)\MetaTrader 4 - RoboForex\MQL4\indicators\TMA_Fair.ex4' [2]"

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

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

открыл каталог данных из терминала и перекинул туда TMA в папку MQL индикаторы, три терминала установлено. не понял что вы имели в виду "Приведите код вызова индикатора "


Добавлено: 05-12-2018 20:08:17

нашел ошибку, в конце названия у индикатора стоял пробел 8-}. теперь все заработало

Добавлено: 06-12-2018 14:27:27

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

QIP_Shot_-_Screen_298.png
QIP_Shot_-_Screen_299.png
33.mq4

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

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


открыл каталог данных из терминала и перекинул туда TMA в папку MQL индикаторы, три терминала установлено. не понял что вы имели в виду "Приведите код вызова индикатора "


Добавлено: 05-12-2018 20:08:17

нашел ошибку, в конце названия у индикатора стоял пробел 8-}. теперь все заработало

Добавлено: 06-12-2018 14:27:27

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


Вечер добрый!

Судя по коду тут многое не так.
Вот это, например, что такое?


NormalizeDouble(OrderModify(ticket, OrderOpenPrice(),SL, TP,0), Digits);


или это?

NormalizeDouble(OrderSend(Symbol(),OP_BUYSTOP,Lots,StopPrice, Slippage,SSL,STP,comment,magic,0,clrBlue),Digits);


а вот ещё, обратите внимание, что после "TMA_Fair" идёт пробел, это уже ошибка, т.к. сам индикатор идёт без пробела:


PriceHigh = iCustom(Symbol(),0,"TMA_Fair ",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate, 1, 0);



Обратите внимание на журнал метатрейдер, обязательно увидите это:

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

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

NormalizeDouble(OrderModify(ticket, OrderOpenPrice(),SL, TP,0), Digits);


после компеляции у меня выставлял предупреждение(картинка 1) и NormalizeDouble исправил это, остальной код чисто по 3 уроку. кроме NormalizeDouble. ошибку с пробелом я уже нашел и исправил.
На данный момент у меня проблема с 3 заданием по 3 уроку."выше/ниже границ каналов поставить страховочные стоп-ордера на некотором расстоянии от рыночных ордеров, дабы компенсировать убытки при
возможных потерях от рыночных ордеров (с обязательной установкой SL, TP)."
данную задачу я решил вставить код на открытие стоп ордера в момент модификации рыночного, вставляя тутда вот этот код:
StopPrice = OrderOpenPrice() - sureStop*Point;
SSL = NormalizeDouble(StopPrice + StopStopLoss * Point,Digits);// расчитываем стоплос для стоп ордера
STP = NormalizeDouble(StopPrice - StopTakeProfit * Point,Digits);
OrderSend(Symbol(),OP_SELLSTOP,Lots,StopPrice, Slippage,SSL,STP,comment,magic,0,clrBlue);

сам ордер выставляет, но когда цена доходит до стоп ордера он моментом закрывается(картинка 2 и 3)
в чем может быть проблема?

QIP_Shot_-_Screen_300.png
QIP_Shot_-_Screen_301.png
QIP_Shot_-_Screen_299.png

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

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

сам ордер выставляет, но когда цена доходит до стоп ордера он моментом закрывается(картинка 2 и 3)
в чем может быть проблема?



Ну так вот же Ваш код:



if(Ask 0)
{
for(int i = OrdersTotal()-1; i >=0; i--)
{//перебираем ордера которые у нас уже есть
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)== true)
{// если он выбран, проверяем является ли он нордером с нашим магиком
if(OrderMagicNumber() == magic && OrderType() == OP_SELL)
{
NormalizeDouble(OrderClose(OrderTicket(),OrderLots(), Ask, Slippage, clrBlack),Digits);
}
}
}

}

if(Bid >=PriceMedeum && CountBuy()> 0)
{
for(int i = OrdersTotal()-1; i >=0; i--)
{//перебираем ордера которые у нас уже есть
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)== true)
{// если он выбран, проверяем является ли он нордером с нашим магиком
if(OrderMagicNumber() == magic && OrderType() == OP_BUY)
{
NormalizeDouble(OrderClose(OrderTicket(),OrderLots(), Bid, Slippage, clrBlack),Digits);
}
}
}

}



Все условия выполняются, вот ордера и закрываются, всё честно.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Я так понимаю в терминалах MT5 и MT4 один язык программирования mql5 стал?

Пока нет.

Добавлено: 07-12-2018 15:39:50

и тем самым этот тикет присваивается и стоп ордеру

Это Вы точно не туда пошли. Тикет не может "приравняться" это точно.
Ссылка на сообщение
Поделиться на другие сайты

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


я думал этот код будет закрывать только рыночные ордера OP_SELL и OP_BUY, у меня же открывается OP_BUYSTOP и OP_SELLSTOP, я и думал что этот код их не будет затрагивать. Это может быть из-за того что стоп ордера у меня открываются в месте проверки условия открылся ли рыночный ордер и при ровнялся ему тикет, и тем самым этот тикет присваивается и стоп ордеру. И поэтому стоп ордер проходит проверку в условии закрытия рыночного ордера?? так это или я совсем не туда пошел в рассуждениях?



STOP-ордер стал рыночным, поэтому он стал BUY или SELL.
Именно поэтому к нему и применяются те же условия.

Да, и спрошу ещё раз, что это значит для Вас?


NormalizeDouble(OrderClose(OrderTicket(),OrderLots(), Ask, Slippage, clrBlack),Digits);


Если Вы хотите избежать предупреждения компилятора, то делать нужно так:


bool res;
res = OrderClose(OrderTicket(),OrderLots(), Ask, Slippage, clrBlack);

if (!res)
{
// тут обработка ошибок закрытия ордера
.....
}


NormalizeDouble - это функция, которая нормализует дробное значение и возвращает его.
Вы же пытаетесь нормализовать булевое значение, причём далее его нигде не используя.

bool OrderClose(
int ticket, // номер ордера
double lots, // количество лотов
double price, // цена закрытия
int slippage, // максимальное проскальзывание
color arrow_color // цвет
);



Вот я и спрашиваю, какой в этом сакральный смысл?
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

ребят а можно сделать такую сову, чтобы я расставил уровни, а он от них открывался. (То есть он работает с предварительно вручную расставленными линиями)?
Не хочу объявлять уровни как константы.

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

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


ребят а можно сделать такую сову, чтобы я расставил уровни, а он от них открывался. (То есть он работает с предварительно вручную расставленными линиями)?
Не хочу объявлять уровни как константы.


Вот Вам направление - OBJPROP_PRICE1 OBJPROP_PRICE2 OBJPROP_PRICE3
а если точнее - рисуете обьект, ищите его, открываетесь (или выставляте отложку) по цене найденного обьекта
Ссылка на сообщение
Поделиться на другие сайты

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

ребят а можно сделать такую сову, чтобы я расставил уровни, а он от них открывался.

Такие совы есть в изобилии, называется: торговля от линий/уровней
Ссылка на сообщение
Поделиться на другие сайты

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

Подскажите, пожалуйста, новичку, как посчитать количество закрытых подряд убыточнх сделок. Нужно, чтобы советник останавливал тоговлю после определенного количества убыточны сделок подряд. В коде сделки закрываются по Стопу или Тейку.
Я пробовала перебирать закрытые одера функицей
OrderSelect(trade,SELECT_BY_POS,MODE_HISTORY) и отбирать убыточные, но поняла, что данная функция перебирает ордера в случайном порядке.

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

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

данная функция перебирает ордера в случайном порядке


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

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

Я пробовала перебирать закрытые одера функцей OrderSelect(trade,SELECT_BY_POS,MODE_HISTORY) и отбирать убыточные, но поняла, что данная функция перебирает ордера в случайном порядке.

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

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

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

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

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

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

Войти

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

Войти

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


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

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