Summary: 本文提供完整的MQL4脚本源码,当达到目标利润水平时自动平掉所有盈利订单。包含美元/点数/百分比目标、部分平仓选项和推送通知功能。




手动止盈常因滑点或延迟导致利润回吐。此MT4自动止盈脚本以简单工具脚本形式运行,实时监控账户。一旦达到指定的美元、点数或百分比利润目标,它会立即平掉所有盈利头寸或仅平最盈利的一笔。

使用场景


  • 当日利润达500美元时平掉所有盈利单。

  • 锁住一篮子信号的收益。

  • 结合移动止损脚本形成完整出场策略。


  • 完整MQL4源码


    ```cpp
    //+------------------------------------------------------------------+
    //| Auto_Close_Profits_Target.mq4 |
    //| Generated by AutoCompile AI |
    //| |
    //+------------------------------------------------------------------+
    #property copyright "AutoCompile AI"
    #property link ""
    #property version "1.00"
    #property strict
    #property show_inputs

    //--- 输入参数
    input double TargetProfitUSD = 100.0; // 目标利润(美元),0=禁用
    input double TargetPips = 0.0; // 目标利润(点数),0=禁用
    input double TargetPercent = 0.0; // 目标利润(账户余额百分比),0=禁用
    input bool CloseOnlyProfitable = true; // 仅平掉盈利订单
    input bool ClosePartial = false; // 部分平仓(若启用,每个订单平50%)
    input int Slippage = 30; // 允许滑点(点数)
    input bool SendPushNotification = true; // 触发时发送推送通知
    input bool AlertOnScreen = true; // 屏幕弹窗提醒

    //+------------------------------------------------------------------+
    //| 脚本启动函数 |
    //+------------------------------------------------------------------+
    void OnStart()
    {
    double currentProfit = 0;
    double currentPipsProfit = 0;
    double currentPercentProfit = 0;
    double accountBalance = AccountBalance();

    //--- 计算当前总利润(美元)
    for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
    if(OrderType() == OP_BUY || OrderType() == OP_SELL)
    {
    currentProfit += OrderProfit() + OrderSwap() + OrderCommission();
    //--- 计算点数利润
    if(OrderType() == OP_BUY)
    currentPipsProfit += (Bid - OrderOpenPrice()) / Point;
    else if(OrderType() == OP_SELL)
    currentPipsProfit += (OrderOpenPrice() - Ask) / Point;
    }
    }
    }

    currentPercentProfit = (currentProfit / accountBalance) * 100.0;

    //--- 检查目标是否达成
    bool targetReached = false;
    string reason = "";

    if(TargetProfitUSD > 0 && currentProfit >= TargetProfitUSD)
    {
    targetReached = true;
    reason = StringFormat("美元目标 $%.2f 已达成", TargetProfitUSD);
    }
    else if(TargetPips > 0 && currentPipsProfit >= TargetPips)
    {
    targetReached = true;
    reason = StringFormat("点数目标 %.1f 点已达成", TargetPips);
    }
    else if(TargetPercent > 0 && currentPercentProfit >= TargetPercent)
    {
    targetReached = true;
    reason = StringFormat("百分比目标 %.2f%% 余额已达成", TargetPercent);
    }

    if(!targetReached)
    {
    if(AlertOnScreen) Alert("利润目标未达成。当前利润: $", currentProfit);
    Print("自动止盈脚本: 目标未满足,退出。");
    return;
    }

    //--- 发送提醒
    if(AlertOnScreen)
    Alert("自动止盈: ", reason, " 正在平掉盈利订单...");
    if(SendPushNotification)
    SendNotification("自动止盈脚本: " + reason);

    //--- 平仓
    int closedCount = 0;
    for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
    bool isProfitable = (OrderProfit() + OrderSwap() + OrderCommission()) > 0;
    if(CloseOnlyProfitable && !isProfitable)
    continue;

    if(ClosePartial)
    {
    //--- 平掉一半手数
    double currentLots = OrderLots();
    double halfLots = NormalizeDouble(currentLots / 2.0, 2);
    if(halfLots < MarketInfo(OrderSymbol(), MODE_MINLOT))
    halfLots = currentLots;

    bool closed = OrderClose(OrderTicket(), halfLots, OrderClosePrice(), Slippage, clrNONE);
    if(closed) closedCount++;
    }
    else
    {
    //--- 全平
    bool closed = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, clrNONE);
    if(closed) closedCount++;
    }
    }
    }

    Print("自动止盈脚本完成。共平仓 ", closedCount, " 个订单。", reason);
    if(AlertOnScreen)
    Alert("自动止盈完成: 已平仓 ", closedCount, " 个订单。");
    }
    //+------------------------------------------------------------------+
    ```

    如何编译与使用


    1. 将代码保存为 `Auto_Close_Profits_Target.mq4`,放入MT4数据目录的 `Scripts` 文件夹。
    2. 打开MetaEditor(F4),按F7编译,确保无错误。
    3. 将脚本拖拽到任意图表上,弹出输入窗口,设置美元、点数或百分比目标。
    4. 脚本运行一次,检查当前总利润,若目标达成则执行平仓。

    参数说明


  • TargetProfitUSD:浮动+已平仓总利润达到此美元金额时平仓。

  • TargetPips:所有持仓累计点数目标。

  • TargetPercent:占当前账户余额百分比目标。

  • CloseOnlyProfitable:若为true,仅平掉当前盈利的订单。

  • ClosePartial:若为true,每个订单平50%而非全平。

  • Slippage:平仓指令允许的最大滑点。

  • SendPushNotification:需要MT4手机App并配置MetaQuotes ID。


  • 免费EA工具下载提供了简洁高效的利润管理方案。如需更高级的风控管理(如保本止损、移动止损、定时出场),请关注我们的高级版交易管理器EA——订阅频道获取每周脚本更新。

    参考来源:AutoCompile AI - 原创工具脚本MQL4实现,2025年。
    ```