Alım-Satım İsteği Yapısı (MqlTradeRequest)

Emir yerleştirme işleminin yapılması için müşteri terminali ve alım-satım sunucusu arasındaki etkileşim, alım-satım istekleri kullanılarak gerçekleştirilir. Alım-satım isteği, MqlTradeRequest tipli ön tanımlı özel bir yapı ile temsil edilir. Bu yapı, alım-satım işlemlerinin gerçekleştirilmesi için tüm gerekli alanları içerir. İstek sürecinin sonucu MqlTradeResult tipi ile temsil edilir.

struct MqlTradeRequest
  {
   ENUM_TRADE_REQUEST_ACTIONS    action;           // Alım-satım işlemi tipi
   ulong                         magic;            // Uzman Danışman kimliği (magic number)
   ulong                         order;            // Emir fişi
   string                        symbol;           // Alım-satım sembolü
   double                        volume;           // Lot bazında işlem için istenen hacim
   double                        price;            // Fiyat
   double                        stoplimit;        // Emrin StopLimit seviyesi
   double                        sl;               // Emrin Stop Loss (kaybı durdur) seviyesi
   double                        tp;               // Emrin Take Profit (kar al) seviyesi
   ulong                         deviation;        // İstenen fiyattan maksimum olası sapma
   ENUM_ORDER_TYPE               type;             // Emir tipi
   ENUM_ORDER_TYPE_FILLING       type_filling;     // Emir gerçekleştirme tipi
   ENUM_ORDER_TYPE_TIME          type_time;        // Emir zaman aşımı tipi
   datetime                      expiration;       // Emir zaman aşımı zamanı (ORDER_TIME_SPECIFIED tipi emirler için)
   string                        comment;          // Emir yorumu
   ulong                         position;         // Pozisyon fişi
   ulong                         position_by;      // Ters pozisyonun fişi
  };

Alanların açıklaması

Alan

Açıklama

action

Alım-satım işlem tipi. ENUM_TRADE_REQUEST_ACTIONS sayımının değerlerinden biri olabilir.

magic

Uzman danışman kimliği. Alım-satım emirlerinin analitik olarak işlenmesinin düzenlenmesini sağlar. Her bir Uzman Danışman bir alım-satım isteği gönderirken kendi benzersiz kimliğini ayarlayabilir.

order

Emir fişi. Bekleyen emirler göndermek için kullanılır.

symbol

Emir sembolü. Emir değişimi ve pozisyon kapatma işlemleri için gerekli değildir.

volume

Lot bazında istenen emir hacmi. İşlemin gerçek hacminin emir gerçekleştirme tipine bağlı olduğunu not edin.

price

Emrin uygulanması gereken seviyeye ulaşan fiyat. Gerçekleştirme tipi, TRADE_ACTION_DEAL tipinden "Market Execution" (SYMBOL_TRADE_EXECUTION_MARKET) olan, sembollerin piyasa emirleri; fiyat belirlemesi gerektirmez

stoplimit

fiyat, istenen fiyat değerine ulaştığında (bu koşul zorunludur), Limit bekleyen emrin işleme konulacağı fiyat değeri. O zamana kadar, bekleyen emirler işleme konulmaz.

sl

Olumsuz fiyat hareketi durumundaki Stop Loss (zararı durdur) fiyatı

tp

Olumlu fiyat hareketi durumundaki Take Profit (kar al) fiyatı

deviation

Puan bazında belirtilen maksimum fiyat sapması

type

Emir tipi. ENUM_ORDER_TYPE sayımının değerlerinden biri olabilir.

type_filling

Emir gerçekleştirme tipi. ENUM_ORDER_TYPE_FILLING sayımının değerlerinden biri olabilir.

type_time

Emir zaman aşımı tipi. ENUM_ORDER_TYPE_TIME sayımının değerlerinden biri olabilir.

expiration

Emir zaman aşımı zamanı (ORDER_TIME_SPECIFIED tipli emirler için)

yorum

Emir yorumu

position

Pozisyonun fişi. Bir pozisyon kapatılırken veya değiştirilirken pozisyonu tanımlamak için girilmelidir. Pozisyon hangi emrin sonucunda açılmışsa o emrin fişi pozisyonun fişiyle aynıdır.

position_by

Ters pozisyon fişi. Aynı sembol üzerindeki bir pozisyonu ters pozisyonla kapatmak için kullanılır.

Hedge'li sistemde bir pozisyonu değiştirirken veya kapatırken, pozisyonun fişini belirttiğinizden emin olun (MqlTradeRequest::poisition). Fiş numarası netleştirme sisteminde de belirtilebilir ama bu sistemde pozisyonlar sembol ismlerine göre tanımlanır.

Alım-satım işlemlerini gerçekleştirecek emirler yollamak için OrderSend() fonksiyonunun kullanılması gereklidir. Her bir alım-satım işlemi için zorunlu alanların belirtilmesi gereklidir; isteğe bağlı alanlar da ayrıca doldurulabilir. Bir alım-satım emrinin gönderilmesinde, yedi olası durum söz konusudur:

İstek İşlemi

İstek işlemi talep edilen fiyatlar üzerinden pozisyon açmaya yarayan bir alım-satım emridir. Şu 9 alanın belirtilmesini gerektirir:

  • action
  • symbol
  • volume
  • price
  • sl
  • tp
  • deviation
  • type
  • type_filling

Ayrıca "magic" ve "comment" alanlarının da belirtilmesi mümkündür.

Anlık İşlem

Anlık işlem (cari fiyatlar ile alım-satım) modunda pozisyon açan bir alım-satım emridir. Şu 9 alanın belirtilmesini gerektirir:

  • action
  • symbol
  • volume
  • price
  • sl
  • tp
  • deviation
  • type
  • type_filling

Ayrıca "magic" ve "comment" alanlarının da belirtilmesi mümkündür.

Piyasa İşlemi

Bu, Piyasa İşlemi modunda pozisyon açan bir alım-satım emridir. Şu 5 alanın belirtilmesini gerektirir:

  • action
  • symbol
  • volume
  • type
  • type_filling

Ayrıca "magic" ve "comment" alanlarının da belirtilmesi mümkündür.

Borsa İşlemi

Borsa İşlemi modunda pozisyon açan bir alım-satım emridir. Şu 5 alanın belirtilmesini gerektirir:

  • action
  • symbol
  • volume
  • type
  • type_filling

Ayrıca "magic" ve "comment" alanlarının da belirtilmesi mümkündür.

Alış pozisyonu açmak için TRADE_ACTION_DEAL işleminin bir örneği:

#define EXPERT_MAGIC 123456   // uzmanın tanıtıcı değeri (MagicNumber)
//+------------------------------------------------------------------+
//| Alış pozisyonu açılışı                                           |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- alım-satım isteğininin ve istek sonucunun bildirimini yap ve başlat
   MqlTradeRequest request={};
   MqlTradeResult  result={};
//--- istek parametreleri
   request.action   =TRADE_ACTION_DEAL;                     // alım-satım işleminin türü
   request.symbol   =Symbol();                              // sembol
   request.volume   =0.1;                                   // 0.1 lotluk hacim lot
   request.type     =ORDER_TYPE_BUY;                        // emir türü
   request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // açılış fiyatı
   request.deviation=5;                                     // izin verilen slipaj miktarı
   request.magic    =EXPERT_MAGIC;                          // emrin tanıtıcı değeri (MagicNumber)
//--- emri gönder
   if(!OrderSend(request,result))
      PrintFormat("OrderSend hatası %d",GetLastError());     // emir gönderilemiyorsa hata kodu göster
//--- işlem bilgileri
   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
  }
//+------------------------------------------------------------------+

 
Satış pozisyonu açmak için TRADE_ACTION_DEAL işleminin bir örneği:

#define EXPERT_MAGIC 123456   // uzmanın tanıtıcı değeri (MagicNumber)
//+------------------------------------------------------------------+
//| Satış pozisyonu açılışı                                          |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- alım-satım isteğininin ve istek sonucunun bildirimini yap ve başlat
   MqlTradeRequest request={};
   MqlTradeResult  result={};
//--- istek parametreleri
   request.action   =TRADE_ACTION_DEAL;                     // alım-satım işleminin türü
   request.symbol   =Symbol();                              // sembol
   request.volume   =0.2;                                   // 0.2 lotluk hacim
   request.type     =ORDER_TYPE_SELL;                       // emir türü
   request.price    =SymbolInfoDouble(Symbol(),SYMBOL_BID); // açılış fiyatı
   request.deviation=5;                                     // izin verilen slipaj miktarı
   request.magic    =EXPERT_MAGIC;                          // emrin tanıtıcı değeri (MagicNumber)
//--- emri gönder
   if(!OrderSend(request,result))
      PrintFormat("OrderSend hatası %d",GetLastError());     // emir gönderilemiyorsa hata kodu göster
//--- işlem bilgileri
   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
  }
//+------------------------------------------------------------------+

 
Pozisyon kapama için TRADE_ACTION_DEAL işleminin bir örneği:

#define EXPERT_MAGIC 123456   // uzmanın tanıtıcı değeri (MagicNumber)
//+------------------------------------------------------------------+
//| Tüm pozistonların kapatılması                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- alım-satım isteğininin ve istek sonucunun bildirimini yap ve başlat
   MqlTradeRequest request;
   MqlTradeResult  result;
   int total=PositionsTotal(); // açık pozisyonların sayısı   
//--- tüm pozisyonar için tekrarla
   for(int i=total-1; i>=0; i--)
     {
      //--- emir parametreleri
      ulong  position_ticket=PositionGetTicket(i);                                      // pozisyon fişi
      string position_symbol=PositionGetString(POSITION_SYMBOL);                        // sembol 
      int    digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS);              // basamak sayısı
      ulong  magic=PositionGetInteger(POSITION_MAGIC);                                  // pzisyonun tanıtıcı değeri (MagicNumber)
      double volume=PositionGetDouble(POSITION_VOLUME);                                 // pozisyon hacmi
      ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);    // pozisyon tipi
      //--- pozisyonnun çıktı verileri
      PrintFormat("#%I64u %s  %s  %.2f  %s [%I64d]",
                  position_ticket,
                  position_symbol,
                  EnumToString(type),
                  volume,
                  DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
                  magic);
      //--- tanıtıcı değer (MagicNumber) eşleşiyorsa
      if(magic==EXPERT_MAGIC)
        {
         //--- isteğin ve sonuç değerlerinin sıfırlanması
         ZeroMemory(request);
         ZeroMemory(result);
         //--- işlem parametrelerinin ayarlanması
         request.action   =TRADE_ACTION_DEAL;        // alım-satım işleminin türü
         request.position =position_ticket;          // pozisyonun fişi
         request.symbol   =position_symbol;          // sembol 
         request.volume   =volume;                   // pozisyon hacmi
         request.deviation=5;                        // izin verilen slipaj miktarı
         request.magic    =EXPERT_MAGIC;             // pozisyonun tanıtıcı değeri (MagicNumber)
         //--- emir türünü ve fiyatı pozisyona göre ayarla
         if(type==POSITION_TYPE_BUY)
           {
            request.price=SymbolInfoDouble(position_symbol,SYMBOL_BID);
            request.type =ORDER_TYPE_SELL;
           }
         else
           {
            request.price=SymbolInfoDouble(position_symbol,SYMBOL_ASK);
            request.type =ORDER_TYPE_BUY;
           }
         //--- kapanışa dair veriler
         PrintFormat("Close #%I64d %s %s",position_ticket,position_symbol,EnumToString(type));
         //--- isteği gönder
         if(!OrderSend(request,result))
            PrintFormat("OrderSend hatası %d",GetLastError());  // istek gönderilemezse hata kodu göster
         //--- işlem verileri   
         PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
         //---
        }
     }
  }
//+------------------------------------------------------------------+

 
SL & TP Seviyelerinin Değiştirilmesi

Kar Al (TP) ve/veya Zarar Durdur (SL) fiyat seviyelerini değiştirmek için alım-satım emirleri. Şu 4 alanın belirtilmesini gerektirir:

  • action
  • symbol
  • sl
  • tp
  • position

Bir açık pozisyonun Kr Al ve Zarar Durdur seviyelerini değiştirmek için TRADE_ACTION_SLTP işleminin örneği:

#define EXPERT_MAGIC 123456  // uzmanın tanıtıcı değeri (MagicNumber)
//+------------------------------------------------------------------+
//| Pozisyonun Kar Al ve Zarar Durdur seviyelerinin değişimi         |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- alım-satım isteğininin ve istek sonucunun bildirimini yap ve başlat
   MqlTradeRequest request;
   MqlTradeResult  result;
   int total=PositionsTotal(); // açık pozisyonların sayısı   
//--- tüm pozisyonar için tekrarla
   for(int i=0; i<total; i++)
     {
      //--- emir parametreleri
      ulong  position_ticket=PositionGetTicket(i);// pozisyonun fişi
      string position_symbol=PositionGetString(POSITION_SYMBOL); // sembol 
      int    digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS); // basamak sayısı
      ulong  magic=PositionGetInteger(POSITION_MAGIC); // Pozisyonun tanıtıcı değeri (MagicNumber)
      double volume=PositionGetDouble(POSITION_VOLUME);    // pozisyon hacmi
      double sl=PositionGetDouble(POSITION_SL);  // pozisyonun Zarar Durdur seviyesi
      double tp=PositionGetDouble(POSITION_TP);  // pozisyonun Kar Al seviyesi
      ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);  // pozisyon tipi
      //--- pozisyonla ilgili veriler
      PrintFormat("#%I64u %s  %s  %.2f  %s  sl: %s  tp: %s  [%I64d]",
                  position_ticket,
                  position_symbol,
                  EnumToString(type),
                  volume,
                  DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
                  DoubleToString(sl,digits),
                  DoubleToString(tp,digits),
                  magic);
      //--- tanıtıcı değer (MagicNumber) eşleşiyorsa Kar Al ve Zarar Durdur seviyeleri tanımlanmaz
      if(magic==EXPERT_MAGIC && sl==0 && tp==0)
        {
         //--- mevcut fiyat seviyelerini hesapla
         double price=PositionGetDouble(POSITION_PRICE_OPEN);
         double bid=SymbolInfoDouble(position_symbol,SYMBOL_BID);
         double ask=SymbolInfoDouble(position_symbol,SYMBOL_ASK);
         int    stop_level=(int)SymbolInfoInteger(position_symbol,SYMBOL_TRADE_STOPS_LEVEL);
         double price_level;
         //--- mevcut kapanış fiyatına göre izin verilen minium sapma değeri ayarlanmamışsa
         if(stop_level<=0)
            stop_level=150; // sapma değerini mevcut kapanışa göre 150 puan uzağa ayarla
         else
            stop_level+=50; // güvenilirlik için uzaklığı (SYMBOL_TRADE_STOPS_LEVEL + 50) puan şeklinde ayarla
 
         //--- Zarar Durdur ve Kar Al seviye değerlerinin yuvarlanması
         price_level=stop_level*SymbolInfoDouble(position_symbol,SYMBOL_POINT);
         if(type==POSITION_TYPE_BUY)
           {
            sl=NormalizeDouble(bid-price_level,digits);
            tp=NormalizeDouble(bid+price_level,digits);
           }
         else
           {
            sl=NormalizeDouble(ask+price_level,digits);
            tp=NormalizeDouble(ask-price_level,digits);
           }
         //--- istek ve sonuç değerlerini sıfırla
         ZeroMemory(request);
         ZeroMemory(result);
         //--- işlem parametrelerinin ayarlanması
         request.action  =TRADE_ACTION_SLTP// alım-satım işleminin tipi
         request.position=position_ticket;   // pozisyonun fişi
         request.symbol=position_symbol;     // sembol 
         request.sl      =sl;                // pozisyonun Zarar Durdur seviyesi
         request.tp      =tp;                // pozisyonun Kar Al seviyesi
         request.magic=EXPERT_MAGIC;         // Pozisyonun tanıtıcı değeri (MagicNumber)
         //--- değiştirme işlemine dair veriler
         PrintFormat("Değiştir #%I64d %s %s",position_ticket,position_symbol,EnumToString(type));
         //--- isteği gönder
         if(!OrderSend(request,result))
            PrintFormat("OrderSend hatası %d",GetLastError());  // istek gönderilemyorsa hata kodu göster
         //--- işlemle ilgili veriler   
         PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
        }
     }
  }
//+------------------------------------------------------------------+

 
Bekleyen Emir

Bekleyen emri işleme koymak için alım-satım emri. Şu 11 alanın belirtilmesini gerektirir:

  • action
  • symbol
  • volume
  • price
  • stoplimit
  • sl
  • tp
  • type
  • type_filling
  • type_time
  • expiration

Ayrıca "magic" ve "comment" alanlarının da belirtilmesi mümkündür.

Bekleyen emir girmek için kullanılan TRADE_ACTION_PENDING işleminin bir örneği:

#property description "Bekleyen emir girme örneği"
#property script_show_inputs
#define EXPERT_MAGIC 123456                             // Uzmanın tanıtıcı değeri (MagicNumber)
input ENUM_ORDER_TYPE orderType=ORDER_TYPE_BUY_LIMIT;   // emir tipi
//+------------------------------------------------------------------+
//| Bekleyen emirlerin girilmesi                                     |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- alım-satım isteğininin ve istek sonucunun bildirimini yap ve başlat
   MqlTradeRequest request={};
   MqlTradeResult  result={};
//--- bekleyen emirde kullanılacak parametreler
   request.action   =TRADE_ACTION_PENDING;                             // alım-satım işleminin tipi
   request.symbol   =Symbol();                                         // sembol
   request.volume   =0.1;                                              // 0.1 lotluk hacim
   request.deviation=2;                                                // izin verilen slipaj miktarı
   request.magic    =EXPERT_MAGIC;                                     // emri giren uzmanın tanıtıcı değeri (MagicNumber)
   int offset = 50;                                                    // puan cinsinden mevcut fiyata göre emrin girilmesi gereken fark.
   double price;                                                       // emrin tetiklenme fiyatı
   double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT);                // puan değeri
   int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);                // basamak sayısı
   //--- işlem tipinin denetimi
   if(orderType==ORDER_TYPE_BUY_LIMIT)
     {
      request.type     =ORDER_TYPE_BUY_LIMIT;                          // emir tipi
      price=SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point;        // açılış fiyatı 
      request.price    =NormalizeDouble(price,digits);                 // normalleştirilmiş açılış fiyatı 
     }
   else if(orderType==ORDER_TYPE_SELL_LIMIT)
     {
      request.type     =ORDER_TYPE_SELL_LIMIT;                          // emir tipi
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID)+offset*point;         // açılış fiyatı 
      request.price    =NormalizeDouble(price,digits);                  // normalleştirilmiş açılış fiyatı 
     }
   else if(orderType==ORDER_TYPE_BUY_STOP)
     {
      request.type =ORDER_TYPE_BUY_STOP;                                // emir tipi
      price        =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset*point; // açılış fiyatı 
      request.price=NormalizeDouble(price,digits);                      // normalleştirilmiş açılış fiyatı 
     }
   else if(orderType==ORDER_TYPE_SELL_STOP)
     {
      request.type     =ORDER_TYPE_SELL_STOP;                           // emir tipi
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID)-offset*point;         // açılış fiyatı 
      request.price    =NormalizeDouble(price,digits);                  // normalleştirilmiş açılış fiyatı 
     }
   else Alert("bu örnek sadece bekleyen emirler için geçerlidir");   // değilse, bekleyen emir seçilir
//--- isteği gönder
   if(!OrderSend(request,result))
      PrintFormat("OrderSend hatası %d",GetLastError());                 // istek gönderilemyorsa hata kodu göster
//--- işlemle ilgili veriler
   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
  }
//+------------------------------------------------------------------+

 
Bekleyen Emri Değiştir

Bir bekleyen emrin fiyatlarını değiştirmek için alım-satım emri. Şu 7 alanın belirtilmesini gerektirir:

  • action
  • order
  • price
  • sl
  • tp
  • type_time
  • expiration

Bekleyen emirlerin fiyat seviyelerinin değiştirilmesi için TRADE_ACTION_MODIFY işleminin bir örneği:

#define EXPERT_MAGIC 123456  // uzmanın tanıtıcı değeri (MagicNumber)
//+------------------------------------------------------------------+
//| Bekleyen emirlerin değiştirilmesi                                |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- alım-satım isteğininin ve istek sonucunun bildirimini yap ve başlat
   MqlTradeRequest request={};
   MqlTradeResult  result={};
   int total=OrdersTotal(); // bekleyen emirlerin toplam sayısı
//--- tüm bekleyen emirler için tekrarla
   for(int i=0; i<total; i++)
     {
      //--- emir parametreleri
      ulong  order_ticket=OrderGetTicket(i);                             // emir fişi
      string order_symbol=Symbol();                                      // sembol
      int    digits=(int)SymbolInfoInteger(order_symbol,SYMBOL_DIGITS);  // basamak sayısı
      ulong  magic=OrderGetInteger(ORDER_MAGIC);                         // emri giren uzmanın tanıtıcı değeri (MagicNumber)
      double volume=OrderGetDouble(ORDER_VOLUME_CURRENT);                // emrin mevcut hacmi
      double sl=OrderGetDouble(ORDER_SL);                                // emrin mevcut Zarar Durdur seviyesi
      double tp=OrderGetDouble(ORDER_TP);                                // emrin mevcut Kar Al seviyesi
      ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); // emir tipi
      int offset = 50;                                                   // puan cinsinden mevcut fiyata göre emrin girilmesi gereken fark
      double price;                                                      // emrin tetiklenme fiyatı
      double point=SymbolInfoDouble(order_symbol,SYMBOL_POINT);          // puan değeri
      //--- emirle ilgili çıktı verileri
      PrintFormat("#%I64u %s  %s  %.2f  %s  sl: %s  tp: %s  [%I64d]",
                  order_ticket,
                  order_symbol,
                  EnumToString(type),
                  volume,
                  DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
                  DoubleToString(sl,digits),
                  DoubleToString(tp,digits),
                  magic);
      //---tanıtıcı değer (MagicNumber) eşleşiyorsa Kar Al ve Zarar Durdur seviyeleri tanımlanmaz
      if(magic==EXPERT_MAGIC && sl==0 && tp==0)
        {
         request.action=TRADE_ACTION_MODIFY;                           // alım-satım işleminin tipi
         request.order = OrderGetTicket(i);                            // emir fişi
         request.symbol   =Symbol();                                   // sembol
         request.deviation=5;                                          // izin verilen slipaj miktarı
        //--- fiyat seviyesinin, Zarar Durur ve Kar Al seviyelerinin emrin türüne göre ayarlanması
         if(type==ORDER_TYPE_BUY_LIMIT)
           {
            price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point; 
            request.tp = NormalizeDouble(price+offset*point,digits);
            request.sl = NormalizeDouble(price-offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                // normalleştirilmiş açılış fiyatı
           }
         else if(type==ORDER_TYPE_SELL_LIMIT)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_BID)+offset*point; 
            request.tp = NormalizeDouble(price-offset*point,digits);
            request.sl = NormalizeDouble(price+offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // normalleştirilmiş açılış fiyatı
           }
         else if(type==ORDER_TYPE_BUY_STOP)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset*point; 
            request.tp = NormalizeDouble(price+offset*point,digits);
            request.sl = NormalizeDouble(price-offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // normalleştirilmiş açılış fiyatı
           }
         else if(type==ORDER_TYPE_SELL_STOP)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_BID)-offset*point; 
            request.tp = NormalizeDouble(price-offset*point,digits);
            request.sl = NormalizeDouble(price+offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // normalleştirilmiş açılış fiyatı
           }
         //--- isteği gönder
         if(!OrderSend(request,result))
            PrintFormat("OrderSend hatası %d",GetLastError());  // istek gönderilemyorsa hata kodu göster
         //--- işlemle ilgili veriler   
         PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
         //--- istek ve sonuç değerlerini sıfırla
         ZeroMemory(request);
         ZeroMemory(result);
        }
     }
  }
//+------------------------------------------------------------------+

 
Bekleyen emri sil

Bekleyen bir emri silmek için alım-satım emri. Şu 2 alanın belirtilmesini gerektirir::

  • action
  • order

Bekleyen emirlerin silinmesi için bir TRADE_ACTION_REMOVE örneği:

#define EXPERT_MAGIC 123456  // uzmanın tanıtıcı değeri (MagicNumber)
//+------------------------------------------------------------------+
//| Bekleyen emirlerin silinmesi                                     |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- alım-satım isteğininin ve istek sonucunun bildirimini yap ve başlat
   MqlTradeRequest request={};
   MqlTradeResult  result={};
   int total=OrdersTotal(); // bekleyen emirlerin toplam sayısı
//--- tüm bekleyen emirler için tekrarla
   for(int i=total-1; i>=0; i--)
     {
      ulong  order_ticket=OrderGetTicket(i);                   // emir fişi
      ulong  magic=OrderGetInteger(ORDER_MAGIC);               // emri giren uzmanın tanıtıcı değeri (MagicNumber)
      //--- tanıtıcı değer (MagicNumber) eşleşiyorsa
      if(magic==EXPERT_MAGIC)
        {
         //--- istek ve sonuç değerlerini sıfırla
         ZeroMemory(request);
         ZeroMemory(result);
         //--- işlem parametrelerinin ayarlanması     
         request.action=TRADE_ACTION_REMOVE;                   // alım-satım işleminin tipi
         request.order = order_ticket;                         // emir fişi
         //--- isteği gönder
         if(!OrderSend(request,result))
            PrintFormat("OrderSend hatası %d",GetLastError());  // istek gönderilemyorsa hata kodu göster
         //--- işlemle ilgili veriler   
         PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
        }
     }
  }
//+------------------------------------------------------------------+

 
Ayrıca bakınız

Yapılar ve Sınıflar, Alım-satım fonksiyonları, Emir Özellikleri