Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 287
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
{
double summa=0;
int orders=OrdersHistoryTotal();
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Error in history!");
break;
}
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)
continue;
//---
if(OrderProfit()>0) break;
summa=OrderProfit()+summa;
}
}
Добрый день. Помоги с функцией пожалуйста, суммирует убыток закрытых ордеров, при использование с функцией закрытие ордеров метатрейдер вылетает, думаю какая та ошибка в этой функции.
Лучше уже готовые посмотреть и если надо то под себя подкорректировать. GetProfitFromDateInCurrency()
Добрый день. Помоги с функцией пожалуйста, суммирует убыток закрытых ордеров, при использование с функцией закрытие ордеров метатрейдер вылетает, думаю какая та ошибка в этой функции.
что значит метатрейдер вылетает? Программа компилируется с ошибками!!!
в трех местах вместо if с маленькой строчной буквы написано If с большой прописной буквы
пара фигурных скобок явно лишняя: первая после int orders=OrdersHistoryTotal(); и парная ей после summa=OrderProfit()+summa; - но это маловажно
ну и еще есть...
Добрый день. Помоги с функцией пожалуйста, суммирует убыток закрытых ордеров, при использование с функцией закрытие ордеров метатрейдер вылетает, думаю какая та ошибка в этой функции.
Попробуй так :
Скомпилировал ее с директивой #property strict - ругает последнюю строку: 'i' - undeclared identifier. Дело в том, что переменная объявлена в цикле и действительна только в нем. Без директивы #property strict скомпилировалось без ошибок, но это плохо. Директиву надо использовать.
Вместо if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) проще написать if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)). Теперь далее у Вас стоит break - это выход из цикла. А надо обработать другие ордера. Впрочем на истории это лишнее. Ошибка случается на рыночных и отложенных ордерах, если к моменту обработки ордер закрыли и он отсутствует. В общем, правильнее if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; - продолжить обработку следующих ордеров
Из тех же соображений if(OrderProfit()>0) break; заменить на if(OrderProfit()>0) continue;
А вот и причина ошибки: if(OrderProfit()<0)i++; - если встретится убыточный номер, то индекс увеличивается. А заголовок цикла for(int i=orders-1;i>=0;i--) его уменьшает. Повторяется обработка того же ордера - программа зацикливается. Наверное, надо так:
Опоздал на 2 минуты пока писал ... Давайте рассмотрим внимательно эту часть:
Скомпилировал ее с директивой #property strict - ругает последнюю строку: 'i' - undeclared identifier. Дело в том, что переменная объявлена в цикле и действительна только в нем. Без директивы #property strict скомпилировалось без ошибок, но это плохо. Директиву надо использовать.
Вместо if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) проще написать if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)). Теперь далее у Вас стоит break - это выход из цикла. А надо обработать другие ордера. Впрочем на истории это лишнее. Ошибка случается на рыночных и отложенных ордерах, если к моменту обработки ордер закрыли и он отсутствует. В общем, правильнее if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; - продолжить обработку следующих ордеров
Из тех же соображений if(OrderProfit()>0) break; заменить на if(OrderProfit()>0) continue;
А вот и причина ошибки: if(OrderProfit()<0)i++; - если встретится убыточный номер, то индекс увеличивается. А заголовок цикла for(int i=orders-1;i>=0;i--) его уменьшает. Повторяется обработка того же ордера - программа зацикливается. Наверное, надо так:
Спасибо, больше метатрейдер не вылетает) По поводу
if(OrderProfit()>0) break; заменить на if(OrderProfit()>0) continue;
if(OrderProfit()>0) break;
должна останавливать счетчик если ордер закрылся в профит, я правильно понимаю?
Спасибо, больше метатрейдер не вылетает) По поводу мне нужно чтобы если ордер закрылся профитом, этот профит функция не учитывала, только сумму убытка и до первого ордера закрытого в профит. Т.е.
должна останавливать счетчик если ордер закрылся в профит, я правильно понимаю?
Рассуждения Ваши почти правильны. Тут отсутствует гарантия какого-либо порядка расположения ордеров в истории. Для себя - можно, на продажу - плохо
Если есть исходник - DROW_NONE - отсутствие какого-либо рисования
Не помогло, всё-равно отображает циферки в углу
по порядку расположения в списке. Но гарантия какого либо упорядочивания в этом списке отсутствует