Задача по поиску ордеров

 

В общем суть следующая ищу варианты кода по поиску ордеров.

Задача стоит следующая:

1 :

Получать информацию о максимальном ордере по цене и по типу ордера ( Бай / Селл ) самый верхний

Получать информацию о минимальном  ордере по цене и по типу ордера ( Бай / Селл ) самый нижний

Получать информацию о последнем ордере по времени и по типу ордера ( Бай / Селл )

Получать информацию о первом  ордере по времени и по типу ордера ( Бай / Селл )

2 :

Получать информацию о предпоследнем максимальном ордере по цене и по типу ордера ( Бай / Селл )

Получать информацию о предпоследнем минимальном  ордере по цене и по типу ордера ( Бай / Селл )

Получать информацию о предпоследнем ордере по времени и по типу ордера ( Бай / Селл )

Получать информацию о втором  ордере по времени и по типу ордера ( Бай / Селл )

Под информацией подразумевается всё инфо о ордере (символ, лот, цена ......)

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

 
Vladimir Pastushak:

В общем суть следующая ищу варианты кода по поиску ордеров.


А Вы хотите мониторить действующие ордера?

MQL4 или MQL5? 

 
Михаил:
А Вы хотите мониторить действующие ордера?
Да только не все, а максимальные/минимальные по цене и первые и последние по времени, по 2 штуки, то есть    последний и предпоследний..
 
Vladimir Pastushak:

В общем суть следующая ищу варианты кода по поиску ордеров.

Задача стоит следующая:

1 :

Получать информацию о максимальном ордере по цене и по типу ордера ( Бай / Селл ) самый верхний

Получать информацию о минимальном  ордере по цене и по типу ордера ( Бай / Селл ) самый нижний

Получать информацию о последнем ордере по времени и по типу ордера ( Бай / Селл )

Получать информацию о первом  ордере по времени и по типу ордера ( Бай / Селл )

2 :

Получать информацию о предпоследнем максимальном ордере по цене и по типу ордера ( Бай / Селл )

Получать информацию о предпоследнем минимальном  ордере по цене и по типу ордера ( Бай / Селл )

Получать информацию о предпоследнем ордере по времени и по типу ордера ( Бай / Селл )

Получать информацию о втором  ордере по времени и по типу ордера ( Бай / Селл )

Под информацией подразумевается всё инфо о ордере (символ, лот, цена ......)

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

Да. Владимир - это ВЕЛИКАЯ задача! :-)

Вы подскажите куда си торговать?

 
Vladimir Pastushak:
Да только не все, а максимальные/минимальные по цене и первые и последние по времени, по 2 штуки, то есть    последний и предпоследний..

Это не сложно, ведь вы устанавливаете ордера.

Вот и записывайте в память данные о двух последних BUY и двух последних Sell 

И ничего не нужно будет искать. 

struct MEM_ORDER
{
  ulong ticket;
  long ord_type;
  double price;
};
struct MEM_ORDERS
{
  bool      is_first_buy;
  bool      is_first_sell;
  MEM_ORDER buy_oders[2];
  MEM_ORDER sell_oders[2];
};
 
Михаил:

Это не сложно, ведь вы устанавливаете ордера.

Вот и записывайте в память данные о двух последних BUY и двух последних Sell 

И ничего не нужно будет искать. 

Я думал о таком решении, но меня не устроило то что в момент перезагрузки советника/терминала происходит перенициализация и все данные при прошлой работе будут утеряны.

Я считаю что надежным методом работы это сбор данных о окружении в момент работы советника.

 
Vladimir Pastushak:

Я думал о таком решении, но меня не устроило то что в момент перезагрузки советника/терминала происходит перенициализация и все данные при прошлой работе будут утеряны.

Я считаю что надежным методом работы это сбор данных о окружении в момент работы советника.

А что Вам мешает, при выходе из советника сохранять данные в файл, а при загрузке - загружать из файла?

//| Expert Load setings function                                     |
//+------------------------------------------------------------------+
void LoadSettings()
{
  string file_name = _Symbol + ".dat";
  int file_handle;
//---  
  if ( FileIsExist( file_name, 0 ) )
  {
    file_handle = FileOpen( file_name, FILE_READ|FILE_BIN );
    
    if ( file_handle != INVALID_HANDLE )
    {
      e_high = FileReadLong( file_handle );
      a_profit = FileReadLong( file_handle );
      e_low = FileReadLong( file_handle );
      ord_delta_high = FileReadLong( file_handle );
      ord_delta_low = FileReadLong( file_handle );
      order_delta = FileReadLong( file_handle );
      exit_delta = FileReadLong( file_handle );
      FileClose( file_handle );
    }
  } 
}

//+------------------------------------------------------------------+
//| Expert Save settings function                                    |
//+------------------------------------------------------------------+
void SaveSettings()
{
  string file_name = _Symbol + ".dat";
  int file_handle;
  bool file_found = true;
//---  
  if ( FileIsExist( file_name, 0 ) )
  {
    if ( FileDelete( file_name, 0 ) ) file_found = false;
  }
  else
  {
    file_found = false;
  }
//---
  if ( ! file_found )
  {
    file_handle = FileOpen( file_name, FILE_WRITE|FILE_BIN );
    
    if ( file_handle != INVALID_HANDLE )
    {
      FileWriteLong( file_handle, e_high );
      FileWriteLong( file_handle, a_profit );
      FileWriteLong( file_handle, e_low );
      FileWriteLong( file_handle, ord_delta_high );
      FileWriteLong( file_handle, ord_delta_low );
      FileWriteLong( file_handle, order_delta );
      FileWriteLong( file_handle, exit_delta );
      FileClose( file_handle );
    }
  } 
}
 
Михаил:

А что Вам мешает, при выходе из советника сохранять данные в файл, а при загрузке - загружать из файла?

Это конечно хорошо, но не надежно, так как за время перезагрузки окружение может измениться.
 
Vladimir Pastushak:
Это конечно хорошо, но не надежно, так как за время перезагрузки окружение может измениться.

Закрывайте все ордера, перед выходом.

Это всё-равно нужно делать 

 
Михаил:

Закрывайте все ордера, перед выходом.

Это всё-равно нудно делать 

не предвиденные перезагрузки приведут к беде...

Я написал класс...

 
Vladimir Pastushak:

не предвиденные перезагрузки приведут к беде...

Я написал класс...

Не смешите народ....

Если будет что-то непредвиденное, никакие классы не спасут! 

Если "рухнула" винда или терминал, то при инициализации советника заново,

я просто "смотрю" на активные ордера и закрываю их, т.к нет над ними контроля.

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