Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1266
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Так я не помню, надо проверять, а неохота. Возможно, что в mql4 при попытке создать объект с именем уже существующего, просто возвращалась ошибка, а в mql5 уже не ошибка а модификация параметров если координаты отличаются.
Как сказал Артём — проверяйте наличие объекта
Да, так.
внезапно (впрочем как обычно) ObjectGetInteger(0,objectName,OBJPROP_TYPE) работает быстрее.
ObjectFind - синхронная команда, то есть ожидает полного обновления(и доступности) объектов чарта..Использование чревато существенными задержками.
если работаете со своими объектами (то есть созданными в вашем-же прикладе), то не стоит использовать ObjectFind - вы и так знаете в каком окне создавался объект и что он скорее всего есть и он нужного типа.
Максимум неприятностей - то что пользователь удалил объект или поменял свойство
Спасибо. Интересно.
Всем доброго времени суток.
В учебнике Ковалева написано что индексы массивов могут быть заданы целыми значениями в виде констант, переменных или выражений.
Когда я задаю в mql4 индекс в виде переменной компилятор выдает одну единственную ошибку
Вот как я задаю индекс
int W=1000;
double T_P[W]={0};
void OnTick()
{
код
}
Подскажите пожалуйста , что я делаю ошибочно.
Спасибо.
Всем доброго времени суток.
В учебнике Ковалева написано что индексы массивов могут быть заданы целыми значениями в виде констант, переменных или выражений.
Когда я задаю в mql4 индекс в виде переменной компилятор выдает одну единственную ошибку
Вот как я задаю индекс
int W=1000;
double T_P[W]={0};
void OnTick()
{
код
}
Подскажите пожалуйста , что я делаю ошибочно.
Спасибо.
Индекс массива это не размер массива.
Понял спасибо. А размер массива можно каким то образом задать при помощи переменной?
Понял спасибо. А размер массива можно каким то образом задать при помощи переменной?
Устанавливает новый размер в первом измерении массива
int ArrayResize(
void& array[], // массив, переданный по ссылке
int new_size, // новый размер массива
int reserve_size=0 // резервное значение размера (избыточное)
);
Устанавливает новый размер в первом измерении массива
int ArrayResize(
void& array[], // массив, переданный по ссылке
int new_size, // новый размер массива
int reserve_size=0 // резервное значение размера (избыточное)
);
Спасибо за ценную информацию.
Здравствуйте! Помогите, пожалуйства разобраться в простом коде.
Сейчас разбираюсь с механизмами открытия/закрытия ордеров и столкнулся с проблемой закрытия открытых позиций.
Код простой. Суть алгоритма - на графике рисуется МА (скользящая средняя) с периодом 100. Если предыдущая свеча [1] открылась выше MA, а закрылась ниже МА , то со следующей свечи [0] открывается SELL-ордер на продажу.
//(Условия для покупки противоположны, их не расписываю)
Для закрытия ордера следующие условия - текущая цена прошла от цены открытия ордера устанавливаемое значение пунктов, например 40.
Пример: открылся шот на Bid=1.20045, закрыться он должен на Ask= 1.20005.
Ну и короче не работает у меня что-то..(( Код открытия и закрытия запакованы в 2 соответствующие функции CheckForOpen() и CheckForClose(), которые в свою очередь вызываются функцией OnTick(). По идее, с каждым тиком должны проверяться условии открытия нового ордера и условия закрытия уже открытых позиций, но по факту цена может пройти заданное значение пунктов (пройти уровень закрытия), а ордер при этом не закроется.
Никак не могу понять, в чем дело.
p/s/ Скрины и код прилагаю.
Здравствуйте! Помогите, пожалуйства разобраться в простом коде.
Сейчас разбираюсь с механизмами открытия/закрытия ордеров и столкнулся с проблемой закрытия открытых позиций.
Код простой. Суть алгоритма - на графике рисуется МА (скользящая средняя) с периодом 100. Если предыдущая свеча [1] открылась выше MA, а закрылась ниже МА , то со следующей свечи [0] открывается SELL-ордер на продажу.
//(Условия для покупки противоположны, их не расписываю)
Для закрытия ордера следующие условия - текущая цена прошла от цены открытия ордера устанавливаемое значение пунктов, например 40.
Пример: открылся шот на Bid=1.20045, закрыться он должен на Ask= 1.20005.
Ну и короче не работает у меня что-то..(( Код открытия и закрытия запакованы в 2 соответствующие функции CheckForOpen() и CheckForClose(), которые в свою очередь вызываются функцией OnTick(). По идее, с каждым тиком должны проверяться условии открытия нового ордера и условия закрытия уже открытых позиций, но по факту цена может пройти заданное значение пунктов (пройти уровень закрытия), а ордер при этом не закроется.
Никак не могу понять, в чем дело.
p/s/ Скрины и код прилагаю.
CheckForOpen() надо вызывать не непосредственно в OnTick, а в самописной OnBar (которую вызывать в OnTick)- на открытии бара. Но это мелочь
смотреть стоит не Open[1], Close[1] (прежняя свеча пробила MA100) а Open[1],Open[0] (прежняя открылась с одной стороны MA, актуальная с другой). Иначе мелкий геп между свечами и прощай логика.
SMA от Median на 0-м баре меняется, то есть непостоянна. Нельзя с ней сравнивать. Корректируйте алгоритм.
Устанавливает новый размер в первом измерении массива
int ArrayResize(
void& array[], // массив, переданный по ссылке
int new_size, // новый размер массива
int reserve_size=0 // резервное значение размера (избыточное)
);
Еще раз спасибо Вам за подсказку, но..... в Справочнике написано что данная функция применяется только к динамическим массивам. А в моем коде НЕ динамический массив, а обычный.
Буду Вам очень признателен , если подскажете( а лучше, покажете) как меняется размер обычного массива в первом измерении.
Еще раз спасибо за помощь.