vitek01 Опубликовано 29 ноября, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 ноября, 2018 Скажите уважаемые камрады, чтобы работать с переменными советников на уровне двух терминалов, нужно создать DLL в програме C++ Builder, если правильно то подмигните хотя бы ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 29 ноября, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 ноября, 2018 Меня в первую очередь интересует спред в момент закрытия ордера. Может существует возможность получать эту информацию из истории? Ну логично, что ты после закрытия ордера будешь ждать, пока сервер тебе выдаст ответ, после этого это будешь открывать csv, искать последнюю строчку, записывать туда данные, закрывать csv, далее только переходить к следующему ордеру. Но по времени это миллисекунды, не думаю, что тут стоит волноваться. Если ты закрываешь сетку, то вначале отсортируй ордера по лотности, а потом закрывай с самого большого, тогда тебе будет уже пофиг на задержки остальных, самый прибыльный ты закроешь первым. Всегда есть проскальзывание сервера, от него ты никак не застрахован. У меня может быть 1-2% сеток, которые должны быть в БУ закрываются в небольшой минус, но я даже не парюсь, он быстро отрабатывает.По истории, я не анализирую спреды во время закрытия ордеров, мне не нужно особо, но после закрытия каждого ордера у меня идет принт, в который я записываю "ордер закрыт, все хорошо", профит ордера, плюс текущий спред. Можно спокойно проверить после этого из логов это значение. Если просто интересен спред по паре, поставь мой индикатор "Spread Detected by ReVeR" на нее, он будет рисовать значение спреда каждый тик (минимум, максимум, средний по свече), плюс записывать, если нужно, это значение в файл.Скажите уважаемые камрады, чтобы работать с переменными советников на уровне двух терминалов, нужно создать DLL в програме C++ Builder, если правильно то подмигните хотя бы ? Знаю, что можно и без DLL, но как - не знаю, не было задачи узнать. Вот пример программы без dll, которая копирует сделки с одного терминала на другой: ТЫК 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 29 ноября, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 ноября, 2018 Вроде как должна работать но почему-то не хочет По коду сначала идет перебор всех ордеров и запоминается профит последнего, который необязательно будет в плюсе.Нужно 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........ Хотя тикет вроде и не нужен...Впишите в код Принты со значением сравниваемых переменных, будет проще понять, правильно ли работает логика. Изменено 29 ноября, 2018 пользователем usver73 Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 29 ноября, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 ноября, 2018 Скажите уважаемые камрады, чтобы работать с переменными советников на уровне двух терминалов, нужно создать DLL в програме C++ Builder, если правильно то подмигните хотя бы ? Знаю, что можно и без DLL, но как - не знаю, не было задачи узнать. Вот пример программы без dll, которая копирует сделки с одного терминала на другой: ТЫКНу копировщик зделок это не то, нужны даные переменных с разных терминалов(не очень особо нужны,но задача на ближаишее будущее уже созревает). Есть статья по этой теме "Как написать DLL для MQL4 на C++Builder.", там вроде не так сложно, даже для меня. Ссылка на сообщение Поделиться на другие сайты More sharing options...
sniv Опубликовано 29 ноября, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 ноября, 2018 Скажите уважаемые камрады, чтобы работать с переменными советников на уровне двух терминалов, нужно создать DLL в програме C++ Builder, если правильно то подмигните хотя бы ? Знаю, что можно и без DLL, но как - не знаю, не было задачи узнать. Вот пример программы без dll, которая копирует сделки с одного терминала на другой: ТЫК Ну копировщик зделок это не то, нужны даные переменных с разных терминалов(не очень особо нужны,но задача на ближаишее будущее уже созревает). Есть статья по этой теме "Как написать DLL для MQL4 на C++Builder.", там вроде не так сложно, даже для меня.Я пока встречал передачу через DLL, реестр windows, файл, виртуальный файл,,в этой ветке есть библиотеки, пробуйте:https://www.mql5.com/ru/forum/116821 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 29 ноября, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 ноября, 2018 файл Простите, а разве mql может работать с файлами, расположенными вне "песочницы"?Снимаю вопрос. Дошел до страницы по ссылке.. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 ноября, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 ноября, 2018 Если я при закрытии каждого из ордеров записываю в эксель-файл информацию по нему, это увеличивает время закрытия сетки?Вы можете писать любую инфу по всем ордерам в строковую переменную, а после закрытия ордеров, выгружать строку в файл - в этом случае задержки практически не будет.Добавлено: 29-11-2018 18:56:41Вроде как должна работать но почему-то не хочетНельзя удалять ордера в прямом цикле перебора. После удаления 0 ордера 1 ордер становится 0-вым, а цикл переходит дальше к 1-му ордеру, который был 2-ым до удаления...Придумайте другую логику закрытия, например считайте сколько ордеров с начала списка можно удалить, а потом отдельным циклом удаляйте, или через тикеты... Изменено 29 ноября, 2018 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
molot_1 Опубликовано 3 декабря, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 декабря, 2018 Здравствуйте! Может быть гляните на мои пробы в обучении. Нашёл код трейлинга, вставил в советник, но все ошибки исправить не получается. Пожалуйста помогите или хотя бы исправьте. Заранее спасибо! Исходный_код.mq4Test4.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 3 декабря, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 декабря, 2018 Пожалуйста помогите или хотя бы исправьтеСмотри.Test4_.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Максим1990 Опубликовано 5 декабря, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 декабря, 2018 Доброго времени суток. Изучаю курс и столкнулся с проблемой ошибки при тестировании. в журнале появляется "cannot open file 'C:\Program Files (x86)\MetaTrader 4 - RoboForex\MQL4\indicators\TMA_Fair.ex4' [2]" . Разбираю 3 урок С внешним индикатором. с чем может быть связана данная ошибка и как ее исправить. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 5 декабря, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 декабря, 2018 столкнулся с проблемой ошибки при тестировании. в журнале появляется "cannot open file 'C:\Program Files (x86)\MetaTrader 4 - RoboForex\MQL4\indicators\TMA_Fair.ex4' [2]"Приведите код вызова индикатора и проверьте наличие файла по указанному пути. Сколько у Вас терминалов? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Максим1990 Опубликовано 5 декабря, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 декабря, 2018 открыл каталог данных из терминала и перекинул туда TMA в папку MQL индикаторы, три терминала установлено. не понял что вы имели в виду "Приведите код вызова индикатора " Добавлено: 05-12-2018 20:08:17нашел ошибку, в конце названия у индикатора стоял пробел 8-}. теперь все заработалоДобавлено: 06-12-2018 14:27:27Добрый вечер. Помогите найти ошибку. Столкнулся с проблемой в задании 3 урока. Стоп ордер моментально закрывается , при пересечении его ценой, хотя на закрытие я установил только по TP и SL. и не до конца понял правильно ли я добавил сигнал по стахастику. сделки открывает, но когда делаю тестирование с визуализацией мне кажется что как будто что то не так. QIP_Shot_-_Screen_298.pngQIP_Shot_-_Screen_299.png33.mq4 Изменено 6 декабря, 2018 пользователем Максим1990 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 6 декабря, 2018 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 декабря, 2018 открыл каталог данных из терминала и перекинул туда 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); Обратите внимание на журнал метатрейдер, обязательно увидите это: Изменено 6 декабря, 2018 пользователем xbms Ссылка на сообщение Поделиться на другие сайты More sharing options...
Максим1990 Опубликовано 6 декабря, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 декабря, 2018 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.pngQIP_Shot_-_Screen_301.pngQIP_Shot_-_Screen_299.png Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 7 декабря, 2018 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 декабря, 2018 сам ордер выставляет, но когда цена доходит до стоп ордера он моментом закрывается(картинка 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 Ссылка на сообщение Поделиться на другие сайты More sharing options...
ZelTrad Опубликовано 7 декабря, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 декабря, 2018 Я так понимаю в терминалах MT5 и MT4 один язык программирования mql5 стал? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 декабря, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 декабря, 2018 Я так понимаю в терминалах MT5 и MT4 один язык программирования mql5 стал?Пока нет.Добавлено: 07-12-2018 15:39:50и тем самым этот тикет присваивается и стоп ордеруЭто Вы точно не туда пошли. Тикет не может "приравняться" это точно. Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 7 декабря, 2018 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 декабря, 2018 Цитата я думал этот код будет закрывать только рыночные ордера 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 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Bulldoser Опубликовано 10 декабря, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 декабря, 2018 ребят а можно сделать такую сову, чтобы я расставил уровни, а он от них открывался. (То есть он работает с предварительно вручную расставленными линиями)?Не хочу объявлять уровни как константы. Ссылка на сообщение Поделиться на другие сайты More sharing options...
sniv Опубликовано 10 декабря, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 декабря, 2018 ребят а можно сделать такую сову, чтобы я расставил уровни, а он от них открывался. (То есть он работает с предварительно вручную расставленными линиями)?Не хочу объявлять уровни как константы. Вот Вам направление - OBJPROP_PRICE1 OBJPROP_PRICE2 OBJPROP_PRICE3а если точнее - рисуете обьект, ищите его, открываетесь (или выставляте отложку) по цене найденного обьекта Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 10 декабря, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 декабря, 2018 ребят а можно сделать такую сову, чтобы я расставил уровни, а он от них открывался.Такие совы есть в изобилии, называется: торговля от линий/уровней Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 13 декабря, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 декабря, 2018 Новый урок:http://tradelikeapro.ru/mql4-grafik-ekviti-i-statistika/ 5 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Larcher Опубликовано 13 декабря, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 декабря, 2018 Подскажите, пожалуйста, новичку, как посчитать количество закрытых подряд убыточнх сделок. Нужно, чтобы советник останавливал тоговлю после определенного количества убыточны сделок подряд. В коде сделки закрываются по Стопу или Тейку.Я пробовала перебирать закрытые одера функицейOrderSelect(trade,SELECT_BY_POS,MODE_HISTORY) и отбирать убыточные, но поняла, что данная функция перебирает ордера в случайном порядке. Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 13 декабря, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 декабря, 2018 данная функция перебирает ордера в случайном порядке Первый раз о таком слышу. И на уроках я не помню чтоб xbms упоминал что нибуть подобное. Перебор идет подряд. Предоставь код перебора. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 декабря, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 декабря, 2018 Я пробовала перебирать закрытые одера функцей OrderSelect(trade,SELECT_BY_POS,MODE_HISTORY) и отбирать убыточные, но поняла, что данная функция перебирает ордера в случайном порядке. Открытые ордера сортируются по времени открытия и тикету, закрытые по времени закрытия! 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти