DreamWorks Опубликовано 18 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 февраля, 2017 Цитата Исправлено :). Я конечно извиняюсь, но после такой правки индикатор не только посторонние объекты не будет удалять, но и сам себя :) Думаю это не очень удобно. Вот такой вариант будет правильней все-же.... MultiInstrument.mq4 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Скобарь Опубликовано 19 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 февраля, 2017 Цитата Исправлено :). Я конечно извиняюсь, но после такой правки индикатор не только посторонние объекты не будет удалять, но и сам себя :) Думаю это не очень удобно. Вот такой вариант будет правильней все-же.... Огромное СПАСИБО!!! Работает отлично!Добавлено: 19-02-2017 08:11:44 Уважаемые специалисты. При переключении ТФ, индикатор стирает построенные мной наклонные линии /горизонтальные не трогает/. Большая просьба - устраните пожалуйста этот недостаток. Исправлено :). Спасибо за труд! Но он не стирает ни сое,не мое... Изменено 19 февраля, 2017 пользователем Скобарь 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 19 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 февраля, 2017 Подскажите пожалуйста как научить советник определять, что наступил новый день (не на Д1) и выполнить такое условие:если наступил новый день и цена побывала выше/ниже заданного уровня, то сегодня не торгуем? Ссылка на сообщение Поделиться на другие сайты More sharing options...
viktor004 Опубликовано 19 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 февраля, 2017 Индикатор Williams percent Range, надо чтобы сова продавала на ВЫХОДЕ из зоны перекупленности и покупала на ВЫХОДЕ из перепроданности. Хотя бы логически как это сделать, не понимаю. Ну и если не лень то кодом) Сваял на скорую руку :). Извините, вы сделали не то( Кстати , то что вы сделали - это даже я смогу:D). Спойлер На картинке он открывает просто в состояние перепроданности, а мне надо было при выходе из нее .Спасибо за сову, я немного её допилил. Теперь работает как надо.WilliamsPercentRange_BOT.mq4 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 19 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 февраля, 2017 Подскажите пожалуйста как научить советник определять, что наступил новый день (не на Д1) и выполнить такое условие:если наступил новый день и цена побывала выше/ниже заданного уровня, то сегодня не торгуем? Запоминайте сегодняшний день какого-либо периода (недели, месяца, года), а потом проверяйте равен ли текущий день периода тому, что запомнили. Если не равен, значит новый день настал. Ну а дальше смотрите минимум/максиму цены за интересующий период и проверяйте была она там где надо/не надо, ну и дальше либо разрешайте торговлю, либо запрещайте. После всех процедур не забудьте снова запомнить текущий день периода для следующей идентификации наступления нового дня. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 22 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 февраля, 2017 Уважаемые програмисты, как передавать свет (color) из эксперта в индикатор? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Bolshakov Опубликовано 22 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 февраля, 2017 Приветствую Всех.Правильно я написал структуру?//кол-во ордеров по типамstruct TQtyOrder{ int ArrOrd[6];//6 типов ордеров int QtyTotal; //всего ордеров};//ордерstruct TOrder{ string Comm; //комментарий double OpenPrice; //курс открытия ордера double StopLoss; //стоп лосс double TakeProfit; //тейк профит double Lots; //кол-во лотов double Profit; //текущий профит int Ticket; //номер ордера int Type; //тип ордера int MagicNumber;//магическое число};//ордераstruct TAllOrder{ TOrder ArrOrder[31];//все ордера максимум 31 TQtyOrder QtyOrder; //кол-во ордеров по типам};Нужно выравнивания элементов структур с помощью #pragma pack(1) ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
factorialis Опубликовано 22 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 февраля, 2017 Сходу структуры объявлены правильно. У Вас что-то не работает? в связи с чем вопрос? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ruslan S. Опубликовано 24 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 февраля, 2017 Приветствую Вас господа. Прошу помощи в программировании, как правильно написать условие в советнике, точнее проверку на «срабатывание» отложенного ордера. Алгоритм следующий, выставляются отложенные ордера. При активировании заданной переменной MaxTrades количество ордеров и более одинакового направления, для этой группы ордеров выставляются ТП и СЛ. Я написал так:.........void OnTick() { int countBUY=CountOrders(OP_BUY); // количество открытых ордеров бай int countSELL=CountOrders(OP_SELL); // количество открытых ордеров селл if(countBUY>=MaxTrades) // проверка на количество открытых ордеров бай { SetTakeProfitBuy(); // выставляем для группы ордеров бай ТП и СЛ } if(countSELL>=MaxTrades) // проверка на количество открытых ордеров селл { SetTakeProfitSell(); // выставляем для группы ордеров селл ТП и СЛ }………Соответственно, программа на каждом тике проходит проверку, забивает логи ошибкой 1 (Нет ошибки, но результат неизвестен). Подскажите как это можно исправить?Благодарю за Ваше внимание и время! Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 24 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 февраля, 2017 Ruslan S., в функциях SetTakeProfitBuy() и SetTakeProfitSell() - OrderModify пытается изменить уже установленные значения такими же значениями, нормализуйте цены в операциях сравнения. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ruslan S. Опубликовано 24 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 февраля, 2017 SilverKZ Так в этом то и была просьба о помощи. Если можно подробней. Я не программист, только пытаюсь осваивать эту чудо-магию.На примере этой переменной://+------------------------------------------------------------------+void SetTakeProfitBuy() { double avgPrice = 0; double sumLots = 0; for(int order=OrdersTotal()-1; order>=0; order--) { returnvalue=OrderSelect(order,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY) { avgPrice += OrderTakeProfit()*OrderLots(); sumLots += OrderLots(); } } double newTakeProfit=avgPrice/sumLots; newTakeProfit=NormalizeDouble(newTakeProfit,Digits); for(order=OrdersTotal()-1; order>=0; order--) { returnvalue=OrderSelect(order,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY) { returnvalue=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),newTakeProfit,0,clrYellow); } } }//+------------------------------------------------------------------+Если возможно, покажите на пальцах пожалуйста, Где? и Что? и Как надо? Изменено 24 февраля, 2017 пользователем Ruslan S. Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 25 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 февраля, 2017 //+------------------------------------------------------------------+void SetTakeProfitBuy() { double avgPrice = 0; double sumLots = 0; for(int order=OrdersTotal()-1; order>=0; order--) { returnvalue=OrderSelect(order,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY) { avgPrice += OrderTakeProfit()*OrderLots(); sumLots += OrderLots(); } } double newTakeProfit=avgPrice/sumLots; newTakeProfit=NormalizeDouble(newTakeProfit,Digits); for(order=OrdersTotal()-1; order>=0; order--) { returnvalue=OrderSelect(order,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY && OrderTakeProfit()!=newTakeProfit) { returnvalue=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),newTakeProfit,0,clrYellow); } } }//+------------------------------------------------------------------+ Устранение ошибки 1. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 февраля, 2017 Ruslan S. Вам бы алгоритм до конца продумать... Количество ордеров меньше не становится и на каждом тике сова ходит ТП и СЛ устанавливать заново, может ввести переменную, что ТПСЛ выставлен и больше не выставлять? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ruslan S. Опубликовано 25 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 февраля, 2017 0ll, согласен, что сова будет на каждом тике сравнивать ТП, в данном случае мы избавляемся только от ошибки. В моем алгоритме это такая сетка и одного ТП и СЛ не получается, они будут плавающие. В лучшем варианте конечно же надо придумать как определить что сработал отложенный ордер. Но как это исполнить - незнаю. Если у кого еще предложения есть - было бы замечательно. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 февраля, 2017 Нужно выравнивания элементов структур с помощью #pragma pack(1) ?Только если будете передавать во внешнюю длл. Но тогда строку надо исключать... Вообще со строками геморрой я не включаю коммент в структуру ордера, а использую отдельной переменной, это связано с простотой присваивания структур. Пример:struct ORDER{ int ticket, type, magic; datetime time, timeClose, timeExpir; double price, prcClose, lots, PL, SL, TP;};ORDER ord, o0 = {-1,-1,0,0,0,0,0,0,0,0,0,0}; // o0 - пустая структура для сброса параметров.ord = o0;Если будет строка, то так просто поставить = не получится. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 февраля, 2017 придумать как определить что сработал отложенный ордертолько рыночные считать и сравнивать, типа было 5 стало 6 - значит сработала отложка.если шаг сетки позволяет, то пропускать тики если цена топчется на месте. Типа:bool isPriceChange(int dPrice){ static double last_PR = Bid; if ( MathAbs( last_PR - Bid ) last_PR = Bid; return(true);}задаёте dPrice = 20(пипс) и сова пропустит все тики внутри этой дельты - терминал не так загружен будет. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ruslan S. Опубликовано 25 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 февраля, 2017 0ll, для меня это очень сложно :-? Определенного шага как такового нет. Его определяет сам рынок, вернее сама цена и у каждой отложки свой тейк. А при срабатывании отложек они формируют сетку, и я их пытаюсь упорядочить в общий ТП.спасибо!Добавлено: 25-02-2017 12:42:18SilverKZ, спасибо большое за помощь! Изменено 25 февраля, 2017 пользователем Ruslan S. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alexandrkas Опубликовано 25 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 февраля, 2017 Цитата А при срабатывании отложек они формируют сетку, и я их пытаюсь упорядочить в общий ТП. Тема называется Обучение языку MQL4 и в первом посте есть курс, который можно скачать и изучить. Если его изучить многие вопросы сами собой отпадают. Ruslan S. если я правильно вас понял, то решение вашей проблемы подробно разбирается в 4 уроке курса "Создаем советника на мартингейле". В нем Сергей ака xbms объясняет как сделать тейк и стоп для сетки ордеров.Тейк для сетки выглядит примерно так (код взят из урока)://- функция модификации ордера (выставление тейка для сетки)void ModifyOrders(int otype){ double avg_price, order_lots=0; price=0; //- ищем в цикле последний открытый ордер for(int i=OrdersTotal()-1; i>=0; i--) { //- выбираем ордера if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { //- проверяем наш ли это ордер (по паре и меджику) if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { //- пересчитываем цену с учетом объемов price += OrderOpenPrice() * OrderLots(); //- считаем суммарный объем order_lots += OrderLots(); } } } //- вычисляем среднюю цену и приводи к нормальному виду avg_price = NormalizeDouble(price / order_lots, Digits); //- в зависимости от типа ордера вычисляем тейк if(otype == OP_BUY) tp = NormalizeDouble(avg_price + TakeProfit*Point, Digits); if(otype == OP_SELL) tp = NormalizeDouble(avg_price - TakeProfit*Point, Digits); //- модификация ордеров for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { //-модифицируем ордер if(OrderModify(OrderTicket(), OrderOpenPrice(), 0, tp, 0)) Print("Ордера успешно модифицированы"); else Print("Ошибка модификации ордеров"); } } }} Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ruslan S. Опубликовано 25 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 февраля, 2017 Alexandrkas, Вы не поняли моего вопроса. Все равно спасибо за Ваш ответ. Но! как выставить ТП и СЛ в сетке меня не интересовал, посмотрите выше, я указывал свой код ТП для сетки, который Вы мне процитировали из урока. Еще раз слова благодарности Господину SilverKZ за самое оптимальное решение возникшей у меня проблемы. Изменено 25 февраля, 2017 пользователем Ruslan S. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Bolshakov Опубликовано 26 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 февраля, 2017 Да, я все понял, спасибо...Только в книге по MQL написано, что сначала в структуре нужно объявлять большие данные, т.е.double = 8 байтdatetime, тоже 8 байта уже потомint = 4 байта...т.е. выравнивания элементов.или это касается только если я буду передавать во внешнюю dll?Нет вроде все пока работает, просто я хочу, что бы было все правильно и разных глюков с неправильной организацией структуры не возникало, которых потом очень сложно будет отловить.. Ссылка на сообщение Поделиться на другие сайты More sharing options...
noXeZ Опубликовано 26 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 февраля, 2017 Помогите добавить на панель кнопки переключения TF, так чтобы они могли в тестере переключать TF на графике. Если это возможно конечно, спасибо. Screenshot_12.pngTradePanel.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 27 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 февраля, 2017 Помогите добавить на панель кнопки переключения TF, так чтобы они могли в тестере переключать TF на графике. Если это возможно конечно, спасибо. В процессе тестирования невозможно менять ТФ. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 27 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 февраля, 2017 просто я хочу, что бы было все правильно и разных глюков с неправильной организацией структуры не возникало, которых потом очень сложно будет отловить..Есть разные представления о правильности... у структур нет никаких глюков с выравниванием ( если пользоваться внутри МТ ). ПС: я считаю не правильным создавать дублирующий массив данных ордеров, поддерживать его в актуальном состоянии - зачем? У МТ это нормально организовано и работает эффективно. имхо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 28 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 февраля, 2017 ПС: я считаю не правильным создавать дублирующий массив данных ордеров, поддерживать его в актуальном состоянии - зачем? У МТ это нормально организовано и работает эффективно. имхо. Ну это смотря какие задачи решаются. Порой, без объединения данных ордеров в массивах структур, сложно представить реализацию некоторых моментов. Вот недавно выполнял работу, так там одновременно в рынке бывало более 50 ордеров. При этом ордера объединялись в группы по 3 штуки по определенному признаку, т.е. были взаимосвязаны между собой. Плюс у каждого ордера индивидуальный трейлингстоп и еще всякие примочки. И как тут без массивов структур? Допустим можно было как-то увязывать ордера между собой магиками, комментариями и пр., а потом на каждом тике проводить выборку, группировать их, высчитывать где у каждого ордера сейчас д.б. стоплосс.... Но зачем? Если есть такая замечательная вещь как структура? 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 28 февраля, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 февраля, 2017 DreamWorks я знаю, что заказчики могут ставить совершенно фантастические ТЗ и там без особого учёта ордеров не обойтись. Когда пишу для себя, то принципиально стараюсь обходится без этого: проще стол - легче стул. :d 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти