Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пополняй свой счет через PayPal
rus-clon
863
rus-clon 2012.05.14 20:30 
господа профессионалы програмирования, помогите пожалуйста как переделать словесную фразу в код: мне нужно что бы каждый тик считалось количество открытых ордеров на терминалле, и если количество ордеров на предыдущем тике меньше на 1 чем на нынешнем то ...
Документация по MQL5: Торговые функции / OrdersTotal
Документация по MQL5: Торговые функции / OrdersTotal
  • www.mql5.com
Торговые функции / OrdersTotal - Документация по MQL5
rus-clon
863
rus-clon 2012.05.14 20:35  
чуть не забыл это в мт4
Дмитрий Александрович
1705
Дмитрий Александрович 2012.05.14 20:56  
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);
  }
//+------------------------------------------------------------------+
rus-clon
863
rus-clon 2012.05.15 07:01  

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

int prevtotal;

int start()

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

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

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

 

я так понял эта прога будет фиксировать все новопоявившиеся ордера??
rus-clon
863
rus-clon 2012.05.15 07:07  
или новопоявившиеся ордера только того символа на котором установлен сов?
Дмитрий Александрович
1705
Дмитрий Александрович 2012.05.15 07:16  
Код который я привел вверху, срабатывает при появлении одного нового ордера, но если за время прихода тика закроется 2 ордера и откроется три, то код сработает.
А вот если откроется больше одного, то не сработает.

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

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

rus-clon
863
rus-clon 2012.05.15 07:27  

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

 

rus-clon
863
rus-clon 2012.05.15 07:30  
к стати еще в одном вопросе не поможите? как написать что если по терминальному времени от 8 59 до 9 00  то  все ордера открытые советником, в котором будет код, закрываются
Дмитрий Александрович
1705
Дмитрий Александрович 2012.05.15 07:33  
rus-clon:

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

 

Хочется в Работу вас послать, ну да ладно.
Сейчас накидаю.
Дмитрий Александрович
1705
Дмитрий Александрович 2012.05.15 07:52  

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

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

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

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

Структура обычной программы - Создание обычной программы - Учебник по MQL4
  • book.mql4.com
Структура обычной программы - Создание обычной программы - Учебник по MQL4
Файлы:
controler.zip 14 kb
/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий