Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 523
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
какой такой канон ? есть оф.док - там именно как у вас..всё остальное от лукавого.
1. стоит внутри OnCalculate задавать серийность вcех используемых массивов
2. до входа в цикл поставьте buff[length]=Bid+size; - получится примерно как хотите. Кривая линия и в конце "козырёк" на уровне Bid+size
3. следите за границами массивов. Конечно вряд-ли rates_total < length, но чем чёрт не шутит :-)
1. То есть в начале написать ArraySetAsSeries и дальше плясать от этого?
Ах да, я неправильно описал немного. То есть требуется чтобы эта линия шла по графику влево, и обновляясь с каждым тиком
Огромное Вам спасибо за подробный ответ!
По Вашему совету разделил ветки и все получилось.
Потом столкнулся с проблемой что одновременно открывало по 10-15 отложенных ордеров, решил проблему добавив после вашего кода:
Это тоже не выход. Ордер может быть открыт вручную или другим советником. В итоге разрабатываемый советник ничего не откроет. Поэтому нужно считать количество ордеров, открытых советником. Имея эти данные, принимать решение о необходимости открытия ордера.
Уверен, есть более грамотный способ.
По Вашему коду, не поясните пожалуйста, что значит 1; i >=0; --i ?
Это стандартный цикл перебора ордеров. OrdersTotal() - это количество ордеров. Ордера индексируются, начиная с нуля. Так, если есть 1 ордер, то у него индекс 0, а OrdersTotal() вернет 1. Таким образом, цикл нужно начинать с индекса, который на 1 меньше, чем количество ордеров. Получаем OrdersTotal() - 1. Второй операнд - условие выполнения тела цикла. В данном случае цикл прервется при значении i = -1. Третий операнд - выполнение перехода к следующему индексу (уменьшение на 1).
Об операторе цикла можно прочесть в документации.
Это тоже не выход. Ордер может быть открыт вручную или другим советником. В итоге разрабатываемый советник ничего не откроет. Поэтому нужно считать количество ордеров, открытых советником. Имея эти данные, принимать решение о необходимости открытия ордера.
Попробовал вот так, но он опять стал открывать 10-15 ордеров на 1 сигнал:
Третий операнд - выполнение перехода к следующему индексу (уменьшение на 1).
То есть с конца просматривает все ордера?
Попробовал вот так, но он опять стал открывать 10-15 ордеров на 1 сигнал:
То есть с конца просматривает все ордера?
Чтобы использовать функцию OrderMagicNumber(), нужно сначала выбрать ордер. Стандартный цикл сбора информации о своих ордерах выглядит так (например, посчитаем количество своих ордеров):
После выполнения этого кода в переменной nCnt будет количество рабочих ордеров эксперта.
Я решаю проблему следующим образом...
Спасибо.
Чтобы использовать функцию OrderMagicNumber(), нужно сначала выбрать ордер. Стандартный цикл сбора информации о своих ордерах выглядит так (например, посчитаем количество своих ордеров):
После выполнения этого кода в переменной nCnt будет количество рабочих ордеров эксперта.
Спасибо большое! Сработало.
Подскажите, а ++nCnt, это подстановка полученного количества ордеров в саму переменную nCnt?
Спасибо большое! Сработало.
Подскажите, а ++nCnt, это подстановка полученного количества ордеров в саму переменную nCnt?
Во всех подобных случаях сразу смотрите документацию. ))
Спасибо большое! Сработало.
Подскажите, а ++nCnt, это подстановка полученного количества ордеров в саму переменную nCnt?
Есть полная документация по языку, стоит лишь поглядеть в верхнее меню сайта.
Не ленитесь читать её - невозможно всё держать в голове - всегда там справляются практически все - не только новички.
Есть полная документация по языку, стоит лишь поглядеть в верхнее меню сайта.
Не ленитесь читать её - невозможно всё держать в голове - всегда там справляются практически все - не только новички.
Спасибо. Не всегда понимаю в каком разделе искать, пока плохо ориентируюсь, а F1 эдиторе не всегда отправляет куда надо)
Постараюсь по совсем глупым вопросам не тревожить, спасибо за терпение)
1. То есть в начале написать ArraySetAsSeries и дальше плясать от этого?
Ах да, я неправильно описал немного. То есть требуется чтобы эта линия шла по графику влево, и обновляясь с каждым тиком
ну так и рисуйте горизонтальную линию.
Зачем вам при этом какие-о буферы и их пересчёты ? ObjectSetDoubke(0,myHLine,OBJPROP_PRICE,concrete_price_value);
пользователь увидит линию, вы не отожрёте время на пересчёт буферов, все довольны и счастливо расходятся
PS/ поймите верно - индикаторный буфер, он для передачи(расшаривания/совместного использования) результатов произведённых вычислений в первую очередь. Нарисовать горизонтальную линию длинной N - это про другое