Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 556
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Подскажите пожалуйста почему в копированном мною коде с этого сайта перед Magic компилятор пишет " не объявленный идентификатор" ?
Подскажите пожалуйста почему в копированном мною коде с этого сайта перед Magic компилятор пишет " не объявленный идентификатор" ?
должно быть потому-что он не объявлен
объявите его в начале. или как параметр советника или константу..или переменую, ну хоть как-то..сущность должна существовать :-)
input int Magic=5566; // это чтобы он был в параметрах и можно поменять
// или const int Magic = 8899;
Подскажите пожалуйста почему в копированном мною коде с этого сайта перед Magic компилятор пишет " не объявленный идентификатор" ?
Потому что использован идентификатор Magic, тип которого (и значение соответственно) нигде не описано. Нужно объявить переменную (или константу) с таким именем и присвоить ему значение.
Подскажите пожалуйста почему в копированном мною коде с этого сайта перед Magic компилятор пишет " не объявленный идентификатор" ?
Потому, что он у вас в коде не объявлен нигде - это же очевидно.
Ребята, подскажите как разобраться и с чего начать!
Например: Есть 15 ордеров с лотом 0.01. Надо закрыть в какой либо момент сделку(-и) с обьемом 0.07.
Вопрос как с одним OrderClose(..) закрыть 7 ордеров или обьем 0.07 лота?
Если поставить сразу 0.07 он не видит сделок с объемом 0.01.
Если что новичок в программировании
Ребята, подскажите как разобраться и с чего начать!
Например: Есть 15 ордеров с лотом 0.01. Надо закрыть в какой либо момент сделку(-и) с обьемом 0.07.
Вопрос как с одним OrderClose(..) закрыть 7 ордеров или обьем 0.07 лота?
Если поставить сразу 0.07 он не видит сделок с объемом 0.01.
Если что новичок в программировании
Одним ордером никак не закроешь. Можно только сделать выборку ордеров и последовательно удалять каждый ордер. Причём если удалили ордер меньшего объёма, то у вас остаётся ещё открытый объём. Его-то мы и сравниваем с нашим оставшимся не закрытым объёмом. Закрываем до тех пор пока объём 0.07 не исчерпает себя. Только так.
Ребята, подскажите как разобраться и с чего начать!
Например: Есть 15 ордеров с лотом 0.01. Надо закрыть в какой либо момент сделку(-и) с обьемом 0.07.
Вопрос как с одним OrderClose(..) закрыть 7 ордеров или обьем 0.07 лота?
Если поставить сразу 0.07 он не видит сделок с объемом 0.01.
Если что новичок в программировании
Если брокер разрешает использовать встречное закрытие, то можно открыть один противоположный ордер объемом 0.07, тем самым зафиксировав цену прибыли/убытка для этого объема. Ну а потом все равно потребуется произвести 7 операций закрытия, встречного закрытия (функция OrderCloseBy()). Торговых операций при таком подходе получается больше на одну. Выигрыш в том, что закрытие всех семи ордеров производится по одной цене.
Всем привет.
Дайте пожалуйста совет, в основном он о скорости работы советника ну и наверно надежности и правильности написания.
Речь идёт о обращении к открытым и отложенным ордерам в каждом тике и при необходимости их изменение.
В хелпе про OrderSelect написано: "При последовательном выборе ордеров с помощью параметра SELECT_BY_POS информация отдаётся в том порядке, в котором она поступила с торгового сервера."
И от сюда возникает вопрос, может быть завести массив в котором хранить тип, цену входа и к примеру уникальный комментарий ордера. В каждом тике пробегаться по массиву и уже при необходимости обращаться к функции OrderSelect и делать выборку по уникальному комментарию ордера?
Всем привет.
Дайте пожалуйста совет, в основном он о скорости работы советника ну и наверно надежности и правильности написания.
Речь идёт о обращении к открытым и отложенным ордерам в каждом тике и при необходимости их изменение.
В хелпе про OrderSelect написано: "При последовательном выборе ордеров с помощью параметра SELECT_BY_POS информация отдаётся в том порядке, в котором она поступила с торгового сервера."
И от сюда возникает вопрос, может быть завести массив в котором хранить тип, цену входа и к примеру уникальный комментарий ордера. В каждом тике пробегаться по массиву и уже при необходимости обращаться к функции OrderSelect и делать выборку по уникальному комментарию ордера?
OrderSelect() выполняется внутри терминала, запрос на сервер при этом не производится. Поэтому ничего страшного в обращении к списку ордеров на каждом тике нет. Большинство советников так и делает.
А вот вопрос насчет массива относится уже к архитектуре программы. В случае сложного советника, оперирующего большим количеством ордеров, это просто необходимо. Если же советник оперирует одним ордером с простой логикой, то массив становится излишеством.
Стоит лишь уточнить тот факт, что даже при наличии массива ордеров никак не обойтись без обращения к OrderSelect(). Ведь на каждом тике необходимо проверить, существует еще этот ордер, или нет. Также у него могут быть изменены параметры.