Processing
Processing
Processing
Main processing algorithm.
virtual bool Processing()Return Value
true - trade operation has been executed, otherwise - false.
Note
It does the following steps:
- Checks the presence of the opened position on the symbol. If there is no opened position, skip steps 2, 3, and 4.
- Checks conditions to reverse opened position (CheckReverse() method). If position has been “reversed”, exit.
- Checks conditions to close position (CheckClose() method). If position has been closed, skip step 4.
- Checks conditions to modify position parameters (CheckTrailingStop() method). If position parameters have been modified, exit.
- Check the presence of pending orders on the symbol. If there is no any pending order, go to step 9.
- Checks condition to delete order (CheckDeleteOrderLong() for buy pending orders or CheckDeleteOrderShort() for sell pending orders). If the order has been deleted, go to step 9.
- Check conditions to modify pending order parameters (CheckTrailingOrderLong() for buy orders or CheckTrailingOrderShort() for sell orders). If the order parameters have been modified, exit.
- Exit.
- Checks conditions to open position (CheckOpen() method).
If you want to implement your own algorithm, you need to override the Processing() method of the descendant class.
Implementation
//+------------------------------------------------------------------+
//| Main function |
//| INPUT: no. |
//| OUTPUT: true-if any trade operation processed, false otherwise. |
//| REMARK: no. |
//+------------------------------------------------------------------+
bool CExpert::Processing()
{
//--- check if open positions
if(m_position.Select(m_symbol.Name()))
{
//--- open position is available
//--- check the possibility of reverse the position
if(CheckReverse()) return(true);
//--- check the possibility of closing the position/delete pending orders
if(!CheckClose())
{
//--- check the possibility of modifying the position
if(CheckTrailingStop()) return(true);
//--- return without operations
return(false);
}
}
//--- check if placed pending orders
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)
{
//--- check the ability to delete a pending order to buy
if(CheckDeleteOrderLong()) return(true);
//--- check the possibility of modifying a pending order to buy
if(CheckTrailingOrderLong()) return(true);
}
else
{
//--- check the ability to delete a pending order to sell
if(CheckDeleteOrderShort()) return(true);
//--- check the possibility of modifying a pending order to sell
if(CheckTrailingOrderShort()) return(true);
}
//--- return without operations
return(false);
}
}
//--- check the possibility of opening a position/setting pending order
if(CheckOpen()) return(true);
//--- return without operations
return(false);
}Last updated on