Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 70
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Скажите, почему при переборе ордеров функцией OrdersTotal() пишут -1.
Пример: for (i=OrdersTotal()-1 ;i>=0; i--)
почему не просто OrdersTotal() ?
Счет ордеров в этой функции начинается с 0 или с 1? То есть если есть один ордер, OrdersTotal() равен 0 или 1?
Скажите, почему при переборе ордеров функцией OrdersTotal() пишут -1.
Пример: for (i=OrdersTotal()-1 ;i>=0; i--)
почему не просто OrdersTotal() ?
Счет ордеров в этой функции начинается с 0 или с 1? То есть если есть один ордер, OrdersTotal() равен 0 или 1?
OrdersTotal() показывает количество, то есть если есть один ордер то OrdersTotal() будет равен единице, а вот в списке ордеров отчет начинается с нуля
0 - первый ордер
1 - второй ордер
2 - третий
и так далее.
По этому если мы начинаем перебор с конца списка, нужно от общего количества ордеров OrdersTotal() отнять единицу.
OrdersTotal() показывает количество, то есть если есть один ордер то OrdersTotal() будет равен единице, а вот в списке ордеров отчет начинается с нуля
0 - первый ордер
1 - второй ордер
2 - третий
и так далее.
По этому если мы начинаем перебор с конца списка, нужно от общего количества ордеров OrdersTotal() отнять единицу.
но если в первом выражении не отнимать единицу это не будет ошибкой, если у нас один ордер то произойдет две итерации. Разве что ни к чему две итерации делать когда все что нужно за одну можно сделать, поэтому -1, правильно понимаю?
да правильно
Не совсем правильно.
Можно использовать префиксный декремент.
так как у нас есть пачка ордеров почему нельзя взять и сразу вытащить нужный? (нужные) и сделать с ними то что хочется? например ордер (i-4)
Потому, что это будет работать только в тестере МТ4. Или при торговле только на одном символе и только одним этим советником.
ну если подумать, советник один и тот же на каждую пару, общий только баланс счета(переключатель будет в последнюю очередь)
фильтр идет по всем ордерам уовлетворяющим условию рыночные-тип-открытые советником-если символ совпадает
что не так то?
ну если подумать, советник один и тот же на каждую пару, общий только баланс счета(переключатель будет в последнюю очередь)
фильтр идет по всем ордерам уовлетворяющим условию рыночные-тип-открытые советником-если симовл совпадает
что не так то?
Ну вам же выше объяснили уже, что не так. Ордера считать только свои, а индексы массива брать на общее количество - получится массив с пустыми ячейками. И зачем это надо? А если массив не пустой был, то в "лишних" полях - ненужный мусор, приводящий к ошибкам, а ведь речь о деньгах.
ок, делаем так
{
int Ticket;
double orderopenprice;
int ordertype;
double profit;
double stoploss;
double lot;
};
myorder orders[];
int i;
int count1=0;
void CalcOrders()
{
for(i=OrdersTotal()-1; i>=0; i--)
{
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
&& (OrderMagicNumber()==Magic) && (OrderType()<2))
orders[count1].Ticket=OrderTicket();
orders[count1].lot=OrderLots();
orders[count1].orderopenprice=OrderOpenPrice();
orders[count1].ordertype=OrderType();
orders[count1].profit=OrderProfit();
orders[count1].stoploss=OrderStopLoss();
count1++;
}
}
правильно?