Alım-Satım İşlem Tipleri

Alım-satım işlemleri pozisyon açmak için OrderSend() fonksiyonu kullanılarak emirlerin gönderilmesiyle gerçekleştirilir. Bu işlemler bekleyen emirlerin yerleştirilmesi, değiştirilmesi ve silinmesinde de kullanılır. Her alım-satım emri, istenen işlemin tipini gösterir. Alım-satım işlemleri ENUM_TRADE_REQUEST_ACTIONS sayımı içinde tarif edilmiştir.

ENUM_TRADE_REQUEST_ACTIONS

Tanıtıcı

Açıklama

TRADE_ACTION_DEAL

Anlık uygulama için belirlenen parametrelerle bir alım-satım emrini işleme koyar (piyasa emri)

TRADE_ACTION_PENDING

Bir alım-satım emrini, belirtilen koşullar altında uygulanacak şekilde işleme koyar (bekleyen emir)

TRADE_ACTION_SLTP

Bir açık pozisyon için Zarar Durdur ve Kar Al değerlerini şekillendirir

TRADE_ACTION_MODIFY

Daha önce verilmiş bir emrin parametrelerini şekillendirir

TRADE_ACTION_REMOVE

Önceden verilmiş bekleyen emri siler

TRADE_ACTION_CLOSE_BY

Pozisyonu, ters pozisyon kullanarak kapa

 
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);
         //---
        }
     }
  }
//+------------------------------------------------------------------+

 
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_ASK)+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_ASK)-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);
  }
//+------------------------------------------------------------------+

 
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(ask+price_level,digits);
           }
         else
           {
            sl=NormalizeDouble(ask+price_level,digits);
            tp=NormalizeDouble(bid-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 emirlerin fiyat seviyelerini değiştirmek için bir TRADE_ACTION_MODIFY ö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_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_SELL_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ı
           }
         //--- 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 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);
        }
     }
  }
//+------------------------------------------------------------------+

 
Pozisyonları ters pozisyonlarla kapamak için bir TRADE_ACTION_CLOSE_BY örneği:

#define EXPERT_MAGIC 123456  // uzmanın tanıtıcı değeri (MagicNumber)
//+------------------------------------------------------------------+
//| Tüm pozisyonları ters pozisyonlarla kapat                        |
//+------------------------------------------------------------------+
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);                                    // pozisyonun fişi
      string position_symbol=PositionGetString(POSITION_SYMBOL);                      // sembol 
      int    digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS);            // pozisyonun fişi
      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
      if(magic==EXPERT_MAGIC)
        {
         for(int j=0; j<i; j++)
           {
            string symbol=PositionGetSymbol(j); // ters pozisyonun sembolü
            //--- düz ve ters poisyonların sembolleri uyuşuyorsa
            if(symbol==position_symbol && PositionGetInteger(POSITION_MAGIC)==EXPERT_MAGIC)
              {
               //--- ters pozisyonun tipini ayarla
               ENUM_POSITION_TYPE type_by=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
               //--- düz ve ters sembollerin tipleri uyuşuyorsa bırak
               if(type==type_by)
                  continue;
               //--- istek ve sonuç değerlerini sıfırla
               ZeroMemory(request);
               ZeroMemory(result);
               //--- işlem parametrelerinin ayarlanması
               request.action=TRADE_ACTION_CLOSE_BY;                         // alım-satım işleminin tipi
               request.position=position_ticket;                             // pozisyonun fişi
               request.position_by=PositionGetInteger(POSITION_TICKET);      // ters pozisyonun fişi
               //request.symbol     =position_symbol;
               request.magic=EXPERT_MAGIC;                                   // pozisyonun tanıtıcı değeri (MagicNumber)
               //--- ters pozisyonla kapama işlemine dair veriler
               PrintFormat("Close #%I64d %s %s by #%I64d",position_ticket,position_symbol,EnumToString(type),request.position_by);
               //--- 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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+