Processing

Temel işleme algoritması.

virtual bool  Processing()

Dönüş değeri

İşlem uygulanmışsa 'true', aksi durumda 'false'.

Not

Şu adımları uygular:

1. Sembol üzerinde açık pozisyonların mevcudiyetini kontrol et. Açık bir pozisyon yoksa 2, 3 ve 4 numaralı adımları atla.
2. Açık pozisyon için ters çevirme koşullarını denetle (CheckReverse() yöntemi). Pozisyon "ters çevrilmişse" çık.
3. Pozisyon kapama koşullarını kontrol eder (CheckClose() yöntemi). Pozisyon kapalıysa 4 numaralı adım atla.
4. Pozisyon parametrelerinin değişimi için koşulları denetler (CheckTrailingStop() yöntemi). Pozisyon parametreleri değiştirilmişse çık.
5. Bekleyen emirlerin varlığını araştır. Bekleyen emir yoksa 9 numaralı adıma geç.
6. Emir silme için koşulları denetle (bekleyen alış emirleri için CheckDeleteOrderLong() veya bekleyen satış emirleri için CheckDeleteOrderShort()). Emir silinmişse 9 numaralı adıma geçer.
7. Bekleyen emirlerin parametrelerini değiştirmek için koşulları denetle (alış emirleri için CheckTrailingOrderLong(), satış emirleri için CheckTrailingOrderShort()). Parametreler değiştirilmişse çık.
8. Çık.
9. Pozisyon açma koşullarını denetle (CheckOpen()) yöntemi).

Kendi algoritmanızı yazmak istediğinizde, mirasçı sınıfın Processing()  yöntemini geçersiz kılmanız gerekir.

Uygulama

//+------------------------------------------------------------------+
//| Ana fonksiyon                                                    |
//| INPUT:  yok.                                                     |
//| OUTPUT: işlem gerçekleşmişse - true, aksi durumda - false.       |
//| REMARK: yok.                                                     |
//+------------------------------------------------------------------+
bool CExpert::Processing()
  {
//--- açık pozisyonları denetle
   if(m_position.Select(m_symbol.Name()))
     {
      //--- açık pozisyon mevcut
      //--- pozisyonu ters çevirmek için koşulları denetle
      if(CheckReverse()) return(true);
      //--- pozisyon kapama / bekleyen emirleri silme koşullarını denetle
      if(!CheckClose())
        {
         //--- pozisyon değişim için koşullarını denetle
         if(CheckTrailingStop()) return(true);
         //--- işlemsiz dönüş yap
         return(false);
        }
     }
//--- bekleyen emir yerleştirilmiş mi denetle
   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)
           {
            //--- bekleyen uzun (alış) emrin silinmesi için koşulları denetle
            if(CheckDeleteOrderLong()) return(true);
            //--- bekleyen uzun (alış) emrin değiştirilmesi için koşulları denetle
            if(CheckTrailingOrderLong()) return(true);
           }
         else
           {
            //--- bekleyen kısa (satış) emrin silinmesi için koşulları denetle
            if(CheckDeleteOrderShort()) return(true);
            //--- bekleyen kısa (satış) emrin değiştirilmesi için koşulları denetle
            if(CheckTrailingOrderShort()) return(true);
           }
         //--- işlemsiz dönüş yap
         return(false);
        }
     }
//--- pozisyon açma / bekleyen emir değiştirme koşullarını denetle
   if(CheckOpen()) return(true);
//--- işlemsiz dönüş yap
   return(false);
  }