EA CloseAll

Author: 2025, getbos
Orders Execution
Checks for the total of open orders
0 Views
0 Downloads
0 Favorites
EA CloseAll
//+------------------------------------------------------------------+
//|                            CloseAllOrdersEA.mq4                  |
//|                                  Copyright 2025, getbos          |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2025, getbos"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

//+------------------------------------------------------------------+
//| Fungsi inisialisasi EA                                           |
//+------------------------------------------------------------------+
int OnInit()
  {
   Print("CloseAllOrdersEA diinisialisasi");
   CloseAllOrders();
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Fungsi deinisialisasi EA                                         |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Print("CloseAllOrdersEA dideinisialisasi");
  }

//+------------------------------------------------------------------+
//| Fungsi tick                                                      |
//+------------------------------------------------------------------+
void OnTick()
  {
// EA ini tidak perlu melakukan apa-apa pada setiap tick karena menutup semua order di OnInit
  }

//+------------------------------------------------------------------+
//| Fungsi untuk menutup semua order                                 |
//+------------------------------------------------------------------+
void CloseAllOrders()
  {
   int retryCount = 3; // Jumlah percobaan ulang untuk menutup order
   for(int i=OrdersTotal()-1; i>=0; i--) // Loop dari akhir ke awal untuk menghindari masalah indeks saat penghapusan
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         bool closed = false;
         for(int retry = 0; retry < retryCount && !closed; retry++)
           {
            RefreshRates(); // Pastikan data harga terkini sudah diperbarui
            if(OrderType() <= OP_SELL) // Order pasar
              {
               double closePrice = (OrderType() == OP_BUY) ? Bid : Ask;
               if(OrderClose(OrderTicket(), OrderLots(), closePrice, 2)) // 2 adalah Slippage
                 {
                  Print("Order ", OrderTicket(), " berhasil ditutup pada percobaan ke-", retry+1);
                  closed = true;
                 }
              }
            else // Order pending
              {
               if(OrderDelete(OrderTicket()))
                 {
                  Print("Order pending ", OrderTicket(), " berhasil dihapus pada percobaan ke-", retry+1);
                  closed = true;
                 }
              }

            if(!closed)
              {
               int lastError = GetLastError();
               Print("Gagal menutup/menghapus order ", OrderTicket(), " pada percobaan ke-", retry+1, ": Error ", lastError);
               if(lastError == ERR_NO_RESULT || lastError == ERR_INVALID_TICKET || lastError == ERR_TRADE_CONTEXT_BUSY)
                 {
                  Sleep(1000); // Tunggu 1 detik sebelum mencoba lagi untuk error spesifik ini
                 }
               else
                 {
                  break; // Untuk error lain, tidak ada percobaan ulang
                 }
              }
           }
         if(!closed)
           {
            Print("Gagal menutup/menghapus order ", OrderTicket(), " setelah ", retryCount, " percobaan");
           }
        }
     }
  }
//+------------------------------------------------------------------+

Comments