Processing

주 처리 알고리즘.

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. Exit.
9. 포지션 오픈에 대한 조건을 확인합니다(CheckOpen() 메서드).

고유한 알고리즘을 구현하려면 하위 클래스의 Processing()  메서드를 재정의해야 합니다.

Implementation

//+------------------------------------------------------------------+
//| 주 함수                                                    |
//| INPUT:  no.                                                      |
//| OUTPUT: 거래 작업이 처리되면 true, 그렇지 않으면 false.  |
//| 비고: no.                                                      |
//+------------------------------------------------------------------+
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);
  }