Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 829
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Мультивалютный эксперт в цикле запрашивает данные по символам. Там есть такой фрагмент:
По всем символам всё проходит нормально. При первом проходе время около 120мс, т.к. наполняются буфера индикаторов. Начиная со второго прохода время вычисления на текущем баре меньше 1 мс.
Особенность в том, что у одного известного брокера есть символ EURRUR, по которому нет данных ("Ожидайте обновления"). Поэтому вычисления застряют на этой строке на 51 секунду. Ошибка 4806. 51 сек - это даже для одного (первого) раза неприемлемо, не говоря уже про цикл.
Вопрос. Как быстро выяснить факт того, что по заданному символу нет данных? Я бы тогда его запомнил и на следующих итерациях просто переступал через него и шёл дальше без потери темпа.
Коллеги - подскажите как преобразовать массив типа double в string. Надо для записи его в файл. Вот общий тренировочный код.
инф-ия взята из статьи
Сохранение и загрузка массивов из файла
При сохранении и загрузке массива из файла следует учитывать разницу значений размера массива по первому измерению и общее количество элементов массива. При сохранении массива сначала запишем в файл размер массива (общее количество элементов определяемое функцией ArraySize()), затем весь массив:
Здравствуйте, столкнулся с такой проблемой.
Есть два советника по одному инструменту, с разными магиками соответственно. Магик выставляю через CTrade, открываю позицию соответственно тоже через CTrade. При открытой позиции первого советника его магик присваевается второму советнику (установил проверку после открытии позиции, с.м. ниже), поэтому проверка на наличие открытых позиций не видит своего магика, в дальнейшем открывая множество позиций в одну сторону. Счет стоит на демке, в тестере такое выявить невозможно. Если значение магика сохраняется в классе, может его обнулять нужно, но я не знаю как.
Здравствуйте, столкнулся с такой проблемой.
Есть два советника по одному инструменту, с разными магиками соответственно. Магик выставляю через CTrade, открываю позицию соответственно тоже через CTrade. При открытой позиции первого советника его магик присваевается второму советнику (установил проверку после открытии позиции, с.м. ниже), поэтому проверка на наличие открытых позиций не видит своего магика, в дальнейшем открывая множество позиций в одну сторону. Счет стоит на демке, в тестере такое выявить невозможно. Если значение магика сохраняется в классе, может его обнулять нужно, но я не знаю как.
Пожалуйста, Вставляйте код правильно, а не в виде простыни текста.
По коду: задавайте во входных параметрах каждому советнику СВОЙ магик. Допустим первому задаёте 10001, тогда второму 10002.
Пожалуйста, Вставляйте код правильно, а не в виде простыни текста.
По коду: задавайте во входных параметрах каждому советнику СВОЙ магик. Допустим первому задаёте 10001, тогда второму 10002.
Спасибо за быстрый ответ. Но в том то и дело, что магики разные. Таким образом я и определил, что оказывается у второго робота позиции открываются с магиком первого. Как так получается и где он сохраняет магик номер первого советника я не знаю, но хотел бы разобраться.
Спасибо за быстрый ответ. Но в том то и дело, что магики разные. Таким образом я и определил, что оказывается у второго робота позиции открываются с магиком первого. Как так получается и где он сохраняет магик номер первого советника я не знаю, но хотел бы разобраться.
В этом случае, лучше задавать магик
// выставляем магик m_trade.SetExpertMagicNumber(Magic);
перед каждым открытием позиции\ордера, а не в OnInit.В этом случае, лучше задавать магик
перед каждым открытием позиции\ордера, а не в OnInit.В данном случае не "лучше", а именно так и нужно - это класс-обёртка для стандартных торговых функций. Он не хранит множественные магики. Поэтому магик ему нужно устанавливать каждый раз перед тем, как, и когда требуется открывать позиции с новым магиком.
В общем последовательность такова:
и т.д. ...
В этом случае, лучше задавать магик
перед каждым открытием позиции\ордера, а не в OnInit.Изначально было так, не помогает. Но в примерах обычно стоит в OnInit поэтому перенес. Давно с этим вожусь, стоят совы на тесте вроде всё ровно идет, вдруг открываешь сервер, а там 20 позиций в одну сторону. Может ли влиять то что проверка открытых позиций не через классы?
Спасибо за быстрый ответ. Но в том то и дело, что магики разные. Таким образом я и определил, что оказывается у второго робота позиции открываются с магиком первого. Как так получается и где он сохраняет магик номер первого советника я не знаю, но хотел бы разобраться.
Так как в классе CTrade нет метода GetExpertMagicNumber, после торговой операции распечатайте этот код:
так проверите, точно ли разные магики у обоих экспертов.