OrderCheck

OrderCheck() fonksiyonu, istenen alım-satım işlemini gerçekleştirebilmek için, hesapta yeterli para olup olmadığını kontrol eder. Kontrol sonuçları MqlTradeCheckResult yapısındaki ilgili alanlara yerleştirilir.

bool  OrderCheck(
   MqlTradeRequest&       request,      // istek yapısı
   MqlTradeCheckResult&   result        // sonuç yapısı
   );

Parametreler

request

[in]  İstenen alım-satım işlemini tanımlayan MqlTradeRequest tipi yapının işaretçisi.

result

[in,out]  Sonuçların yerleştirileceği MqlTradeCheckResult tipi yapının işaretçisi.

Dönüş değeri

Fon miktarı istenen işlem için yetersizse veya parametreler hatalı doldurulmuşsa 'false' dönüşü yapar. Yapıların (yapı işaretçilerinin) başarıyla kontrol edilmesi durumunda 'true' dönüşü yapar'. Ama bu, istenen alım-satım işleminin kesin olarak gerçekleşeceği anlamına gelmez. Fonksiyonun çalıştırılmasının sonuçlarının detaylı açıklamaları için, result yapısının alanlarını analiz ediniz.

Hata hakkında bilgi almak için GetLastError() fonksiyonunu çağırın.

Örnek:

#define   DEVIATION     5              // fiyattan izin verilen sapma
#define   VOLUME        1.0            // emir hacmi
#define   EXPERT_MAGIC  123            // Uzman Danışmanın sihirli sayısı
#define   DIRECTION     ORDER_TYPE_BUY // pozisyon açılış yönü (ORDER_TYPE_BUY veya ORDER_TYPE_SELL)
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- talep, doğrulama ve sonuç yapılarını bildir ve başlat
   MqlTradeRequest     request={};
   MqlTradeCheckResult check  ={};
   MqlTradeResult      result ={};
   
//--- işlem talebi parametrelerini hazırla
   PrepareRequest(_SymbolDIRECTIONVOLUMErequest);
   
//--- işlem talebi parametrelerini kontrol et
   ResetLastError();
   bool res=OrderCheck(requestcheck);
   if(!res)
     {
      PrintFormat("Trade request verification completed with error %d\nServer retcode: %u, comment: %s"GetLastError(), check.retcodecheck.comment);
      return;
     }
     
//--- işlem talebi kontrolü başarılı oldu - işlem talebi doğrulama yapısı alanlarının açıklamasını görüntüle
   Print("Trade request verification completed successfully");
   MqlTradeCheckResultPrint(check14);
   
//--- bir işlem talebi gönder
   if(!OrderSend(requestresult))
      Print("OrderSend error "GetLastError());    // talep gönderilemiyorsa, hata kodunu görüntüle
      
//--- sonuç hakkında bilgi
   PrintFormat("Trade request result: retcode=%u, deal=%I64u, order=%I64u"result.retcoderesult.dealresult.order);
   /*
   müşteri terminalinde otomatik alım-satımın devre dışı olması durumunda sonuç:
   Trade request verification completed with error 4752
   Server retcode10027commentAutoTrading disabled by client
   
   otomatik alım-satım etkin ve kapalı piyasada kontrol:
   Experts   automated trading is enabled
   Trade request verification completed successfully
   Retcode:      0
   Balance:      10779.50 USD
   Equity:       10779.50 USD
   Profit:       0.00 USD
   Margin:       1104.79 USD
   Margin free:  9674.71 USD
   Margin level975.71 %
   Comment:      Done
   OrderSend error 4756
   Trade request resultretcode=10018deal=0order=0
   
   açık piyasada kontrol:
   Trade request verification completed successfully
   Retcode:      0
   Balance:      10779.50 USD
   Equity:       10779.50 USD
   Profit:       0.00 USD
   Margin:       110.46 USD
   Margin free:  10669.04 USD
   Margin level9758.74 %
   Comment:      Done
   Trade request resultretcode=10009deal=2777010968order=2802818813
   */
  }
//+------------------------------------------------------------------+
//| Bir işlem talebi için parametreleri hazırla                      |
//+------------------------------------------------------------------+
void PrepareRequest(const string symbolconst ENUM_ORDER_TYPE order_typeconst double volumeMqlTradeRequest &request)
  {
   ENUM_ORDER_TYPE type=(DIRECTION !=ORDER_TYPE_BUY ? ORDER_TYPE_SELL : DIRECTION);
   double price=(DIRECTION==ORDER_TYPE_BUY ? SymbolInfoDouble(Symbol(), SYMBOL_ASK) : SymbolInfoDouble(Symbol(), SYMBOL_BID));
//--- talep parametreleri
   request.action    = TRADE_ACTION_DEAL// işlem türü
   request.symbol    = symbol;            // sembol
   request.volume    = volume;            // hacim
   request.type      = type;              // emir türü
   request.price     = price;             // açılış fiyatı
   request.deviation = DEVIATION;         // fiyattan izin verilen sapma
   request.magic     = EXPERT_MAGIC;      // emir sihirli sayısı
  }
//+------------------------------------------------------------------+
//| İşlem talebi doğrulama sonucu alanlarını                         |
//| günlüğe yazdır                                                   |
//+------------------------------------------------------------------+
void MqlTradeCheckResultPrint(const MqlTradeCheckResult &checkconst uint header_width=0)
  {
//--- hesap para birimini ve hesap para birimi için ondalık basamak sayısını al
   string currency=AccountInfoString(ACCOUNT_CURRENCY);
   int    digits  =(int)AccountInfoInteger(ACCOUNT_CURRENCY_DIGITS);
   
//--- başlık metnini ve başlık alanının genişliğini tanımla
//--- başlık genişliği fonksiyona sıfıra eşit olarak aktarılırsa, genişlik başlık satırının boyutu + 1 olacaktır
   string header="Retcode:";
   uint w=(header_width==0 ? header.Length()+1 : header_width);
//--- geri dönüş kodunu belirtilen başlık genişliğiyle günlükte görüntüle
   PrintFormat("%-*s%-u"wheadercheck.retcode);
   
//--- işlem gerçekleştirildikten sonraki bakiye değerini günlükte görüntüle
   header="Balance:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.balancecurrency);
   
//--- işlem gerçekleştirildikten sonraki varlık değerini günlükte görüntüle
   header="Equity:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.equitycurrency);
      
//--- işlem gerçekleştirildikten sonraki gerçekleşmemiş kâr değerini günlükte görüntüle
   header="Profit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.profitcurrency);      
      
//--- gerekli alım-satım işlemi için gereken teminat miktarını günlükte görüntüle
   header="Margin:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.margincurrency);      
      
//--- işlem gerçekleştirildikten sonra kalacak varlık değerini günlükte görüntüle
   header="Margin free:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.margin_freecurrency);      
      
//--- işlem gerçekleştirildikten sonra oluşacak teminat seviyesini günlükte görüntüle
   header="Margin level:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.2f %%"wheadercheck.margin_level);      
      
//--- yanıt kodu ve hata açıklamasına ilişkin yorumu günlükte görüntüle
   header="Comment:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-s"wheadercheck.comment);      
  }

Ayrıca Bakınız

OrderSend(), Alım-Satım İşlemi Tipleri, Alım-Satım İsteği Yapısı, Alım-Satım İstek Sonucu için Kontrol Yapısı, Bir Alım-Satım İsteği Sonucunun Yapısı