搜索订单的任务

Vladimir Pastushak  

基本上,要点如下,我正在寻找搜索订单的代码选项。

任务如下。

1 :

获得按价格和按订单类型(买入/卖出)排列的最大订单信息的最顶端

要获得按价格和订单类型(买入/卖出)的最低订单信息。

按时间和订单类型(买入/卖出)获取最后的订单信息

按时间和订单类型(买入/卖出)获取第一笔订单的信息。

2 :

获得有关最后但最大的价格和订单类型(买入/卖出)的信息

通过价格和订单类型(买入/卖出)获得最后但最低的订单信息(买入/卖出)。

按时间和订单类型(买入/卖出)获取最近但只有一个订单的信息。

获取第二个订单的时间和订单类型(买入/卖出)的信息。

该信息包括关于订单的所有信息(符号、手数、价格......)。

程序化编程方式早就解决了这个问题,现在我想简化它,做一个类,但我想不出什么有用的东西......。

Mikhail Filimonov  
Vladimir Pastushak:

总之,重点是:我正在寻找搜索订单的代码选项。


你想监测活跃的订单吗?

MQL4或MQL5?

Vladimir Pastushak  
Михаил:
你想监测活跃的订单吗?
不是全部,而是按价格计算的最高/最低价,按时间计算的第一和最后一个,每次两个,即最后和倒数第二个......
Roman Shiredchenko  
Vladimir Pastushak:

基本上,要点如下,我正在寻找搜索订单的代码选项。

任务如下。

1 :

获得按价格和按订单类型(买入/卖出)排列的最大订单信息的最顶端

要获得按价格和订单类型(买入/卖出)的最低订单信息。

按时间和订单类型(买入/卖出)获取最后的订单信息

按时间和订单类型(买入/卖出)获取第一笔订单的信息。

2 :

获得有关最后但最大的价格和订单类型(买入/卖出)的信息

通过价格和订单类型(买入/卖出)获得最后但最低的订单信息(买入/卖出)。

按时间和订单类型(买入/卖出)获取最近但只有一个订单的信息。

获取第二个订单的时间和订单类型(买入/卖出)的信息。

该信息包括关于订单的所有信息(符号、手数、价格......)。

程序化编程方式早就解决了这个问题,现在我想简化它,做一个类,但我想不出什么有用的东西......。

是的,弗拉基米尔--这是一项伟大的任务!:-)

你能告诉我该去哪里吗?

Mikhail Filimonov  
Vladimir Pastushak:
只不过不是全部,而是按价格计算的最高/最低,按时间计算的第一和最后,各占2个,即最后和倒数第二...

这并不难,因为你是在制定命令。

因此,你会记得过去的两个 "买入 "和最后两个 "卖出"。

而且你不必去寻找任何东西。

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];
};
Vladimir Pastushak  
Михаил:

这并不难,因为你是在制定命令。

因此,你会记得过去的两个 "买入 "和最后两个 "卖出"。

而且你不必去寻找任何东西。

我想到了这样一个解决方案,但我不满意的是,当EA/终端被重新加载时,它被重新初始化,过去工作的所有数据将丢失。

我认为最可靠的工作方式是在EA工作时收集有关环境的数据。

Mikhail Filimonov  
Vladimir Pastushak:

我想到了这样一个解决方案,但我不满意的是,当EA/终端被重新加载时,它被重新使用,之前工作的所有数据将丢失。

我认为,一个可靠的操作方法是收集EA操作时的环境数据。

又是什么阻止了你在退出EA时将数据保存到文件中,而当你加载时,从文件中加载?

//| 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  
Михаил:

是什么阻止你在离开EA时将数据保存到一个文件中,并在加载时从一个文件中加载?

这当然很好,但并不可靠,因为环境在重启过程中会发生变化。
Mikhail Filimonov  
Vladimir Pastushak:
这当然很好,但并不可靠,因为环境可能在重启期间发生变化。

在退出前关闭所有订单。

你仍然需要这样做。

Vladimir Pastushak  
Михаил:

在退出前关闭所有订单。

反正这也是一件乏味的事情。

意料之外的重新启动将导致麻烦...

我写了一个类...

Mikhail Filimonov  
Vladimir Pastushak:

意料之外的重启将导致麻烦...

我已经写了一个类...

不要让人笑....

如果发生了不可预见的事情,任何课程都无法拯救你!

如果windup或终端 "崩溃",那么EA将重新初始化。

我只是 "看看 "活跃的订单并关闭它们,因为对它们没有控制。

原因: