Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 115
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Народ такой вопрос есть - как в одномерный массив засунуть значения переменной?
В хелп не отправляйте - там для подобной задачи примера НЕТ.
Допустим есть переменная a, которая меняется при определённых условиях.
Мне нужно, что-бы в массив записывались 3 последних значения этой переменной. Как это реализуется в mql4 ?
Пишу int mas[3];
mas[]=a; внутри цикла после условия, при котором а меняется,
но нифига не работает, хотя логически должно. компилятор выдаёт ']' - expression expected, хочет что-бы я в mas[]=a внутри скобок засунул какое-то неведомое выражение.
Есть ли вообще в MQL4 какая-то функция, что-бы массив заполнялся значением переменной при каждой итерации цикла?
извиняюсь, за то что не нашел начало переписки, но хотел бы сразу посоветовать избегать сложных условий и вычислений в них - это делает код нечитаемым и как следствие усложняет поиск логических ошибок, я бы Ваш код вот так записал бы:
если поняли о чем идет речь, то Вы можете приведенный мной код еще немного доработать, я про вынос в отдельное условие if(OrderType()==OP_BUY....
затем будет намного проще найти логические ошибки, имхо
Вставите после каждого OrderSend => return
либо сделайте выбор через switch :
Пробую так и не получается.
у Вас в вызове пользовательского индикатора мало входных параметров - посчитайте сколько в индикаторе Morning Flat внешних переменных? (extern) - вот столько же параметров Вы должны передавать при использовании iCustom
.....
Пишу int mas[3]=a; внутри цикла после условия, при котором а меняется,
но нифига не работает, хотя логически должно.
Научитесь делать все действия не сразу, а шаг за шагом .
Пример :
у Вас в вызове пользовательского индикатора мало входных параметров - посчитайте сколько в индикаторе Morning Flat внешних переменных? (extern) - вот столько же параметров Вы должны передавать при использовании iCustom
Я их уже все перебрал.
Решил вопрос по другому. Вставил код вычисления цен из индикатора в эксперт.
именно так и есть - логика кода одинакова, просто если дробить условия, то быстрее находишь где логическая ошибка , ну и в Вашем случае, если вынести:
в отдельное условие, получим оптимизацию кода - условие будет проверенно один раз, а не 4 раза как в Вашем примере.
Оформите вывод в журнал экспертов через
для записи логов, чтобы видеть какой участок кода выполнен и с какими параметрами
Спасибо за ответ. Раздробил условия до предела. Комментариями проверил логику. Оказалось, что закрытие позиций происходит по условиям закрытия первой открытой позиции. То есть, если сначала открыли БАЙ или СЕЛЛ с условием на закрытие 1, а потом открылась вторая такая же позиция, но с условием на закрытие 2, то это условие закрытия игнорируется и вторая позиция, не смотря на другой магик, закрывается тоже по условию 1. И что делать?
Я их уже все перебрал.
Решил вопрос по другому. Вставил код вычисления цен из индикатора в эксперт.
ну так значит так, я обратил внимание, что Вы iCustom() не правильно вызывали, должно было так быть:
я передаю при вызове индикатора 7 параметров, а Вы вызывали с 3-мя параметрами
я бы оставил вызов индикатора, но модифицировал бы сам индикатор - убрал бы в коде индикатора лишние внешние переменные и графические объекты
Комментариями проверил логику. Оказалось, что закрытие позиций происходит по условиям закрытия первой открытой позиции.
мои поздравления! Вы на верном пути, но лучше на этапе отладки выводить не в комментарий( Commetn() ), а в журнал (Print())
код покажите
ну так значит так, я обратил внимание, что Вы iCustom() не правильно вызывали, должно было так быть:
я передаю при вызове индикатора 7 параметров, а Вы вызывали с 3-мя параметрами
я бы оставил вызов индикатора, но модифицировал бы сам индикатор - убрал бы в коде индикатора лишние внешние переменные и графические объекты
мои поздравления! Вы на верном пути, но лучше на этапе отладки выводить не в комментарий( Commetn() ), а в журнал (Print())
код покажите
Принты убрал.
Принты убрал.
не знаю всю логику Вашего кода, но однозначно Вам необходимо после каждого закрытия ордера выполнять выход из цикла через break; и на следующем тике опять проверять ордера на Ваши условия - я не знаю как ведет себя OrderSelect() после закрытия ордера - если ордер закрыт, то что то же выбрано? или будет ошибка?
тут в принципе у Вас проблема в том, что Вы хотите в одном цикле все сразу проверить и закрыть, решений несколько: используйте
switch()
или оформите закрытие ордера в функцию (есть готовые функции для ордеров https://www.mql5.com/ru/forum/131859/page2#434206 )
или используйте break после закрытия ордера в Вашем коде
не знаю всю логику Вашего кода, но однозначно Вам необходимо после каждого закрытия ордера выполнять выход из цикла через break; и на следующем тике опять проверять ордера на Ваши условия - я не знаю как ведет себя OrderSelect() после закрытия ордера - если ордер закрыт, то что то же выбрано? или будет ошибка?
тут в принципе у Вас проблема в том, что Вы хотите в одном цикле все сразу проверить и закрыть, решений несколько: используйте
switch()
или оформите закрытие ордера в функцию (есть готовые функции для ордеров https://www.mql5.com/ru/forum/107476 )
или используйте break после закрытия ордера в Вашем коде
Спасибо. break вроде помогло. Посмотрим, что будет дальше.