0ll Опубликовано 23 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 января, 2015 Пробуй. candleBodySize.mq4 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 24 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 января, 2015 Добрый день ув. Oll. возник вопрос...допустим я хочу сделать закрытие сделки по показаниям стороннего индикатора. У меня есть функция Closebuyvoid CloseBuy() { for (int trade = OrdersTotal() - 1; trade >= 0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()) { if (OrderMagicNumber() == Magic && OrderType() == OP_BUY) { OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Green); } } }}могу ли я повторно использовать эту функцию, типа???If(a > 0 && b CloseBuy; Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 24 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 января, 2015 могу ли я повторно использовать эту функцию, типа???Даже вопрос не понял. Вы можете её использовать сколько угодно, можно сказать - затереть до дыр, лишь-бы ордера для закрытия были... Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyGold Опубликовано 24 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 января, 2015 Подскажите, плиз ))) Дайте пенделя в нужном направлении :На графике присутствует какое-то количество графических объектов.Закончил формироваться новый бар. Как проще всего определить не коснулся ли он какого-нибудь графического объекта ?(Что то не хочется перебирать цены всех объектов и сравнивать а нету ли диапазона цен последнего бара в каком нибудь из них) Или другими словами - есть какой-то диапазон цен и времени как определить, есть ли в этих координатах какой-нибудь графический объект на графике (определить его название)? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 24 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 января, 2015 AndreyGold Кроме как перебирать объекты другого пути нет. Если-бы у объектов было событие - тогда да, но их нет.На самом деле в переборе нет ничего страшного - по сути Вы будете просматривать массив характеристик, это будет довольно быстро. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyGold Опубликовано 24 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 января, 2015 Что то врубиться не могу - ордера у меня открывает советник, который вроде как прописывает комментарии в ордер при его открытии. В руководстве к MQL4, написано: "Последняя часть комментария может быть изменена торговым сервером." При этом в истории своего счета ( в торговом терминале) в комментахтолько то, что прописывает сервер (причины, открытия/закрытия ордеров), а как увидеть у ордера свои комментарии, не могу понять .... Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 24 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 января, 2015 AndreyGold Это не тот случай (с сусликами), если коммента не видно - значит его нет. Либо не прописывается, либо затирается сервером. Лично я комменты в совах не использую совсем - опасно на них надеяться. Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyGold Опубликовано 24 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 января, 2015 AndreyGold Это не тот случай (с сусликами), если коммента не видно - значит его нет. Либо не прописывается, либо затирается сервером. Лично я комменты в совах не использую совсем - опасно на них надеяться. А если робот писать, комменты в какой-нибудь специальный текстовик тогда пихать ?И в чем опасность можно намекнуть ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 24 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 января, 2015 А если робот писать, комменты в какой-нибудь специальный текстовик тогда пихать ?И в чем опасность можно намекнуть ?Опасность в том, что некоторые совы пишут в коммент информацию, на которой строится в дальнейшем логика программы - это не правильно - слететь может...Первую фразу не понял... Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyGold Опубликовано 24 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 января, 2015 Про первую фразу - на одном торговом счету, ордера могут открываться по разному, вручную, скриптами, торговыми роботами. Я думал, что прописав в комментах инфо, как открыт ордер, смогув дальнейшем быстро фильтровать/сортировать историю из терминала по этому признаку. Вот и думаю как лучше теперь сделать. Один из вариантов, чтобы те ордера, которые открываются "безконтрольно" то есть на автомате, выписывались бы в специальный текстовый файл. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 24 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 января, 2015 AndreyGold Для ручного анализа стейтмента конечно нужны комменты, ордера удобно в ехселе отсортировать по инструменту или тому-же комменту. Надо внимательно смотреть открытие ордеров - лично мне не встречалось чтоб сервер полностью затёр коммент... Ссылка на сообщение Поделиться на другие сайты More sharing options...
aristarx Опубликовано 24 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 января, 2015 Спасибо огромное! Проверил, то что надо. Удачи тебе!!!Извиняюсь за занудство, а можно еще, чтобы цифры после, допустим, последних 100 свечек убиралисьс графика. Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyGold Опубликовано 24 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 января, 2015 Так вот и я думал потом в экселе дальнейшую обработку делать.При открытии ордера информации об ошибках никаких нет, все ордера открываются без проблем.Открываю вот так:if(OrderSend(Symbol(),OP_SELLLIMIT,razmer,pOpen,2,(pStop+MarketInfo(Symbol(),MODE_SPREAD)/MathPow(10,Digits())),(pProfit+MarketInfo(Symbol(),MODE_SPREAD)/MathPow(10,Digits())),"Скальпинг.Ордер установлен из скрипта",0,0,clrRed)==-1)Сомнений два (откроется рынок, проверю)1 Не берется кириллица2 Нельзя напрямую комментарий в функцию открытия ордера писатьА если все правильно открываю, то вот первый пример брокера, который полностью убивает Комментарий )))Кстати у меня два счета у разных брокеров, нет моих комментариев в истории ни у одного из них, но оба брокера из Западной Европы. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 24 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 января, 2015 AndreyGold Однозначно кириллица не поддерживается. И размер коммента делай поменьше, может код какой-то - потом в ехеле будет удобней работать и ограничение на длину коммента есть.../MathPow(10,Digits()) *_Point - быстрее будет... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SVBond Опубликовано 25 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 января, 2015 Уважаемые программисты помогите с задачей-есть советник который выдает warning (return value of 'OrderSend' should be checked 80 14) и вот эта строка-((OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask,Digits), 3, Low[1]-offset*Point, Ask+TP*Point, "BUY_sidus", magic, 0, CLR_NONE)тут точка с запитой)) Что не так-то? Ссылка на сообщение Поделиться на другие сайты More sharing options...
MagDag Опубликовано 25 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 января, 2015 Эта ошибка связана с невозможностью установить стоплосс и тейкпрофит одновременно с открытием ордера, то есть необходимо сначала открыть ордер потом его модифицировать и расставить стоплосс и тейкпрофит. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 января, 2015 SVBond Компилятор хочет, чтоб Вы контролировали (checked) возвращаемое функцией ОрдерСенд значение, т.е.:int Ticket = OrderSend(.... 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SVBond Опубликовано 25 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 января, 2015 Проблема одинаковая была в двух строках. в первой поставил - "int Ticket = OrderSend(...." - warring исчез... Но во второй строке когда это ставлю пишет- 'Ticket' - variable already defined 1 error(s), 0 warning(s) 2 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 января, 2015 SVBond определение переменной "int Ticket =" должно быть 1 раз, Второй раз надо писать просто "Ticket =" 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Айк Опубликовано 25 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 января, 2015 Здравствуйте всем.Очередной "затык" 8-}Бот при прогоне в тестере открывает один ордер-и все.Компилятор ошибок не выдает. Bot-1.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
chistaia-rodina Опубликовано 26 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 января, 2015 Айк, а в чём собственно проблема, как именно нужно чтобы работал. Кстати, код можно бы поаккуратней писать, а то все скобки пораскиданы на разных уровнях. Возьмите к примеру правило, один уровень от другого с отступом в три пробела, так и самому понятнее будет и проще.Добавлено: 26-01-2015 01:35:41 В блоке открытия ордеров, идёт сравнение с OrdersTotal(), соответственно как только появляется хоть один ордер, блок перестаёт работать. По переменной Ticket вообще не понятно, изначально ей присваивается значение 0, но потом ни где не меняется и при этом участвует в сравнениях, зачем? Трейлинг вообще ужасно выписан. Изменено 26 января, 2015 пользователем chistaia-rodina Ссылка на сообщение Поделиться на другие сайты More sharing options...
Serega Опубликовано 26 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 января, 2015 здравствуйте уважаемые программисты!хотел бы в советника добавить следующую функцию, программирование только постигаю и никак не выходит. Cоветника приложил. Яне прошу переделывать достаточно указать мне правильность прописания функции Функция для расчета рабочего лота по следующим условиям. lotmin - стартовый размер лота.lotmax - верхнее ограничение на размер лота.Если последняя сделка закрылась в +, то увеличиваем лот на величину lotstep.Как только последняя сделка закрылась в -, возвращаемся к lotmin.Т.е. при наступлении серии положительных сделок мы увеличиваем нагрузку на лот.Будем использовать функцию GetLastOrderHist, описанную ниже.Код:// --- Параметры управления капиталом ---extern bool uplot = true; - вкл/выкл изменение величины лотаextern int lastprofit = 1; - принимает значения -1/1. -1 - увеличение лота после минусовой сделки до первой плюсовой.1 - увеличение лота после плюсовой сделки до первой минусовой.extern double lotmin = 0.1; - начальное значениеextern double lotmax = 0.5; - потолокextern double lotstep = 0.1; - приращение лота double GetLots() {double lot = lotmin;if (!uplot) return (lot);int ticket = GetLastOrderHist();if (ticket == -1) return (lot);if (!OrderSelect(ticket, SELECT_BY_TICKET, MODE_HISTORY)) return (lot);if (OrderProfit()*lastprofit lot = MathMin(OrderLots() + lotstep, lotmax);return (lot);}Получить тикет последнего закрытого ордера из истории.Если тип ордера не указан, берется самый последний ордер любого типа.Если ордеров, отвечающих указанным критерию не найдено, возвращает -1.Код:int GetLastOrderHist(int type = -1) {int ticket = -1;datetime dt = 0;int cnt = HistoryTotal();for (int i=0; i if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;//Опциональноif (OrderSymbol() != Symbol()) continue;//Опциональноif (OrderMagicNumber() != Magic) continue;if (type != -1 && OrderType() != type) continue;if (OrderCloseTime() > dt) {dt = OrderCloseTime();ticket = OrderTicket();}}return (ticket);}1.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рerovskikh Опубликовано 26 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 января, 2015 Вот код. Для закрытия всех ордеров по общему профиту.Помогите добрые люди. Как мне закрыть все ордера не только по профиту.А что бы закрывались все ордера при закрытии главного ордера. В том числе и отложенные.Я представляю себе так у первого ордера индивидуальный MagicNumber=1, и при его закрытии закрываются все ордера с другим MagicNumber=2 В том числе и отложенные.Спасибо. //вставляем это в главную функциюif((SummPos(1)+SummPos(0))>0) {CloseAllPos(1);CloseAllPos(0);}//и добавляем все функции ниже (вне функции)//суммирует результат позиций по типуint SummPos(int type) {//подробное описание: http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=100 int i;double summ; for( i=1; i { if(OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && type==1&& OrderMagicNumber()==MG){summ=summ+OrderProfit();} if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && type==0&& OrderMagicNumber()==MG){summ=summ+OrderProfit();} } } return(summ);}//Закрываем все позиции по типуint CloseAllPos(int type){//Описание функции: http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=72int buy=1; int sell=1;int i,b=0;int ordertiket; if(type==1) { while(buy==1) { buy=0; for( i=0;i { if(true==OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderType()==OP_BUY && OrderSymbol()==Symbol() ){buy=1; OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);} }else{buy=0;} } if(buy==0){return(0);} } } if(type==0) { while(sell==1) { sell=0; for( i=0;i { if(true==OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderType()==OP_SELL && OrderSymbol()==Symbol() ){sell=1;OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); } }else{sell=0;} } if(sell==0){return(0);} } } return(0); } Изменено 27 января, 2015 пользователем Рerovskikh Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 26 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 января, 2015 Привет всем!Подскажите, можно ли как-нибудь узнать результат предыдущего ордера(+/-) на одной вп, не сравнивая его результат с балансом? (когда несколько вп(валютных пар) торгуется, не правильно сравнивать так будет)Если взять ордер оупен тайм , можно ли как-нибудь узнать значение цены в тот момент?хотя можно во время открытия ордера, его ценовое значение в переменную статическую занести, а потом сравнить с переменной, в которую будет занесено значение цены в момент закрытия ордера...нормально мыслю? Изменено 26 января, 2015 пользователем oleguitar Ссылка на сообщение Поделиться на другие сайты More sharing options...
chistaia-rodina Опубликовано 26 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 января, 2015 oleguitar, да обычным перебором истории, так надёжнее будет и выключения терминала будут нипочём. Только нужно ограничить количество циклов перебора в разумных пределах, а то создаст сильную вычислительную нагрузку, особенно при тестировании. Ну а дальше, после нахождения и выбора ордера, можно брать все данные по открытию и закрытию. Можно конечно через глобал и статик, но они будут слетать при перезагрузке, всё конечно зависит от используемой системы. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти