Найти лучшую цену из открытых сделок и текущего Bid/Ask

 

Коллеги, подскажите:

Есть 2-5 сделок Sell и 1 Buy.

Получаю новый сигнал Sell, нужно решить - лучше цена по новому сигналу или хуже уже открытых (новый Sell должен быть выше открытых ранее). Лучше - открываю Sell.

Аналогично для Buy.

 

Как правильно осуществить проверку? 

 
Vitaliy Hudyakov:

Коллеги, подскажите:

Есть 2-5 сделок Sell и 1 Buy.

Получаю новый сигнал Sell, нужно решить - лучше цена по новому сигналу или хуже уже открытых (новый Sell должен быть выше открытых ранее). Лучше - открываю Sell.

Аналогично для Buy.

 

Как правильно осуществить проверку? 

Уточните - Вы хотите произвести поиск среди всех ПОЗИЦИЙ или нужен поиск по сделкам в истории?
 
Vladimir Karputov:
Уточните - Вы хотите произвести поиск среди всех ПОЗИЦИЙ или нужен поиск по сделкам в истории?

 

Только среди открытых позиций

- для нового сигнала Sell - ищу среди открытых на данный момент коротких (Sell) позиций

- для нового сигнала Buy - среди открытых на данный момент длинный (Buy) позиций 

 
Vitaliy Hudyakov:

 

Только среди открытых позиций 

Тогда такая функция:

void UpDownPrices(ENUM_POSITION_TYPE pos_type,double &up_price,double &down_price)
  {
//--- обнулим цены - мало-ли какое там занчение пришло :)
   up_price=0.0;
   down_price=0.0;
   int count=0;
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
            if(m_position.PositionType()==pos_type) // gets the position type
              {
               double price_open=m_position.PriceOpen();
               if(count==0)
                 {
                  up_price=down_price=price_open;
                  continue;              
                 }
               if(price_open>up_price)
                  up_price=price_open;
               if(price_open<down_price)
                  down_price=price_open;
               count++;
              }
  }

Перед её вызовом нужно объявить две переменные - для самой высокой и для самой низкой цены. В функцию, кроме этого нужно передать тип позиции, для которой Вы ищите цены

ENUM_POSITION_TYPE

Идентификатор

Описание

POSITION_TYPE_BUY

Покупка

POSITION_TYPE_SELL

Продажа


То есть функция ищет самую высокую и самую низкую цену среди того типа позиций, который Вы её сообщите.
 

 
Vladimir Karputov:

Тогда такая функция:

void UpDownPrices(ENUM_POSITION_TYPE pos_type,double &up_price,double &down_price)
  {
//--- обнулим цены - мало-ли какое там занчение пришло :)
   up_price=0.0;
   down_price=0.0;
   int count=0;
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
            if(m_position.PositionType()==pos_type) // gets the position type
              {
               double price_open=m_position.PriceOpen();
               if(count==0)
                 {
                  up_price=down_price=price_open;
                  continue;              
                 }
               if(price_open>up_price)
                  up_price=price_open;
               if(price_open<down_price)
                  down_price=price_open;
               count++;
              }
  }

Перед её вызовом нужно объявить две переменные - для самой высокой и для самой низкой цены. В функцию, кроме этого нужно передать тип позиции, для которой Вы ищите цены

ENUM_POSITION_TYPE

Идентификатор

Описание

POSITION_TYPE_BUY

Покупка

POSITION_TYPE_SELL

Продажа


То есть функция ищет самую высокую и самую низкую цену среди того типа позиций, который Вы её сообщите.
 

 

Владимир, благодарю! Сейчас попробую, отпишусь ... 

 
Vitaliy Hudyakov:

 

Владимир, благодарю! Сейчас попробую, отпишусь ... 

 
Vladimir Karputov:

Тогда такая функция:

void UpDownPrices(ENUM_POSITION_TYPE pos_type,double &up_price,double &down_price)
  {
//--- обнулим цены - мало-ли какое там занчение пришло :)
   up_price=0.0;
   down_price=0.0;
   int count=0;
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
            if(m_position.PositionType()==pos_type) // gets the position type
              {
               double price_open=m_position.PriceOpen();
               if(count==0)
                 {
                  up_price=down_price=price_open;
                  continue;              
                 }
               if(price_open>up_price)
                  up_price=price_open;
               if(price_open<down_price)
                  down_price=price_open;
               count++;
              }
  }

Перед её вызовом нужно объявить две переменные - для самой высокой и для самой низкой цены. В функцию, кроме этого нужно передать тип позиции, для которой Вы ищите цены

ENUM_POSITION_TYPE

Идентификатор

Описание

POSITION_TYPE_BUY

Покупка

POSITION_TYPE_SELL

Продажа


То есть функция ищет самую высокую и самую низкую цену среди того типа позиций, который Вы её сообщите.
 

 

Владимир, добрый день!

Был в отъезде, только сел за работу.
Я правильно понял - вы скинули код для MQL5? Я сову на 4-ке пишу. 

 
Vitaliy Hudyakov:

 

Владимир, добрый день!

Был в отъезде, только сел за работу.
Я правильно понял - вы скинули код для MQL5? Я сову на 4-ке пишу. 

Да, код для MQL5.

Вопросы по старому терминалу пожалуйста задавайте в разделе: MQL4 и MetaTrader 4

 
Vladimir Karputov:

Да, код для MQL5.

Вопросы по старому терминалу пожалуйста задавайте в разделе: MQL4 и MetaTrader 4

 

Владимир, я думал что по роботам на MQL4 сюда тоже можно и забыл в топике указать про 4-ку.

А вы можете подсказать как эта функция на 4-ке будет выглядеть? 

 
Vitaliy Hudyakov:

 

Владимир, я думал что по роботам на MQL4 сюда тоже можно и забыл в топике указать про 4-ку.

А вы можете подсказать как эта функция на 4-ке будет выглядеть? 

Я не консультирую по старому терминалу. Подсказывать по старому терминалу это всё равно, что продлевать медленную смерть обреченному, а я не изверг :)
 
Vladimir Karputov:
Я не консультирую по старому терминалу. Подсказывать по старому терминалу это всё равно, что продлевать медленную смерть обреченному, а я не изверг :)

 

я смогу перейти на 5-ку не ранее чем через полгода :-(  

Причина обращения: