Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй статью. Получи вознаграждение!
Андрей
492
Андрей 2010.11.18 11:14 

Добрый день!

Подскажите почему когда есть открытая позиция код

void OnStart()
  {
   int total=OrdersTotal();
   Print("Количество действующих ордеров = "+total); 
  }

выводит сообщение  Количество действующих ордеров = 0

даже код приведенный примером в справке(для метода OrderGetTicket) кстати содержит ошибки при компиляции (пришлось комент вставить перед positionID) ничего не выводит

void OnStart()
  {
   datetime from=0;
   datetime to=TimeCurrent();
//--- запросить всю историю
   HistorySelect(from,to);
//--- переменные для получения значений из свойств ордера
   ulong    ticket;
   double   open_price;
   double   initial_volume;
   datetime time_setup;
   string   symbol;
   string   type;
   long     order_magic;
//--- количество текущих отложенных ордеров
   uint     total=OrdersTotal();
//--- пройдем в цикле по всем ордерам
   for(uint i=0;i<total;i++)
     {
      //--- получим тикет ордера по его позиции в списке
      if(ticket=OrderGetTicket(i))
        {
         //--- получим свойства ордера
         open_price=       OrderGetDouble(ORDER_PRICE_OPEN);
         time_setup=       OrderGetInteger(ORDER_TIME_SETUP);
         symbol=           OrderGetString(ORDER_SYMBOL);
         order_magic=      OrderGetInteger(ORDER_MAGIC);
         positionID =      OrderGetInteger(ORDER_POSITION_ID);
         initial_volume=   OrderGetDouble(ORDER_VOLUME_INITIAL);
         type=GetOrderType(OrderGetInteger(ORDER_TYPE));
         //--- подготовим и выведм информацию об ордере
         printf("#ticket %d %s %G %s at %G was set up at %s",
                ticket,                 // тикет ордера
                type,                   // тип
                initial_volume,         // выставленный объем
                symbol,                 // символ, по которому выставили
                open_price,             // указанная цена открытия
                TimeToString(time_setup)// время установки ордера
                );
        }
     }
//---
  }
//+------------------------------------------------------------------+
//|  возвращает строковое наименование типа ордера                   |
//+------------------------------------------------------------------+
string GetOrderType(long type)
  {
   string str_type="unknown operation";
   switch(type)
     {
      case (ORDER_TYPE_BUY):            return("buy");
      case (ORDER_TYPE_SELL):           return("sell");
      case (ORDER_TYPE_BUY_LIMIT):      return("buy limit");
      case (ORDER_TYPE_SELL_LIMIT):     return("sell limit");
      case (ORDER_TYPE_BUY_STOP):       return("buy stop");
      case (ORDER_TYPE_SELL_STOP):      return("sell stop");
      case (ORDER_TYPE_BUY_STOP_LIMIT): return("buy stop limit");
      case (ORDER_TYPE_SELL_STOP_LIMIT):return("sell stop limit");
     }
   return(str_type);
  }
Vladimir Batrudinov
4917
Vladimir Batrudinov 2010.11.18 11:26  
snik_666:

Добрый день!

Подскажите почему когда есть открытая позиция код

выводит сообщение  Количество действующих ордеров = 0

даже код приведенный примером в справке(для метода OrderGetTicket) кстати содержит ошибки при компиляции (пришлось комент вставить перед positionID) ничего не выводит


Не стоит путать понятия Ордер и Позиция.

Все что относится к группе Order*** предназначено для оложников (pending orders), для работы с позициями существует свой функционал.

При исполнении отлоника, на сервере создается новая сделка, которая в свою очередь создает новую позции или изменяет уже существующую - НЕТТИНГ, одним словом.

PS

Также теперь стоить помнить о том, что НЕТТИНГ нынче рулит, а следовательно, сделки СКЛЕИВАЮТСЯ в одну позицию (при этом SL, TP и комментарий последней сделки выставляются позиции)...

Sergey Gritsay
6241
Sergey Gritsay 2010.11.18 13:46  
snik_666:

Добрый день!

Подскажите почему когда есть открытая позиция код

выводит сообщение  Количество действующих ордеров = 0

даже код приведенный примером в справке(для метода OrderGetTicket) кстати содержит ошибки при компиляции (пришлось комент вставить перед positionID) ничего не выводит


Надо так

void OnStart()
  {
   int Ordertotal=OrdersTotal();
   int Positiontotal=PositionsTotal();
   Print("Количество Отложенных ордеров = ",Ordertotal); 
   Print("Количество Открытых позиций = ",Positiontotal);
  }
vda
325
vda 2011.01.24 06:06  
sergey1294:

Надо так

void OnStart()
  {
   int Ordertotal=OrdersTotal();
   int Positiontotal=PositionsTotal();
   Print("Количество Отложенных ордеров = ",Ordertotal); 
   Print("Количество Открытых позиций = ",Positiontotal);
  }

Подтверждаю, на своем коде проверил, спасиб Сергей и мне поммог.


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