nct21 Опубликовано 4 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2015 да вроде есть проверка открытых ордеров, вот код для бая: //+------------------------------------------------------------------+ int CountBuy() { int count = 0; for(int trade = OrdersTotal()-1; trade >= 0; trade--) { bool select = OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == magic) { if (OrderType() == OP_BUY) count++; } } return(count); } //+------------------------------------------------------------------+ Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2015 nct21 если его правильно использовать, то проблем не будет. "Почините мне машину - не заводиться. - А где-ж машина? - В гараже, вот её фото..." :d 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 5 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2015 Sany2912 сигналы возникают как правило на 1 баре. надо сохранить время открытия бара, отправить ордер, а на следующем тике проверить если время совпало, то значит сигнал отработан - выход. пример:static datetime sigDT;if ( /условия входа/ && sigDT != Time[0]) { sigDT = Time[0]; OrderSend(...); } else { return; }как-то так. а что за индюк волшебный? 0ll, этот код не поможет, так как открытие следующей позиции произойдет на следующей свече!!! А нужно чтобы было следующее открытие на следующем сигнале!!! Есть еще варианты???? (на срине обычная средняя, взял для примера) Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 5 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2015 Sany2912 обычно условия на вход составляют так, что они перестают сигналить на след. свече. Я смотрел на стрелочный индюк на Вашем скрине - стрелки ведь не подряд рисуются.Ещё вариант: после открытия ордера пауза в х-бар. Или дистанция цены не менее ХХ-пунктов. Вариантов много надо смотреть на условия. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 5 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2015 Sany2912 обычно условия на вход составляют так, что они перестают сигналить на след. свече. Я смотрел на стрелочный индюк на Вашем скрине - стрелки ведь не подряд рисуются.Ещё вариант: после открытия ордера пауза в х-бар. Или дистанция цены не менее ХХ-пунктов. Вариантов много надо смотреть на условия. Скрин сделал так, как должно бы было быть. Код сделать не получается... А как в условии на вход сделать так, чтоб сигнал перестал сигналить на следующей свече? И продолжил сигналить при появлении следующего сигнала? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 5 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2015 Sany2912 >:dОткуда-ж мне знать какие Вы условия рассматриваете? и индюки планируете использовать?Для исключения дребезга сигнала берут пересечение линий по закрытию бара + добавляют ещё другие индюки и в комплексе получается что-то... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 7 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 мая, 2015 Здравствуйте. По уроку 7 непонятки есть. SNAG-15050309554300.pngSNAG-15050309561600.png Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 мая, 2015 Здравствуйте. По уроку 7 непонятки есть.Вы ищите телепатов? Пишите по-существу, код приложите, а не картинки. Времени нет ребусы разгадывать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
nct21 Опубликовано 7 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 мая, 2015 подскажите, пожалуйста, как переместить значок (смайлик) советника, который появляется в правом верхнем углу, чуть-чуть ниже? Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 7 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 мая, 2015 Привет всем!Возник такой вопрос:В журнале обнаружил записи о том, что счет теряет коннект с ДЦ (VPS).Будут ли обнуляться статические переменные в таких случаях или только при перезагрузке терминала?По логике не должны конечно.Часто ли возникают такие косяки у VPS-провайдеров и есть ли способы их избежать?Пинг до сервера тоже не маленький, под 200ms. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 7 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 мая, 2015 Здравствуйте. По уроку 7 непонятки есть.Вы ищите телепатов? Пишите по-существу, код приложите, а не картинки. Времени нет ребусы разгадывать. Спойлер //+------------------------------------------------------------------+//| сетка пробная.mq4 |//| Copyright 2015, MetaQuotes Software Corp. |//| //+------------------------------------------------------------------+#property copyright "Copyright 2015, MetaQuotes Software Corp."#property link #property version "1.00"#property strictextern double Lots = 0.1;extern int TekeProfit = 30;extern int Step = 40;extern int Slippage = 3;extern int Magic = 1234;extern int RsiPeriod = 7;extern string comment = "получается"; int ticket, otype ; double rsi1, rsi2, TP, price;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() { if(Digits == 3 || Digits == 5) { TekeProfit *= 10; Step *= 10; } return(0); }//+------------------------------------------------------------------+//| Expert tick function выставляем первый ордер по индекатору iRSI ,определяемся в какую сторону будем открывать ордера |//+------------------------------------------------------------------+int start(){ rsi1= iRSI(Symbol(),0,RsiPeriod,PRICE_CLOSE,1); //--- вычисляем период входа по первой свече rsi2= iRSI(Symbol(),0,RsiPeriod,PRICE_CLOSE,2); //--- вычисляем период входа по второй свече//--- проверяем есть ли открытые ордера цена в данный момент имеет значение 0 ,1 свеча выше цены значит покупки//--- 2 свеча ниже цены значит продажи if (CountTredes() == 0 && rsi1 > rsi2 ;//--- если нет открытых ордеров и rsi1 > rsi2 то мы входим в покупку { // Покупка ticket = OrderSend (Symbol(),OP_BUY, Lots, Ask, Slippage,0,0,comment,Magic,0,Blue);// покупка if ( OrderSelect( ticked, SELECT_BY_TICKET ,MODE_TRADES)) // выбираем ордер из списка ордеров { TP = NormalizeDouble(Ask + TekeProfit * Point,Digits); // нормализуем тейк профит OrderModify(ticket,OrderOpenPrice(),0,TP,0,Blue);// } } else if (CountTredes() == 0 && rsi1 { // Продажа ticket = OrderSend (Symbol(),OP_SELL, Lots, Bid, Slippage,0,0,comment,Magic,0,Red);// покупка if ( OrderSelect( ticked, SELECT_BY_TICKET ,MODE_TRADES)) // выбираем ордер из списка ордеров { TP = NormalizeDouble(Bid - TekeProfit * Point,Digits); // нормализуем тейк профит OrderModify(ticket,OrderOpenPrice(),0,TP,0,Red); } } if (CountTredes() > 0) // проверяем есть ли уже ордера в рынке, далее необходимо выбрать последний ордер его тип { // создаем переменную otype // цена последнего ордера на покупку otype = FindLastOrderType(); //вычисляем тип последнего ордера if (otype == OP_BUY) { price = FindLastBuyPrice(); // if ((price - Ask )/Point >= Step) // проверяем отступила ли цена от последнего ордера на степ для выставления следущего ордера { OrderSend (Symbol, OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Magic, 0, Blue); // открываем следующий ордер ModifyOrders();// модифицируем тейк всех ордеров } } else if (otype == OP_SELL) { // цена последнего ордера на продажу price = FindLastSellPrice();// if (( Bid - price)/Point >= Step) // проверяем отступила ли цена от последнего ордера на степ для выставления следущего ордера { OrderSend (Symbol, OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0, Red); // открываем следующий ордер ModifyOrders();// модифицируем тейк всех ордеров } } return(0); } //+------------------------------------------------------------------+ // пишем функцию модификации тейк профита она небудет возвращать пораметры поэтому присваиваем ей тип voidvoid ModifyOrders(){ double avg = 0; // переменную обьявляем для средней цены int count = 0; // и переменная count для количиства ордеров имеющихся for(int i = OrdersTotal() -1; i>=0; i--) //пересчитываем ордера { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES ))// выбираем ордер { if(OrderMagicNumber() == Magic && OrderSymbol() == Symbol())// проверяем наш ли это ордер { if (OrderType() == OP_BUY || OP_SELL)// проверяем тип ордера { avg += OrderOpenPrice(); // выщитывем среднию цену всех открытых ордеров на OP_BUY или OP_SELL count ++ ; // считаем количество наших ордеров } } } } // выщитываем среднюю цену открытых ордеров ,все сложеные цены разделим на количество ордеров avg = NormalizeDouble(avg / count,Digits) //--- перебераем ордера в цикле и выставляем им ТР for( i = OrdersTotal() -1; i>=0; i--) //пересчитываем ордера { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES ))// выбираем ордер { if(OrderMagicNumber() == Magic && OrderSymbol() == Symbol())// проверяем наш ли это ордер { if (OrderType() == OP_BUY )// проверяем тип ордера { TP = NormalizeDouble(avg + TakeProfit * Point, Digits); // выставляем ТР OP_BUY ордерам OrderModify(OrderTicket(), OrderOpenPrice(), 0, TP, 0, Yellow);// модифицируем ордера и выставляем ТР ордерам } else if (OrderType() == OP_SELL)// проверяем тип ордера { TP = NormalizeDouble(avg - TakeProfit * Point, Digits); // выставляем ТР OP_SELL ордерам OrderModify(OrderTicket(), OrderOpenPrice(), 0, TP, 0, Yellow);// модифицируем ордера и выставляем ТР ордерам } } } } } //+------------------------------------------------------------------+//--- описываем количество открытых ордеров в рынке (проверяем есть ли открытые ордера) int CountTredes() { int count = 0; //--- обьявляем переменную count присваеваем ей значение 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 || OrderType() == OP_SELL) //--- проверяем рыночные ордера count++; // перещитаем их на единичку } } } return(count); //--- возврашаем значение count на 0 }//+------------------------------------------------------------------+ int FindLastOrderType() // пишем функцию проверки какой ордер выставлен в данный момент в рынке OP_BUY или OP_SELL{ int oticket, ticketnumber = 0, OType; // добовляем переменные для поиска наивышего тикета for (int i = OrdersTotal() -1; i>=0; i--)// выщитываем и находим последний ордер { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // Выбирает ордер для дальнейшей работы с ним. { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) //--- проверяем наш ли это ордер { oticket = OrderTicket();// переменная = ордер тикету.(OrderTicket) Возвращает номер тикета текущего выбранного ордера. if (oticket > ticketnumber)// ищем самый старший тикет а раз oticket > ticketnumber ,а ticketnumber = 0 . то { ticketnumber = oticket; // OType = OrderType(); // переменная OType = типу нашего ордера } } } } return(OType);} //+------------------------------------------------------------------+// пишем функцию проверки ордера по какой цене он куплен//+------------------------------------------------------------------+ double FindLastBuyPrice() // пишем функцию проверки по какой цене куплен последний ордер{ int oticket, ticketnumber = 0; // добовляем переменные для поиска цены последнего ордера double oprice; for (int i = OrdersTotal() -1; i>=0; i--)// выщитываем и находим последний ордер { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // Выбирает ордер для дальнейшей работы с ним. { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY) //--- проверяем наш ли это ордер и OrderType является ордером на покупку OP_BUY { oticket = OrderTicket();// переменная = ордер тикету.(OrderTicket) Возвращает номер тикета текущего выбранного ордера. if (oticket > ticketnumber)// ищем самый старший тикет а раз oticket > ticketnumber ,а ticketnumber = 0 . то { ticketnumber = oticket; // oprice = OrderOpenPrice(); // цена последнего ордера по которой был открыт ордер } } } } return(oprice);} //+------------------------------------------------------------------+// пишем функцию проверки ордера по какой цене он продан//+------------------------------------------------------------------+ double FindLastSellPrice() // пишем функцию проверки по какой цене куплен последний ордер { int oticket, ticketnumber = 0; // добовляем переменные для поиска цены последнего ордера double oprice; for (int i = OrdersTotal() -1; i>=0; i--)// выщитываем и находим последний ордер { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // Выбирает ордер для дальнейшей работы с ним. { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL) //--- проверяем наш ли это ордер и OrderType является ордером на покупку OP_BUY { oticket = OrderTicket();// переменная = ордер тикету.(OrderTicket) Возвращает номер тикета текущего выбранного ордера. if (oticket > ticketnumber)// ищем самый старший тикет а раз oticket > ticketnumber ,а ticketnumber = 0 . то { ticketnumber = oticket; // oprice = OrderOpenPrice(); // цена последнего ордера по которой был открыт ордер } } } } return(oprice); } Пожалуйста тут код полностью 7 урока сенсея я только его когда разбирал описал что мы делаем, я предпологаю ошибка из - за обновления билда , но возможно я неправ. Изменено 7 мая, 2015 пользователем Pavel888 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 мая, 2015 Здравствуйте. По уроку 7 непонятки есть.Вы ищите телепатов? Пишите по-существу, код приложите, а не картинки. Времени нет ребусы разгадывать. Пожалуйста тут код полностью 7 урока сенсея я только его когда разбирал описал что мы делаем, я предпологаю ошибка из - за обновления билда , но возможно я неправ. Вы неправы. Куча ошибок из-за Вашей не внимательности.Даже не знаю что делать... Ладно, вот исправленный код, но Вам нужно найти все свои ошибки и проанализировать (в качестве домашнего задания).Исправьте свой пост - код выкладывайте в виде файла или под спойлером._урок7.mq4 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
nct21 Опубликовано 7 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 мая, 2015 подскажите, пожалуйста, как переместить значок (смайлик) советника, который появляется в правом верхнем углу, чуть-чуть ниже? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 мая, 2015 oleguitar При потере связи ничего с совой не происходит, тиков нет - работы нет. Спит.Переменные обнуляются (переинициализируются) только если меняете настройки совы.Проблемы с ВПС - меняй ВПС. У меня на ВПС за 2+ года была пара заморочек, да и то - плановых (предупреждали). Даже терминалы месяцами не перегружаю.nct21 имхо ни как не переместите. не пробовал - никогда не мешало... Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 7 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 мая, 2015 У меня форекс VPS самый дешевый, т к мне одного терминала достаточно покаА какие нормальные конторы еще есть? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2015 oleguitar здесь тема ВПС оффтоп. Почитай отзывы в соответствующей ветке. я плачу 100$ / год и проблем практически нет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
nct21 Опубликовано 8 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2015 дело в том, что у меня на графике есть индикатор "часы", он тоже отображается в правом верхнем углу. В нем нет настроек никаких, кроме цвета. Получается что иконка советника с надписью накладывается на часы и я не вижу ни часов, ни смайлика! Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2015 nct21 мы все тут уже поняли Вашу проблему. Поменяйте часы, ну или метатрейдер... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 10 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 мая, 2015 Подскажите что означает восклицательный знак в коде , просматриваю у одного програмера кода он часто их ставитif (!DrawInfo) return; if (!OrderModify(OrderTicket(),OOP,SL,0,0,White)) Print("Error if (!IsTradeAllowed()) Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 10 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 мая, 2015 Подскажите что означает восклицательный знак в коде Dron15 если Вы не научитесь работать с документацией, то не станете программистом. Читай 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 10 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 мая, 2015 Спасибо я просто только начал еще незнаю где что находится , обязательно прочту. Ссылка на сообщение Поделиться на другие сайты More sharing options...
fintech Опубликовано 11 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 мая, 2015 Подскажите, как написать Функцию на мкл4:double FindLastProfit() возвращает OrderProfit() (торговый результат) последнего, уже закрытого ордера., чтобы узнать результат предыдущей сделки для кода робота. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 11 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 мая, 2015 код робота - это мэджик?Хотите посмотреть результат 2-х последних закрытых ордеров, ранее открытых ботом? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 11 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 мая, 2015 Самый простой вариант, это когда ордера открыты сохранять их профит, а когда закрылись его анализировать.Ведь всё-равно пока ордера открыты Вы их пересчитываете, ну вот туда и сохранение профита вставьте. Ссылка на сообщение Поделиться на другие сайты More sharing options...
fintech Опубликовано 12 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 мая, 2015 код робота - это мэджик?Хотите посмотреть результат 2-х последних закрытых ордеров, ранее открытых ботом? Код робота - это вообще в любого робота вставлять чтобы можно было эту функцию. Выбор ордера по валютной паре и маджик, да.Т.е. например определяем результата последнего ордера, если ыбл профит - торгуем в этом же направлении (бай или селл открываем) если был убыток по сл - переворачиваем и торгуем в обратном направлении. Например так. Т.е. функцию определяющую в последней закрытой сделке была прибыль или убыток. Вот такую функцию хочу. Добавлено: 12-05-2015 06:28:17Самый простой вариант, это когда ордера открыты сохранять их профит, а когда закрылись его анализировать.Ведь всё-равно пока ордера открыты Вы их пересчитываете, ну вот туда и сохранение профита вставьте. А как это можно сделать ? ) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти