DENIS_B:
Здравствуйте! Я пробую написать советник,который подсчитывает количество ордеров каждого вида.При выполнении с функцией OrderSelect, он почему-то всегда зависает,но когда она закоментированна,все работает. Я работал с функцией OrderSelect и раньше, и таких проблем не возникало, но этот случай вообще не пробиваемый для меня!Помогите пожалуйста!!!
Здравствуйте! Я пробую написать советник,который подсчитывает количество ордеров каждого вида.При выполнении с функцией OrderSelect, он почему-то всегда зависает,но когда она закоментированна,все работает. Я работал с функцией OrderSelect и раньше, и таких проблем не возникало, но этот случай вообще не пробиваемый для меня!Помогите пожалуйста!!!
А где Вы такую конструкцию видели:
while(sum != 0 ) { OrderSelect (sum-1,SELECT_BY_POS); sum--; }
А если, уж, очень нравится работать с бесконечными циклами, то не забывайте задавать условие по выходу из оного!!! В данном случае красная строка.
А, если учитывать, что переучиваться сложнее, то изящнее считать так:
int gia_MyOrders[6]; void OrdersCounter (int Magic) // Счетчик ордеров { int sum = OrdersTotal(); if (sum == 0) return; ArrayInitialize (gia_MyOrders, 0); for (int li_ORD = sum - 1; li_ORD <= 0; li_ORD--) { if (!OrderSelect (li_ORD, SELECT_BY_POS) continue; //---- Нужно использовать фильтра для отсечения "не своих" ордеров if (OrderSymbol() != Symbol()) continue; if (Magic >= 0) if (OrderMagicNumber() != Magic) continue; //---- Подсчитываем ордера в массив gia_MyOrders[OrderType()]++; } Comment ("\n\n No orders" ); }
Вот здесь все работает.
//+------------------------------------------------------------------+ //| IDT_close_profit_positions.mq4 | //| Copyright © 2004, Globus | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, Globus" #include <stdlib.mqh> #include <WinUser32.mqh> #define SLIPPAGE 1 // value of slippage //+------------------------------------------------------------------+ //| script "intraday trading - close all profit positions" | //+------------------------------------------------------------------+ int CProfit() { // PlaySound("Tick.wav"); int sum=OrdersTotal(); double change=0; Print ("Count of ticket ",sum); while (sum>0 || sum<0) { OrderSelect(sum-1,SELECT_BY_POS); RefreshRates(); if (OrderProfit()>0 || OrderProfit()<0) { if (OrderType ()==0) { OrderClose( OrderTicket(), OrderLots(), Bid, SLIPPAGE); } if (OrderType ()==1) { OrderClose( OrderTicket(), OrderLots(), Ask, SLIPPAGE); } change++; } sum--; } Print ("Count of changes ",change); // PlaySound("Ok.wav"); return(0); } //+------------------------------------------------------------------+ int start() { CProfit(); return (0); }
Я все понял.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте! Я пробую написать советник,который подсчитывает количество ордеров каждого вида.При выполнении с функцией OrderSelect, он почему-то всегда зависает,но когда она закоментированна,все работает. Я работал с функцией OrderSelect и раньше, и таких проблем не возникало, но этот случай вообще не пробиваемый для меня!Помогите пожалуйста!!!