搜索订单的任务 - 页 3

 
Игорь Герасько:

在实施不同的 "网格 "时,我想出了这个结构。

该结构在每一个新的刻度线上都会根据 "魔法号码 "值进行填充(它存储了识别订单所需的所有信息:订单号,它属于哪个网格,等等)。

这是我想出的代码

class Info
  {
private:
   struct str
     {
      string            Sym;                                // Символ ордера
      string            Com;                                // Коммент ордера
      int               Tic;                                // Тиккет ордера
      int               Typ;                                // Тип ордера
      int               Mag;                                // Меджик номер ордера
      double            Lot;                                // Лот ордера
      double            Pri;                                // Цена открытия ордера
      double            SL_;                                // Стоп лосс ордера
      double            TP_;                                // Тейк профит ордера
      datetime          Tim;                                // Время открытия ордера
      double            Pro;                                // Профит ордера
     };
   int               m_tick_upper;                          // Тиккет максимального по цене ордера
   int               m_tick_upper_;                         // Тиккет предпоследнего максимального по цене ордера
   int               m_tick_lower;                          // Тиккет минимального по цене ордера
   int               m_tick_lower_;                         // Тиккет предпоследнего минимального по цене оредра

   int               m_tick_start;                          // Тиккет первого по времени ордера
   int               m_tick_start_;                         // Тиккет вторго по времени ордера
   int               m_tick_end;                            // Тиккет последнего по времени ордера
   int               m_tick_end_;                           // Тиккет предпоследнего по времени ордера

   int               m_magic;                               // Меджик номер
   string            m_symbol;                              // Символ ордера

   void              SearchTicketPriceType(const int type); // Поиск по цене
   void              SearchTicketTimeType(const int type);  // Поиск по времени

public:

   str               Price_Max;                             // Структура запроса максимальных ценн
   str               Price_Min;                             // Структура запроса минимальных  ценн
   str               Time_End;                              // Структура последних ордеров
   str               Time_Start;                            // Структура начальных ордеров

   str               Price_Max2;                            // Структура запроса максимальных ценн
   str               Price_Min2;                            // Структура запроса минимальных  ценн
   str               Time_End2;                             // Структура последних ордеров
   str               Time_Start2;                           // Структура начальных ордеров

   void              SetMagic (const int    mag) { m_magic  = mag; } // Принудительное указание меджик номера
   void              SetSymbol(const string sym) { m_symbol = sym; } // Принудительное указание символа

   void              SearchTimeOrder(const int type);       // Заполнение структуры по времени      
   void              SearchPriceOrder(const int type);      // Заполнение структуры по ценам 

                     Info(const string sym,const int mag);  // Параметрический конструктор
                     Info(){};
                    ~Info(){};
  };
 
Михаил:
...

"顺便说一句--如果Windows停机了,EA也不能删除订单--这里只有手动,所以这个例子不能完全适用于自动交易。"

有可能,你可能不知道怎么做。如果感兴趣,我可以把代码贴出来。

不,你不需要这些代码。算法简述,如果你能...我真的不知道如何 在一个崩溃的操作系统中运行终端的EA
 
Artyom Trishkin:
不,你不需要密码。算法简而言之,如果你能...我真的不知道如何 在一个崩溃的操作系统中运行终端的EA

对我来说,把代码摆出来比解释它更容易。

//+------------------------------------------------------------------+
//| Expert Remove orders function                                    |
//+------------------------------------------------------------------+
void RemoveOrders()
{
  int orders_total = OrdersTotal();
//---  
  if ( orders_total > 0 )
  {
    for ( int i = 0; i < orders_total; i++ )
    {
      ulong temp_order_ticket = OrderGetTicket( i );
      
      if ( OrderSelect( temp_order_ticket ) )
      {
        string temp_symbol = OrderGetString( ORDER_SYMBOL );
        
        if ( temp_symbol == _Symbol )
        {
          RemoveOldOrder( temp_symbol, temp_order_ticket );
        }
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Expert remove old order function                                 |
//+------------------------------------------------------------------+
void RemoveOldOrder( const string symbol, const ulong ord_ticket )
{
  MqlTradeRequest request = {0};
  MqlTradeResult  result  = {0};
  
  request.action = TRADE_ACTION_REMOVE;
  request.order  = ord_ticket;
  
   if ( OrderSend( request, result ) )
   {
     if ( result.retcode == TRADE_RETCODE_PLACED )
     { 
//        SetTransCount( true );
     }
  }
  else
  {
    Print( "Удаление старого ордера не выполнено! Билет = ", ord_ticket);
  }
}
 
Vladimir Pastushak:

这是我想出的代码

妈的,伙计,***不要胡说八道。你自己定义了正确的方向:状态应该由当前环境来恢复,MT给你的是最可靠的选择。取而代之的是,你写了一个冗长而无用的类信息,你必须以某种方式把外部函数找到的值塞进它。是的,最终它将包含你需要的变量:订单价格方面的最高和最低票,以及其他对你来说重要的东西。但在现实中,这个问题是由一个专门的订单容器来解决的:想象一下,你有一个订单列表,其中每个订单代表一个有许多列的表行(订单ID,开盘时间,开盘价,利润,等等)。你按其中一列进行排序,得到的正是你需要的序列。因此,所有这些都可以在类的帮助下完成,你喜欢使用这些类(虽然毫无头绪,对不起)。如果你有兴趣,我明天会写如何做。
 
Vasiliy Sokolov:
妈的,伙计,***不要胡说八道。你自己已经确定了正确的方向:状态应该从目前的环境中恢复,MT给你的是最可靠的选择。取而代之的是,你写了一个冗长而无用的类信息,你必须以某种方式把外部函数找到的值塞进它。是的,最终它将包含你所需要的变量:订单价格方面的最高和最低票,以及其他对你重要的东西。但在现实中,这个问题是由一个专门的订单容器来解决的:想象一下,你有一个订单列表,其中每个订单代表一个有许多列的表行(订单ID,开盘时间,开盘价,利润,等等)。你按其中一列进行排序,得到的正是你需要的序列。因此,所有这些都可以在类的帮助下完成,你喜欢使用这些类(虽然毫无头绪,对不起)。如何做--如果你有兴趣,我明天再写。

非常渴望看到....

我需要的信息不是为了信息而信息,而是为了进一步处理和计算......。

 
Михаил:

对我来说,贴出代码比解释它更容易。

它将如何在一台坏掉的电脑上工作?(对于这些功能,一点也不奇怪)。

这就是为什么我说--我不需要代码。我需要一个能在不工作的电脑上工作的算法(轴是坏的,如果你记得一句话。"我真的不知道如何 在终端中运行专家顾问,这是在崩溃的操作系统上运行的",我不需要VPS和其他东西--认为,计算机、服务器等上的操作系统,即运行专家顾问的终端,已经崩溃了--你的代码是那里的膏药,... )。

 
Artyom Trishkin:

它将如何在一台坏掉的电脑上工作?(对于这些功能,一点也不奇怪)。

这就是为什么我说--我不需要代码。我需要一个能在不工作的电脑上工作的算法(因为操作系统坏了,如果你记得--我引用一下。"我真的不知道如何 在终端中运行专家顾问,这是在崩溃的操作系统上运行的",我不需要VPS和其他东西--认为,计算机、服务器等上的操作系统,即运行专家顾问的终端,已经崩溃了--你的代码是那里的膏药,...用我们的手,用我们的手......)。

我们来了,森林里的伪造者......。

让我们在这里完成我们的讨论吧!

 
Михаил:

我们来了,不管是好是坏...。

让我们在这里结束我们的讨论吧!

没问题。我已经厌倦了试图说明我的观点...
 
Artyom Trishkin:
没问题。我已经厌倦了试图表达我的观点......

底线是,即使服务器上的操作系统出现故障,你也可以运行一台家用电脑,在需要重新启动伺服机的时候恢复对账户的控制。

在我与VDS/VPS服务器的工作实践中,操作系统从未翻转过,但重启是不可预见的,也是预定发生的。

我的问题的实质是要有能力编写收集当前情况信息的代码...

 
Vladimir Pastushak:

...

我的问题的重点是正确地写代码,收集关于当前情况的信息...

你在这里写道,你已经用程序化的方式写过了。因此,你所要做的就是把它全部收集到一个类中。你也可以从函数调用 中删除一些参数,制定预设参数的方法(magik, symbol),但最好不要这样做。

当然,如果你没有事情可做,你可以走另一条路。阶级。它有Refresh()方法来获取订单列表(唯一可以返回false的方法)。其他方法使用这个列表。