vitek01 Опубликовано 12 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 мая, 2016 vitek01 делай так: int R = (int) ( ( High[ 0 ] - Low[ 0 ] ) / _Point );Ух ты, спасибо 0ll, полазил по гугле по данной проблеме, одно фуфло, а тут 1 строчкой проблемку решили!чтобы привести к понятным пунктам для 5 знака зделал так int R = (int) ( ( ( High[ 0 ] - Low[ 0 ] ) / _Point ) ) / 10;конечно огругляет не в мою пользу, откидывая лишнее, но ясно и понятно. Изменено 12 мая, 2016 пользователем vitek01 Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 13 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2016 функция удаления ордеров для xNorDxкомментарии, я думаю, излишни. Спойлер // sd == 0 - бай/байлимит/байстоп// sd == 1 - селл/селллимит/селлстоп// sd == -1 - значение по умолчанию. удаляет и закрывает ВСЁvoid CloseAll(int sd = -1) { int ord=OrdersTotal(); double pr= 0; for(int i=ord-1; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS)) continue; if(OrderSymbol()!=Symbol()) continue; if(OrderMagicNumber()!=magic) continue; if((sd==0 && (OrderType()==2 || OrderType()==4)) || (sd==1 && (OrderType()==3 || OrderType()==5))||(sd==-1&&OrderType()>1)) { int k=10; while(k>0) { if(OrderDelete(OrderTicket())) break; Sleep(50); k--; } continue; } if(OrderType()==sd || (sd==-1&& OrderType() { int k=10; while(k>10) { RefreshRates(); if(OrderType()==0) pr=Bid; if(OrderType()==1) pr=Ask; if(OrderClose(OrderTicket(),OrderLots(),pr,30)) break; k--; Sleep(50); } } } } Изменено 13 мая, 2016 пользователем dermitay 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SVS696 Опубликовано 13 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2016 Добрый день, можно ли как-нибудь понять почему индикатор рисующий пивоты (DailyPivot_ind2) выдает при перезагрузке TF разные результаты, а советник по тем же (за малым исключением которые касаются тупо выбора предыдущего бара) формулам выдает 1 стабильный вариант который вплоть до 10+ пунктов отличается от индюка? Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 13 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2016 Добрый день, можно ли как-нибудь понять почему индикатор рисующий пивоты (DailyPivot_ind2) выдает при перезагрузке TF разные результаты, а советник по тем же (за малым исключением которые касаются тупо выбора предыдущего бара) формулам выдает 1 стабильный вариант который вплоть до 10+ пунктов отличается от индюка? потомучто скорее всего в индюке используется настройка сдвига GMT(), из-за чего в коде используется не простое обращение к предыдущему дню, наподобие iHigh(Symbol(),PERIOD_D1,1), а идет подсчет баров, и именно из-за этого подсчета и возникают "сдвиги", то есть конец дня на разных ТФ из-за ограничения в количестве баров попадает на разные временные промежутки, и соответственно на разные цены хай/лоу. Ссылка на сообщение Поделиться на другие сайты More sharing options...
SVS696 Опубликовано 13 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2016 Добрый день, можно ли как-нибудь понять почему индикатор рисующий пивоты (DailyPivot_ind2) выдает при перезагрузке TF разные результаты, а советник по тем же (за малым исключением которые касаются тупо выбора предыдущего бара) формулам выдает 1 стабильный вариант который вплоть до 10+ пунктов отличается от индюка? потомучто скорее всего в индюке используется настройка сдвига GMT(), из-за чего в коде используется не простое обращение к предыдущему дню, наподобие iHigh(Symbol(),PERIOD_D1,1), а идет подсчет баров, и именно из-за этого подсчета и возникают "сдвиги", то есть конец дня на разных ТФ из-за ограничения в количестве баров попадает на разные временные промежутки, и соответственно на разные цены хай/лоу. Так и в советнике сдвиг по GMT Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2016 функция удаления ордеров для xNorDxкомментарии, я думаю, излишни.Прости, но хочу напомнить о таком способе сортировки ордеров, может и не в тему... просто такие конструкции тоску наводят: if((sd==0 && (OrderType()==2 || OrderType()==4)) || (sd==1 && (OrderType()==3 || OrderType()==5))||(sd==-1&&OrderType()>1)) ПС: прошу прощения - ошибочка!Код с битовыми флагами пробовал наспех. нужны уникальные коды флагов ( 1-бит на флаг):enum ORD_TYPE { buy = 1, sell = 2, buy_lim = 4, sell_lim = 8, buy_stop = 16, sell_stop= 32 };т.е. например sell_lim = MathPow(2,OP_SELLLIMIT) = 2 ^ 3 = 8;или через массив: int arrType[] = {1,2,4,8,16,32}; // массив флагов чуть поменяется код и вызов:void orderDelete( int flag_type ){// здесь цикл по ордерам if ( ( flag_type & MathPow(2,OrderType( ) ) ) > 0 ) .... ; // здесь определяем, что ордер задан if ( ( flag_type & arrType[ OrderType( ) ] ) > 0 ) .... ; // то-же только через массив while(k>0) {... // цикл попыток закрытия if ( OrderType() > 1 ) // здесь выбираем способ Delete || Close}вызов функции: orderDelete( sell | sell_lim | sell_stop ); // в вызове используем не стандартные константы, а свои orderDelete( arrType[OP_SELL] | arrType[OP_SELLLIMIT] | arrType[OP_SELLSTOP] ); // через массивкод писал для образовательных целей - многие вообще не знают как применять побитовые операции... Изменено 13 мая, 2016 пользователем 0ll 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
The NorD Опубликовано 13 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2016 Добрый день. Имеется функция подсчета количества убыточных ордеров подряд (в дальнейшем использую для открытия и модификации позиций).Возможно ли сделать так, чтобы счетчик обнулялся на следующий день? Тоесть в расчет брались именно ордера за сегодняшний день (либо каким нибудь другим образом). Спойлер int consecutive_loss;{ int counter = 0; datetime opentime[]; double profit[]; for(int index=0;index { if(!OrderSelect(index,SELECT_BY_POS,MODE_HISTORY) ) continue; else if(OrderMagicNumber() == MAGIC && OrderSymbol() == Symbol() && OrderType()==OP_BUY|| OrderMagicNumber() == MAGIC && OrderSymbol() == Symbol() && OrderType()==OP_SELL) { counter++ ; ArrayResize( opentime, counter); ArrayResize( profit, counter); opentime[counter -1]=OrderOpenTime(); profit[counter -1]=OrderProfit(); } } int orderarray []; ArrayResize( orderarray, counter); datetime copyopentime[]; ArrayResize( copyopentime, counter); ArrayCopy(copyopentime,opentime); for(int x=counter-1;x>=0;x--) { int latest = ArrayMaximum(copyopentime,WHOLE_ARRAY,0) ; orderarray[ x ] =latest; copyopentime[latest] = 0; } for(int x=counter-1;x>=0;x--) { int pos = orderarray[ x ]; if(profit[pos] consecutive_loss++; else break; //Print(" Profit = ",profit[pos]) ; }} 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2016 xNorDx так Вы считайте только сегодняшние ордера и при переходе даты счётчик сам обнулится. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
The NorD Опубликовано 13 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2016 xNorDx так Вы считайте только сегодняшние ордера и при переходе даты счётчик сам обнулится. Никак не могу сообразить как это реализовать кодом. Как то можно сделать выборку из истории именно за текущий день? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2016 Конечно можно, вообще любой каприз реализуем. Используйте функции Day(); и TimeDay( OrderCloseTime() )если равны - считаем, нет - пропускаем. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
mobidik Опубликовано 13 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 мая, 2016 xNorDx так Вы считайте только сегодняшние ордера и при переходе даты счётчик сам обнулится. Никак не могу сообразить как это реализовать кодом. Как то можно сделать выборку из истории именно за текущий день? Можно так, для закрытых сегодня ордеров: Спойлер datetime dt=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE)); int i,k=OrdersHistoryTotal(); for(i=0; i { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(dt { // Здесь уже ордера только за сегодня. } } } Ссылка на сообщение Поделиться на другие сайты More sharing options...
boovood Опубликовано 15 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 мая, 2016 Помогите пожалуйста кто может.Написал советник но он не выставляет на тестере вторые отложные ордера как надо один раз. пробовал и OP_BUYLIMIT и OP+BUYSTOP селы то же самое, но когда решает выставлять гад выставляет кучу!по стратегии надо выставить в одну сторону один ордер затем в эту же сторону но на шаг лося. test2+sl.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
NightTraider Опубликовано 15 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 мая, 2016 я вот тоже хотел в стандартный индикатор машки цвета добавить и обнаружил, что там нет отображения вкладки выбора цены, уровней значений. т.е вот этих значений на скрине стрелкой показалНе могу нигде найти код, который нужно добавить в индикатор, чтобы отображались вкладки выбора цены и уровни в индикаторе. Screenshot-1604.jpg Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vasiliy Pupkin Опубликовано 16 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 мая, 2016 Скорректировал комплексный советник (из 21 индикатора) , убрав ненужные мне индикаторы и добавив свой - SuperSignalChannel (сократил название до SSCh для простоты). В результате "родные" индикаторы работают, а при подключении SSCh советник не фурычит. После компиляции советник ошибок не выдает, но при тесте в тестере результата нет, хотя ошибок тоже нет, да и в режиме визуализации показывает SSCh. В чем может быть косяк? SSCh.mq4MyComplexExpert2.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
владимир-лока Опубликовано 16 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 мая, 2016 Здравствуйте. При написании советника возникла проблема, которую решить не знаю как. В советнике используются две сетки ордеров по sell и buy, отличающиеся суммарной величиной лота. В обоих сериях необходимо установить одинаковую рассчитанную величину ТР. Решение проблемы свел к модельной более простой задаче. Простейший советник открывает ордер sell и модифицирует его 2 способами. В первом случае ТР выставляется выше текущей цены и модификация почему-то не проходит-дает ошибку 130, во втором ниже текущей цены - здесь модифицируется нормально. Ведь ТР в ручном ордере я могу выставить и выше и ниже текущей цены, лишь бы не попасть в область стоп-левела, почему при автоматической модификации это не так? Помогите, кто знает. Советник модельной задачи во вложении проверка_модификации-тики.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 17 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 мая, 2016 Простейший советник открывает ордер sell и модифицирует его 2 способами. В первом случае ТР выставляется выше текущей цены и модификация почему-то не проходит-дает ошибку 130, во втором ниже текущей цены - здесь модифицируется нормально. Ведь ТР в ручном ордере я могу выставить и выше и ниже текущей цены, лишь бы не попасть в область стоп-левела, почему при автоматической модификации это не так? Помогите, кто знает. Советник модельной задачи во вложении На ордер селл невозможно поставить ТП выше текущей цены. Откройте в метатрейдере (на демо счете) ордер селл и попробуйте модифицировать как вы пишете. Ничего не выйдет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
владимир-лока Опубликовано 17 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 мая, 2016 Спасибо, называется бился со стенкой, я сегодня сам попробовал и убедился в этом,хотел отписаться, но меня опередили, значит к сериям надо применять SL и ТР. С уважением Владимир Ссылка на сообщение Поделиться на другие сайты More sharing options...
chww Опубликовано 17 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 мая, 2016 Здравствуйте! Учусь программированию. Изучил урок по трейлингстопу. Написал первый советник ( блин комом).Работает не правильно. Помогите разобратся.При условиях на покупку, открывает продажи. PolyVelocity.mq4Bablokosyaka.mq4Chandelierstops.mq4 Изменено 18 мая, 2016 пользователем chww Ссылка на сообщение Поделиться на другие сайты More sharing options...
Svarog_AZh Опубликовано 17 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 мая, 2016 Помогите разобраться.Начал изучать программирование в MQL4. Скачал видео урок - смотрю, повторяю.И вот возникла проблема. Написал код (как в видео): int ticket; ticket = OrderSend("EURUSD", OP_BUY, Ask, 0.1, 3, 0, 0, "", 111, 0, Blue); if(ticket { Print("Ошибка открытия ордера на покупку!"); } else { Print("Ордер на покупку успешно открыт!"); }При компиляции ошибок нет. Но когда начинаю прогон, то в журнале вылезает ошибка "OrderSend error 138", и ордера не открываются. Как сказано в справке - это означает, что запрашиваемые цены устарели. И что с этим делать? Добавлено: 18-05-2016 14:38:35Помогите разобраться.Начал изучать программирование в MQL4. Скачал видео урок - смотрю, повторяю.И вот возникла проблема. Написал код (как в видео): int ticket; ticket = OrderSend("EURUSD", OP_BUY, Ask, 0.1, 3, 0, 0, "", 111, 0, Blue); if(ticket { Print("Ошибка открытия ордера на покупку!"); } else { Print("Ордер на покупку успешно открыт!"); }При компиляции ошибок нет. Но когда начинаю прогон, то в журнале вылезает ошибка "OrderSend error 138", и ордера не открываются. Как сказано в справке - это означает, что запрашиваемые цены устарели. И что с этим делать? Нашёл косяк. "Ask" и "0.1" надо было поменять местами. Изменено 18 мая, 2016 пользователем Svarog_AZh 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
evgeniysp Опубликовано 19 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 мая, 2016 Здравствуйте, написал свой первый советник, но никак не могу в нем поставить запрет на торговлю в понедельник. Цитата int DayOfWeek;void OnTick(){ if (DayOfWeek()==1) return; //Если понедельник, то в начало. ..... //Действие, если другие дни.} Пишет: 'DayOfWeek' - ambiguous call to overloaded function with the same parameters Что я не так делаю? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 19 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 мая, 2016 Убери int DayOfWeek; над void OnTick() Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 21 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 мая, 2016 Тестер стратегий видит только 1000 баров историй, а мне нужно больше, чтобы уровни были коректными, если данных мало, то уровни кривые получаются. Как можно увеличить количество баров в тестере стратегий? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 мая, 2016 vitek01 Попробуйте в МТ - Сервис - Настройки - Графики - Макс.баров истории Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 21 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 мая, 2016 vitek01 Попробуйте в МТ - Сервис - Настройки - Графики - Макс.баров истории Не пройдет, возмите в тестере стратегий любую дату, прям любую, дальше назад 4 дней(На таймфрейме М5) он не отобразит. Также и с реаальной датой, советник видит только 1000 баров, для 5 минуток это 4 дня. И для каждого тайма 1000 баров, хоть месячные. А у меня цикл for, 1000 баров ему маловато! Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 мая, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 мая, 2016 у меня всё нормально с тестером. Кол-во баров в окне настраивали? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти