[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 240
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
for (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket());
}
Вот такой простой скрипт должен удалять все отложенные ордера, но удаляет ровно половину ордеров ... ???
a1 = OrdersTotal();
for (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket());
}
Вот такой простой скрипт должен удалять все отложенные ордера, но удаляет ровно половину ордеров ... ???
допустим ордеров было 10.
Вот вы удалили половину (с нулевого по пятый)
теперь вы хотите выбрать шестой.. а их осталось всего 5. Ошибка и удалять нечего. С остальными аналогично
a1 = OrdersTotal();
for (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket());
}
Вот такой простой скрипт должен удалять все отложенные ордера, но удаляет ровно половину ордеров ... ???
Измените направление перебора ордеров:
for (i=a1-1; i>=0; i--) {....}
Измените направление перебора ордеров:
for (i=a1-1; i>=0; i--) {....}
1. Вы проверили?
Докладываю: помогло, но, похоже, глючит.
Первый терминал. Удалил все графики и символы, добавил 7 символов по доллару, добавил графики. Всё с перезагрузками.
Растянул тиковый на 3/4 экрана. Заполнение первых 6, 7-й встал на 5-ти клетках.
После очередного перезапуска полностью стали заполняться не все, распределение почти случайное, - чем ниже символ в списке, тем меньше ему клеточек достается.
Второй терминал. На нем было 7 йеновых пар. Удалил лишние символы, перезапустил - заполняться стали намного глубже, а вот глубина заполнения оказалась распределена случайным образом.
Склоняюсь к тому, что это баг из-за маленького кэша - его просто не хватает на всех, а распределение то ли случайно, то ли "кто первый, того и тапки".
В любом случае, для одной валюты способ работает. Резюме: рецепт в фак :) Спасибо.
Работает ... но в чём логика - какая разница i++ или i-- ???
Вам же сразу написали в чём причина. Дело не в i++ или i--, а в том, с какого конца начать удалять ордера - с начала списка (как вы) или с конца списка (как нужно в данном случае)
Для того, чтобы понять что происходит при удалении ордеров, нужно знать и представлять, каким образом ордера хранятся в массиве.
Когда удаляете сначала первый ордер (он индексируется i=0), то индексы всех ордеров смещаются в массиве - тот, который был первым, становится нулевым, второй становится первым, третий - вторым и т.д. Потому и происходит не полное удаление всех ордеров - ведь когда i становится равным 6, шестой ордер смещается на пятую позицию в массиве ордеров и ордер просто не выбирается по индексу 6.
Когда же вы удаляете ордера с конца списка, то смещения не происходит - первый ордер как имел нулевую позицию в списке, так и будет её иметь. 10-й ордер имел позицию 9, он был удалён, далее удаляется 9-й ордер, который имеет позицию в списке 8 и т.д. до первого ордера с позицией ноль в массиве ордеров.
Работает ... но в чём логика - какая разница i++ или i-- ???
вам ведь уже ответил пользователь
... открыть график автономно.