вопрос от совсем только начинающего програмиста

 
господа профессионалы програмирования, помогите пожалуйста как переделать словесную фразу в код: мне нужно что бы каждый тик считалось количество открытых ордеров на терминалле, и если количество ордеров на предыдущем тике меньше на 1 чем на нынешнем то ...
Документация по MQL5: Торговые функции / OrdersTotal
Документация по MQL5: Торговые функции / OrdersTotal
  • www.mql5.com
Торговые функции / OrdersTotal - Документация по MQL5
 
чуть не забыл это в мт4
 
rus-clon:
чуть не забыл это в мт4
Здравствуйте.
Вам как, кодом или подсказать в какую сторону идти?
Если подсказать, то как-то так.
  1. Объявляем одну глобальную переменную типа int, называем, например "PrevCountOrders"
  2. В теле start, объявляем переменную currentCountOrders
  3. На каждом тике в цикле пробегаем по ордерам, проверяем символ, тип и т.п.
  4. Если нужный нам ордер, добавляем к переменной currentCountOrders единицу.
  5. По окончанию цикла, проверяем, если PrevCountOrders не равно currentCountOrder, то записываем значение currentCountOrder в PrevCountOrders, ну а далее  ...(Выполняем что хотим)

Если кодом, в теории вот так:

#property copyright "mrProF   2012"
#property link      "http://"

int PrevCountOrders = -1;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
   
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   int total = OrdersTotal();
   int currentCountOrders = 0;
   
   for (int i = 0;i<total;i++)
   {
      if (OrderSelect(i,SELECT_BY_POS))
      {
         if (OrderSymbol()!=Symbol()) //Считаем только на текущем символе
         {
            continue;
         }
         //if (OrderType()>OP_SELL) //Чтобы считать без отложенных
         //{
         //   continue;
         //}
         
         currentCountOrders++;
      }
   }
   

   if (PrevCountOrders==-1)//пропускам при первом тике, или можно не пропускать, тогда удалить этот блок
   {
      return(0);
   }
   
   if (currentCountOrders-PrevCountOrders==1)
   {
      Print("Было: ",PrevCountOrders," стало: ",currentCountOrders);
      PrevCountOrders = currentCountOrders;
      
      
      //Вот тут творим, что хотим
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

спасибо большое. правда я чуть по проще сделал

int prevtotal;

int start()

if(OrdersTotal()>prevtotal) { prevtotal=OrdersTotal(); то...; } 

 
mrProF:
Здравствуйте.
Вам как, кодом или подсказать в какую сторону идти?
Если подсказать, то как-то так.
  1. Объявляем одну глобальную переменную типа int, называем, например "PrevCountOrders"
  2. В теле start, объявляем переменную currentCountOrders
  3. На каждом тике в цикле пробегаем по ордерам, проверяем символ, тип и т.п.
  4. Если нужный нам ордер, добавляем к переменной currentCountOrders единицу.
  5. По окончанию цикла, проверяем, если PrevCountOrders не равно currentCountOrder, то записываем значение currentCountOrder в PrevCountOrders, ну а далее  ...(Выполняем что хотим)

Если кодом, в теории вот так

 

я так понял эта прога будет фиксировать все новопоявившиеся ордера??
 
или новопоявившиеся ордера только того символа на котором установлен сов?
 
Код который я привел вверху, срабатывает при появлении одного нового ордера, но если за время прихода тика закроется 2 ордера и откроется три, то код сработает.
А вот если откроется больше одного, то не сработает.

В общем я написал то, что Вы просили в первом сообщении, для конкретных задач, нужно подходить по другому.

Вам вобще это для чего?

 

хочу сделать советник который будет отправлять определенные сообщения при появлении ордера на определенной паре при этом для каждой волютной пары будет отдельное сообщение, а сов будет устанавливаться только на одну пару.

 

 
к стати еще в одном вопросе не поможите? как написать что если по терминальному времени от 8 59 до 9 00  то  все ордера открытые советником, в котором будет код, закрываются
 
rus-clon:

хочу сделать советник который будет отправлять определенные сообщения при появлении ордера на определенной паре при этом для каждой волютной пары будет отдельное сообщение, а сов будет устанавливаться только на одну пару.

 

Хочется в Работу вас послать, ну да ладно.
Сейчас накидаю.
 

Так, взял код отсюда https://book.mql4.com/ru/build/structure

Чуток переделал, вырезал лишнее.

Архив распаковать в experts, скомпилировать controler и индикатор inform(его можно накинуть на график, там всякая фигня писаться будет).

В файле Events я добавил Print, в тех местах можно вставить отправку сообщений. Так-же куча комментарий.

Структура обычной программы - Создание обычной программы - Учебник по MQL4
  • book.mql4.com
Структура обычной программы - Создание обычной программы - Учебник по MQL4
Файлы:
controler.zip  14 kb
Причина обращения: