处理

主要处理算法。

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);

  }