处理

主要处理算法。

virtual bool  Processing()

返回值

true 如果交易操作已被执行, 否则 false。

注释

它进行以下步骤:

1. 检查该品种是否有已开仓位。若无已开仓位, 跳过步骤 #2, #3 和 #4。
2. 检查已开仓位的反转条件 (CheckReverse() 方法)。如果仓位已被 "反转", 退出。
3. 检查平仓条件 (CheckClose() 方法)。如果仓位已平仓, 跳过步骤 #4。
4. 检查修改仓位参数的条件 (CheckTrailingStop() 方法)。如果仓位参数已被修改, 退出。
5. 检查该品种是否有已开挂单。若没有任何挂单, 直接到步骤 #9。
6. 检查删除订单的条件 (CheckDeleteOrderLong() 对应多头挂单, 或者 CheckDeleteOrderShort() 对应空头挂单)。如果订单已被删除, 直接到步骤 #9。
7. 检查修改挂单参数的条件 (CheckTrailingOrderLong() 对应多头挂单, 或者 CheckTrailingOrderShort() 对应空头挂单)。如果订单参数已被修改, 退出。
8. 退出。
9. 检查开仓条件 (CheckOpen()) 方法)。

若您打算实现您自己的算法, 您需要覆盖其子类的 Processing()  方法。

实现

//+------------------------------------------------------------------+
//| 主函数                                                    |
//| 输入:  无。                                                     |
//| 输出: true-如果任何交易操作已处理, 否则 false。 |
//| 备注: 无。                                                     |
//+------------------------------------------------------------------+
bool CExpert::Processing()
  {
//--- 检查是否开仓
   if(m_position.Select(m_symbol.Name()))
     {
      //--- 可以开仓
      //--- 检查反转仓位的可能性
      if(CheckReverse()) return(true);
      //--- 检查平仓/删除挂单的可能性
      if(!CheckClose())
        {
         //--- 检查修改仓位的可能性
         if(CheckTrailingStop()) return(true);
         //--- 返回无操作
         return(false);
        }
     }
//--- 检查是否放置挂单
   int total=OrdersTotal();
   if(total!=0)
     {
      for(int i=total-1;i>=0;i--)
        {
         m_order.SelectByIndex(i);
         if(m_order.Symbol()!=m_symbol.Name()) continue;
         if(m_order.OrderType()==ORDER_TYPE_BUY_LIMIT || m_order.OrderType()==ORDER_TYPE_BUY_STOP)
           {
            //--- 检查删除多头挂单能力
            if(CheckDeleteOrderLong()) return(true);
            //--- 检查修改多头挂单的可能性
            if(CheckTrailingOrderLong()) return(true);
           }
         else
           {
            //--- 检查删除空头挂单的可能性
            if(CheckDeleteOrderShort()) return(true);
            //--- 检查修改空头挂单的可能性
            if(CheckTrailingOrderShort()) return(true);
           }
         //--- 返回无操作
         return(false);
        }
     }
//--- 检查开仓/设置挂单可能性
   if(CheckOpen()) return(true);
//--- 返回无操作
   return(false);
  }