diodio Опубликовано 13 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 августа, 2021 1 час назад, usver73 сказал: Нужно убедиться, что ордер с магиками 555 или 777 и нашим символом только один? Или нужно понять, что у нас в рынке всего один ордер? да, что он в рынке один именно, и с любым из этих магиков А в журнале написано: Close Position retry no: 5 Close Position retry no: 4 Close Position retry no: 3 Close Position retry no: 2 И это повторяется постоянно, как мне закрыть этот ордер??? У меня в рынке один ордер остается, он как страховочный идет с определенным магиком, его просто надо закрыть. Ошибок нет при проверке, возможно я как-то не так функцию написал что логическая ошибка получилась. Но выборку вроде делаю правильно. Изменено 13 августа, 2021 пользователем diodio Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 13 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 августа, 2021 51 минуту назад, diodio сказал: У меня в рынке один ордер остается, он как страховочный идет с определенным магиком, его просто надо закрыть. ну так убери проверку 1 час назад, usver73 сказал: if (counted == 1 && totalord == counted) напиши: if(OrdersTotal()==1) { for(....) } логика: если в рынке всего один ордер, то проверяем его на соответствие условию по символу/магику. Все. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
diodio Опубликовано 13 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 августа, 2021 50 минут назад, usver73 сказал: логика: если в рынке всего один ордер, то проверяем его на соответствие условию по символу/магику. Все. Вот так сделал: #define TRADE_RETRY_COUNT 4 ---------------------------------------------- void CloseOrder() { if(OrdersTotal() == 1) { for(int tempo=0; tempo<TRADE_RETRY_COUNT; tempo++) { if(OrderSelect(tempo,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol() == Symbol() && (OrderMagicNumber() == 777 || OrderMagicNumber() == 555)) { if(OrderType() == OP_BUY) bool buyb = OrderClose(OrderTicket(), OrderLots(), Bid, Slippage); if(OrderType() == OP_SELL) bool sells = OrderClose(OrderTicket(), OrderLots(), Ask, Slippage); } } } } } ... не закрыл. Может на реале проверить, тестер не закрывает. Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 13 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 августа, 2021 Напиши закрытие типа if(!OrderClose(...)) Print(GetLastError()); Если не закрывается, то будет ошибка 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vovan777 Опубликовано 22 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 августа, 2021 Добрый день. Не могу понять, почему у меня цикл не выполняет подсчет. К примеру нужно посчитать самый низкий Лоу за заданное количество свечей. Подскажите пожалуйста, почему у меня не вычисляется. Цикл не работает, или условие если не выполняется? Test.ex4 Test.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 22 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 августа, 2021 45 минут назад, Vovan777 сказал: Подскажите пожалуйста, почему у меня не вычисляется. Для поиска самого низкого лоу есть отдельная функция: https://docs.mql4.com/ru/series/ilowest В твоей же формуле не правильно поставлен знак < #property copyright "Vovan" #property link "https://www.mql5.com" #property version "1.00" #property strict extern int b = 100; //Кол-во баров double L = 100; void OnTick() { { for(int i = b + 2 ; i > 0 ; i--) //Берем последнее кол-во баров + 2 { if(iLow(NULL, 0, i) < L) //Если есть наименьший Лоу L = iLow(NULL, 0, i); //Запомнить этот Лоу } Comment(DoubleToStr(L, Digits)); L = 100; } } Изменено 22 августа, 2021 пользователем Rever27 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vovan777 Опубликовано 22 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 августа, 2021 1 час назад, Rever27 сказал: Для поиска самого низкого лоу есть отдельная функция: https://docs.mql4.com/ru/series/ilowest В твоей же формуле не правильно поставлен знак < #property copyright "Vovan" #property link "https://www.mql5.com" #property version "1.00" #property strict extern int b = 100; //Кол-во баров double L = 100; void OnTick() { { for(int i = b + 2 ; i > 0 ; i--) //Берем последнее кол-во баров + 2 { if(iLow(NULL, 0, i) < L) //Если есть наименьший Лоу L = iLow(NULL, 0, i); //Запомнить этот Лоу } Comment(DoubleToStr(L, Digits)); L = 100; } } Спасибо большое за ответ) Если все же возвращаться к моему коду, скажите пожалуйста, а какой именно знак у меня стоит не верно и почему. Потому что еще раз проверил - вроде бы все верно и логично... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 22 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 августа, 2021 7 часов назад, Vovan777 сказал: какой именно знак у меня стоит не верно и почему. Должно быть i > 0 Направление цикла от самой дальней свечи до самой новой при условии, что i > 0. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Евгений72 Опубликовано 28 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 августа, 2021 111.docx Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 28 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 августа, 2021 6 часов назад, Евгений72 сказал: 111.docx 128 \u043a\u0411 · 0 загрузок 10 минут- это не стандартный ТФ... Переменную timeframe нужно объявить как ENUM_TIMEFRAMES. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Евгений72 Опубликовано 28 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 августа, 2021 3 часа назад, usver73 сказал: 10 минут- это не стандартный ТФ... Переменную timeframe нужно объявить как ENUM_TIMEFRAMES. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Евгений72 Опубликовано 29 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 августа, 2021 Подскажите пожалуйста правильно ли я понимаю код советника: if (OrderSymbol() != Symbol() || (OrderMagicNumber() != MagicNumber&&OrderMagicNumber()!=0)) continue; "При наличии открытых ордеров другого инструмента или с другим магиком в терминале" - Советник ордера открывать не будет??? Заранее спасибо!!! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 29 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 августа, 2021 57 минут назад, Евгений72 сказал: Подскажите пожалуйста правильно ли я понимаю код советника: Это код подсчета ордеров, открытых данным советником или вручную. Если ордер открыт по текущему символу и он либо открыт советником с этим магиком, либо вручную, то он участвует в расчете. Твоя строчка пропускает все другие ордера и они не участвуют в расчете переменной count. На открытие ордеров эта функция не влияет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Евгений72 Опубликовано 30 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 августа, 2021 7 часов назад, Rever27 сказал: Это код подсчета ордеров, открытых данным советником или вручную. Если ордер открыт по текущему символу и он либо открыт советником с этим магиком, либо вручную, то он участвует в расчете. Твоя строчка пропускает все другие ордера и они не участвуют в расчете переменной count. На открытие ордеров эта функция не влияет. Спасибо Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 30 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 августа, 2021 22 минуты назад, Евгений72 сказал: Спасибо 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Евгений72 Опубликовано 30 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 августа, 2021 Доброе время суток уважаемые программисты. Помогите разобраться со смыслом кода сеточного советника. Вернее той части которая отвечает за расчет шага между ордерами. Настройки советника отвечающие за динамический шаг. Исходный код советника отвечающий за расчет динамического шага в зависимости от волатильности рынка. Чтобы разобраться самому я ввел промежуточную переменную Pip и комментарии. Также я хотел посмотреть как меняется результат от переменной TimeframesVolatility. Суть моего вопроса в том может ли разница массивах быть отрицательная. High[iHighest(NULL,TimeframesVolatility,MODE_HIGH,Glubina,1)]; Low[iLowest(NULL,TimeframesVolatility,MODE_LOW,Glubina,1)]; TimeframesVolatility = 60 мин; а оптимизирую о тестирую на 5 мин. А и 1 в конце это сдвиг 60мин; или 5 мин. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Евгений72 Опубликовано 30 августа, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 августа, 2021 if(OrdersTotal()==0) DontOpen=false; if (DynamicPips) { double hival=High[iHighest(NULL,TimeframesVolatility,MODE_HIGH,Glubina,1)]; // Находим максимум за выбранный период double loval=Low[iLowest(NULL,TimeframesVolatility,MODE_LOW,Glubina,1)]; // Находим минимум за выбранный период Pip=NormalizeDouble((hival-loval)/Point,0); PipStep=NormalizeDouble((hival-loval)/DEL/Point,0); // Разница между максимумом и минимумом if (PipStep<DefaultPips/DEL) PipStep = NormalizeDouble(DefaultPips/DEL,0); // Расчет PipStep if (PipStep>DefaultPips*DEL) PipStep = NormalizeDouble(DefaultPips*DEL,0); // Расчет PipStep Comment("hival: " + DoubleToStr(hival, 4) + "\n" + "loval: " + DoubleToStr(loval, 4) + "\n" + "Pip: " + DoubleToStr(Pip, 0) + "\n" + "PipStep: " + DoubleToStr(PipStep, 0)); } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Gamakiv Опубликовано 1 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 сентября, 2021 Доброго времени суток! Подскажите, возможно ли средсвами mql4 отправить письмо с вложением? Интересует отправка скриншота графика. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 1 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 сентября, 2021 2 часа назад, Gamakiv сказал: Доброго времени суток! Подскажите, возможно ли средсвами mql4 отправить письмо с вложением? Интересует отправка скриншота графика. Нет, только с использованием дополнительных танцев с бубном. Можешь почитать эту статью: https://www.mql5.com/ru/articles/6975 Я не стал разбираться в итоге, не хватает знаний по ООП. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Евгений72 Опубликовано 5 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 сентября, 2021 Подскажите пожалуйста какой смысл этого выражения if (timeprev == Time[0]) return; timeprev = Time[0]; Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 5 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 сентября, 2021 59 минут назад, Евгений72 сказал: Подскажите пожалуйста какой смысл этого выражения if (timeprev == Time[0]) return; timeprev = Time[0]; Это проверка на новую свечу. Если время свечи не изменилось, то прерывание функции Ссылка на сообщение Поделиться на другие сайты More sharing options...
Евгений72 Опубликовано 5 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 сентября, 2021 7 минут назад, usver73 сказал: Это проверка на новую свечу. Если время свечи не изменилось, то прерывание функции Какое преимущество эта проверка дает при написании кода Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 5 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 сентября, 2021 3 часа назад, Евгений72 сказал: Подскажите пожалуйста какой смысл этого выражения Совершать все последующие действие советника раз в выбранный таймфрейм, чтобы не делать расчеты каждый тик и не тормозить работу кода. ТФ зависит от того, какой он выбран на графике. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Евгений72 Опубликовано 5 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 сентября, 2021 Подскажите пожалуйста вот счетчик ордеров int CountTrade() { int 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); } Вопрос в том что счётчик насчитывает на один ордер меньше чем есть в терминале. В чем здесь может быть проблема????? Сбой в учете ордеров происходит между первым и вторым ордером. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 5 сентября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 сентября, 2021 4 часа назад, Евгений72 сказал: В чем здесь может быть проблема????? Попробуй условие добавить в фигурные скобки: if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) count++; } Возможно терминал не может выделить ордер, поэтому его пропускает. Редкая ошибка, но может быть. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти