Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Сотни статей помогут создать торгового робота. Заходи и изучай!
Alexey Shpitko
57
Alexey Shpitko 2011.12.25 09:38 

Подскажите пожалуйста, какой функцией мне воспользоваться, чтоб при наступлении события выставлялось несколько отложенников по одной цене и с одним объемом?

Нужно ли создавать массив?

Leonid Borsky
2363
Leonid Borsky 2011.12.25 13:53  

Каков вопрос ....

=============

NumberOfOrders - Возвращает количество ордеров.

https://www.mql5.com/ru/forum/131859

if ( (наступило некое событие) && 
NumberOfOrders(NULL,OP_BUYLIMIT, -1)<N ) { //если наступило событие
// и число выставленных бай-лим. ордеров всё ещё меньше заданнОго значения N, -
//то  выставляем еще один ордер:
OrderSend(  .... .... .... );    //выставляем ордер функцией OrderSend
                                        }
Alexey Shpitko
57
Alexey Shpitko 2011.12.26 16:44  
leonid553:

Каков вопрос ....

=============

NumberOfOrders - Возвращает количество ордеров.

https://forum.mql4.com/

leonid553:

Каков вопрос ....

=============

NumberOfOrders - Возвращает количество ордеров.

https://www.mql5.com/ru/forum/131859


спасибо.

но у меня эдитор не подсвечивает NumberOfOrders... как будто это просто текст, а не функция... что я делаю неправильно?

изложу конкретней, что хочу:

if(Bid==price)
{

OrderClose(ticket,lot,price,3,CLR_NONE); //закрыть открытый ордер SELL

OrderSend(Symbol(),OP_SELLLIMIT,lot_new,price_tp,3,NULL,NULL,NULL,0,0,Blue); //установить n ордеров OP_SELLLIMIT c объемом lot/n по цене price_tp

OrderSend(Symbol(),OP_SELLSTOP,lot_new,price_sl,3,NULL,NULL,NULL,0,0,Red); //установить n ордеров OP_SELLSTOP c объемом lot/n по цене price_sl

}

при рыночном открытии одних n ордеров - другие удаляются

прошу прощения за то, что напрягаю, но только постигаю mql...:)

khorosh
8041
khorosh 2011.12.26 17:11  
ashpi:

спасибо.

но у меня эдитор не подсвечивает NumberOfOrders... как будто это просто текст, а не функция... что я делаю неправильно?

изложу конкретней, что хочу:

if(Bid==price)
{

OrderClose(ticket,lot,price,3,CLR_NONE); //закрыть открытый ордер SELL

OrderSend(Symbol(),OP_SELLLIMIT,lot_new,price_tp,3,NULL,NULL,NULL,0,0,Blue); //установить n ордеров OP_SELLLIMIT c объемом lot/n по цене price_tp

OrderSend(Symbol(),OP_SELLSTOP,lot_new,price_sl,3,NULL,NULL,NULL,0,0,Red); //установить n ордеров OP_SELLSTOP c объемом lot/n по цене price_sl

}

при рыночном открытии одних n ордеров - другие удаляются

прошу прощения за то, что напрягаю, но только постигаю mql...:)

NumberOfOrders() - эту функцию возьмите из ветки "Полезные функции" . Это не встроенная, это пользовательская функция.

if(Bid==price) - такое условие не всегда будет работать, так как Bid может меняться дискретно и если допустим что предыдущее значение Bid меньше price, то следущее может быть больше price.

Leonid Borsky
2363
Leonid Borsky 2011.12.26 17:20  

Примерно так:

int start() {

//------------------ установка ордеров селл-лимит ---------
if (Bid >= price)                             {// если текущая цена >= заданной
if ( NumberOfOrders(NULL,OP_SELLLIMIT, -1)< N ) { 
// и число выставленных бай-лим. ордеров всё ещё меньше заданнОго значения N, -
//то  выставляем еще ордера:
OrderSend(Symbol(),OP_SELLLIMIT,lot_new,price_tp,15,0,0,"хи-хи",0,0,Blue);  
           
           }// если число выставленных .... 
        }//если текущая цена >= заданной
//--------------------- конец блока установки селл/лимит ------

 ... ... ... ...

  return(0); 
 } // конец функции СТАРТ

//====== Пользовательcкие функции ==================

//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает количество ордеров.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ko=0, ot;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) ko++;
        } }}}  return(ko);}

Аналогично в ф-и СТАРТ распишите и часть кода для установки СЕлл-стопов.

А сама Функция NumberOfPositions() - установлена вне функции СТАРТ

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий