Здравствуйте. Известно, что в MQL массивы могут быть как с прямой, так и с обратной индексацией (серия). Поэтому, у меня возник вопрос, как лучше всего работать с массивами в MQL, если нужна серия или, обратная индексация? Первый вариант получения значения по индексу для серии может выглядеть так.
double arrayValue(constdouble array[], conct int shift) {
int len = (int)array.Size();
if (shift < 0 || shift >= len)
returnWRONG_VALUE;
return array[len - shift - 1];
}
double arrayValue(double &array[], conct int shift) {
int len = (int)array.Size();
double ret;
if (shift < 0 || shift >= len)
returnWRONG_VALUE;
if (!ArraySetAsSeries(array, true))
returnWRONG_VALUE;
ret = array[shift];
ArraySetAsSeries(array, false);
return ret;
}
Я конечно ничего не утверждаю, но, думаю, что, поскольку, массив это объект (что видно дажеиз кода приведенных примеров), то ArraySetAsSeries просто включает массиву флаг серии и при обращении к значению по индексу происходит как в первом примере.
double arrayValue(constdouble array[], conct int shift) {
int len = (int)array.Size();
if (shift < 0 || shift >= len)
returnWRONG_VALUE;
return array[len - shift - 1];
}
И вот так, примерно, идет обряжение к значению по индексу.
Имеет ли смысл каждый раз включать серию для массивов в обработчике OnCalculate индикаторов или лучше обращаться к младшему бару используя длину массивов rates_total?
intOnCalculate(constint rates_total,
constint prev_calculated,
constint begin,
constdouble &price[])
{
Print(price[rates_total-1]); // получение цены на младшем баре без использования серииreturn(rates_total);
}
Одинаковы ли по скорости эти два представленных способа или я где-то ошибаюсь в своих размышлениях?
Массивы в OnCalculate Вы не переворачивали, а значит индексация у них такая, что самый правый бар на графике имеет индекс [rates_total-1], соответственно бар слева от него будет иметь индекс [rates_total-1-1]
Массивы в OnCalculate Вы не переворачивали, а значит индексация у них такая, что самый правый бар на графике имеет индекс [rates_total-1], соответственно бар слева от него будет иметь индекс [rates_total-1-1]
Большое спасибо за вразумление, теперь все стало на свои места.
Массивы в OnCalculate Вы не переворачивали, а значит индексация у них такая, что самый правый бар на графике имеет индекс [rates_total-1], соответственно бар слева от него будет иметь индекс [rates_total-1-1]
Я смотрел на эту картинку (картинка в прикрепленном файле).
Ошибки в Generic/Queue.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
[ВОЗМОЖНАЯ ОШИБКА] Класс контейнера CQueue
Лорис Де Марчи , 2022.02.14 13:00
Всем привет!
Я подозреваю, что по крайней мере в методах CQueue::Contains(T item) и CQueue::Remove(T item) есть ошибка.
Очередь управляется с помощью классической круговой системы «голова-хвост», поэтому этот код должен быть неправильным:
Также неправильное описание метода вверху заставляет меня думать, что при записи этого класса могли быть допущены некоторые ошибки.
Метод Remove явно терпит неудачу при запуске этого простого кода, например:
Он печатает «false», когда элемент явно находится в очереди...
Дайте мне знать, исправлен ли этот класс или мне следует использовать один из моих.
Спасибо!
Здравствуйте. Известно, что в MQL массивы могут быть как с прямой, так и с обратной индексацией (серия). Поэтому, у меня возник вопрос, как лучше всего работать с массивами в MQL, если нужна серия или, обратная индексация? Первый вариант получения значения по индексу для серии может выглядеть так.
Второй вариант с использованием ArraySetAsSeries.
Я конечно ничего не утверждаю, но, думаю, что, поскольку, массив это объект (что видно даже из кода приведенных примеров), то ArraySetAsSeries просто включает массиву флаг серии и при обращении к значению по индексу происходит как в первом примере.
И вот так, примерно, идет обряжение к значению по индексу.
Имеет ли смысл каждый раз включать серию для массивов в обработчике OnCalculate индикаторов или лучше обращаться к младшему бару используя длину массивов rates_total?
Одинаковы ли по скорости эти два представленных способа или я где-то ошибаюсь в своих размышлениях?
Терминал не возвращает накопленный профит закрытых позиций. Подскажите где может быть проблема?
Добрый день!
Помогите пожалуйста разобраться с небольшим кодом:
Требуется чтобы данный бар сравнивался с предыдущим, а он наоборот сравнивается с нулевым.
Добрый день!
Помогите пожалуйста разобраться с небольшим кодом:
Требуется чтобы данный бар сравнивался с предыдущим, а он наоборот сравнивается с нулевым.
Приложите скриншот графика (очень желательно НА ЬЕЛОМ ФОНЕ) и покажите КТО такой у Вас "данный бар" и кто "предыдущий". Это важно.
Прикрепил скриншот
А вот тут ошибочка.
Массивы в OnCalculate Вы не переворачивали, а значит индексация у них такая, что самый правый бар на графике имеет индекс [rates_total-1], соответственно бар слева от него будет иметь индекс [rates_total-1-1]
А вот тут ошибочка.
Массивы в OnCalculate Вы не переворачивали, а значит индексация у них такая, что самый правый бар на графике имеет индекс [rates_total-1], соответственно бар слева от него будет иметь индекс [rates_total-1-1]
А вот тут ошибочка.
Массивы в OnCalculate Вы не переворачивали, а значит индексация у них такая, что самый правый бар на графике имеет индекс [rates_total-1], соответственно бар слева от него будет иметь индекс [rates_total-1-1]
Я смотрел на эту картинку (картинка в прикрепленном файле).
Как вы вставляете картинку? У меня не получается.
Я смотрел на эту картинку (картинка в прикрепленном файле).
Как вы вставляете картинку? У меня не получается.
Если нет такой кнопки - значит рейтинг ещё маловат. Сейчас он 11 у Вас.