Так я не помню, надо проверять, а неохота. Возможно, что в 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[], // массив, переданный по ссылке intnew_size, // новый размер массива intreserve_size=0 // резервное значение размера (избыточное) );
Устанавливает новый размер в первом измерении массива
int ArrayResize( void&array[], // массив, переданный по ссылке intnew_size, // новый размер массива intreserve_size=0 // резервное значение размера (избыточное) );
Здравствуйте! Помогите, пожалуйства разобраться в простом коде.
Сейчас разбираюсь с механизмами открытия/закрытия ордеров и столкнулся с проблемой закрытия открытых позиций.
Код простой. Суть алгоритма - на графике рисуется МА (скользящая средняя) с периодом 100. Если предыдущая свеча [1]открылась вышеMA, азакрылась нижеМА , то со следующей свечи [0] открывается SELL-ордер на продажу.
//(Условия для покупки противоположны, их не расписываю)
Для закрытия ордера следующие условия - текущая цена прошла от цены открытия ордера устанавливаемое значение пунктов, например 40.
Пример: открылся шот на Bid=1.20045, закрыться он должен на Ask= 1.20005.
Ну и короче не работает у меня что-то..(( Код открытия и закрытия запакованы в 2 соответствующие функции CheckForOpen() и CheckForClose(), которые в свою очередь вызываются функцией OnTick(). По идее, с каждым тиком должны проверяться условии открытия нового ордера и условия закрытия уже открытых позиций, но по факту цена может пройти заданное значение пунктов (пройти уровень закрытия), а ордер при этом не закроется.
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
Здравствуйте! Помогите, пожалуйства разобраться в простом коде.
Сейчас разбираюсь с механизмами открытия/закрытия ордеров и столкнулся с проблемой закрытия открытых позиций.
Код простой. Суть алгоритма - на графике рисуется МА (скользящая средняя) с периодом 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[], // массив, переданный по ссылке intnew_size, // новый размер массива intreserve_size=0 // резервное значение размера (избыточное) );
Еще раз спасибо Вам за подсказку, но..... в Справочнике написано что данная функция применяется только к динамическим массивам. А в моем коде НЕ динамический массив, а обычный.
Буду Вам очень признателен , если подскажете( а лучше, покажете) как меняется размер обычного массива в первом измерении. Еще раз спасибо за помощь.
Так я не помню, надо проверять, а неохота. Возможно, что в 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 // резервное значение размера (избыточное)
);
Еще раз спасибо Вам за подсказку, но..... в Справочнике написано что данная функция применяется только к динамическим массивам. А в моем коде НЕ динамический массив, а обычный.
Буду Вам очень признателен , если подскажете( а лучше, покажете) как меняется размер обычного массива в первом измерении.
Еще раз спасибо за помощь.