Summary: Complete MT4 script source code that closes all open orders with one click. Shows real-time profit/loss summary and supports partial close by magic number or symbol.




One-Click Close All Orders Script - Complete MQL4 Source Code



This article provides a practical utility script for MT4 that closes all open orders instantly. Unlike basic close scripts, this tool displays total profit/loss before execution and offers filtering options by magic number or currency pair.

Script Features



  • One-click close all market orders

  • Displays total profit/loss before closing

  • Filter by EA magic number

  • Filter by specific symbol

  • Confirmation dialog with detailed info

  • Works on any MT4 platform


  • Complete MQL4 Code



    ``mql4
    //+------------------------------------------------------------------+
    //| CloseAllOrders.mq4 |
    //| Generated by AI Assistant |
    //| |
    //+------------------------------------------------------------------+
    #property copyright "AI Assistant"
    #property link ""
    #property version "1.00"
    #property strict
    #property show_inputs

    //+------------------------------------------------------------------+
    //| Input parameters |
    //+------------------------------------------------------------------+
    input bool CloseAll = true; // Close all orders (ignores filters below)
    input int FilterMagic = 0; // Filter by magic number (0=all)
    input string FilterSymbol = ""; // Filter by symbol (empty=current chart)
    input bool ShowConfirmation = true; // Show confirmation dialog

    //+------------------------------------------------------------------+
    //| Script start function |
    //+------------------------------------------------------------------+
    void OnStart()
    {
    string targetSymbol = (FilterSymbol == "") ? Symbol() : FilterSymbol;
    int totalOrders = OrdersTotal();

    if(totalOrders == 0)
    {
    Alert("No orders found to close.");
    return;
    }

    // Calculate total profit/loss first
    double totalProfit = 0;
    int orderCount = 0;

    for(int i = 0; i < totalOrders; i++)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
    bool matchSymbol = (CloseAll || OrderSymbol() == targetSymbol);
    bool matchMagic = (CloseAll || FilterMagic == 0 || OrderMagicNumber() == FilterMagic);

    if(matchSymbol && matchMagic)
    {
    totalProfit += OrderProfit() + OrderSwap() + OrderCommission();
    orderCount++;
    }
    }
    }

    if(orderCount == 0)
    {
    Alert("No orders match the filter criteria.");
    return;
    }

    // Build confirmation message
    string msg = "Found " + string(orderCount) + " order(s) to close.\n";
    msg += "Total P/L: " + DoubleToStr(totalProfit, 2) + " " + AccountCurrency() + "\n";
    msg += "Symbol: " + targetSymbol + "\n";
    if(FilterMagic != 0 && !CloseAll)
    msg += "Magic: " + string(FilterMagic) + "\n";
    msg += "\nDo you want to close them?";

    if(ShowConfirmation && MessageBox(msg, "Close Orders", MB_YESNO | MB_ICONQUESTION) != IDYES)
    {
    Print("Order closing cancelled by user.");
    return;
    }

    // Close orders
    int closed = 0;
    int errors = 0;

    for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
    bool matchSymbol = (CloseAll || OrderSymbol() == targetSymbol);
    bool matchMagic = (CloseAll || FilterMagic == 0 || OrderMagicNumber() == FilterMagic);

    if(matchSymbol && matchMagic)
    {
    bool result = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, clrRed);
    if(result)
    {
    closed++;
    Print("Closed order #", OrderTicket(), " | Profit: ", OrderProfit() + OrderSwap() + OrderCommission());
    }
    else
    {
    errors++;
    Print("Failed to close order #", OrderTicket(), " | Error: ", GetLastError());
    }
    }
    }
    }

    // Final report
    Print("===== Close Summary =====");
    Print("Closed: ", closed, " | Errors: ", errors);
    Print("Total P/L: ", DoubleToStr(totalProfit, 2), " ", AccountCurrency());

    if(closed > 0)
    Alert("Successfully closed ", closed, " order(s). Total P/L: ", DoubleToStr(totalProfit, 2), " ", AccountCurrency());
    else if(errors > 0)
    Alert("Failed to close orders. Check experts log for details.");
    }

    //+------------------------------------------------------------------+
    //| Helper: Get order close price |
    //+------------------------------------------------------------------+
    double OrderClosePrice()
    {
    if(OrderType() == OP_BUY)
    return Bid;
    else if(OrderType() == OP_SELL)
    return Ask;
    else
    return 0;
    }
    //+------------------------------------------------------------------+
    `

    Parameter Explanation



    | Parameter | Description |
    |-----------|-------------|
    | CloseAll | True = close all orders regardless of symbol/magic |
    | FilterMagic | Specific EA magic number to close (0 = all) |
    | FilterSymbol | Currency pair to filter (empty = current chart symbol) |
    | ShowConfirmation | Show confirmation dialog before execution |

    Installation & Usage



  • Copy code to MetaEditor (F4 in MT4)

  • Click Compile (F7) - ensure no errors

  • Drag script from Navigator to any chart

  • Adjust parameters in popup window

  • Confirm dialog to execute


  • Practical Use Cases



    Scenario 1 - Emergency Close: Market moves against you - drag script to chart, click Yes - all positions closed instantly.

    Scenario 2 - Close Specific EA: Set FilterMagic to your EA's magic number, close only that EA's trades while leaving manual trades open.

    Scenario 3 - Close One Pair: Set FilterSymbol to "EURUSD" to close only EURUSD positions.

    Compilation Notes



  • Scripts run once and terminate, unlike EAs

  • No OnTick() or OnInit() required

  • Use #property show_inputs to display parameter dialog

  • Always iterate orders backwards when closing (i--)


  • Important Tips



    Test on demo account first. This script closes market orders only (pending orders not included). For pending orders, use
    OrderDelete()` function. The script calculates profit including swap and commission.

    Reference



    Independent compilation. Standard order closing logic based on MQL4 OrderSend and OrderClose functions.

    For advanced trading tools including automated risk management, trailing stop EAs, and portfolio closers, explore our premium script collection with lifetime updates.