手动止盈常因滑点或延迟导致利润回吐。此MT4自动止盈脚本以简单工具脚本形式运行,实时监控账户。一旦达到指定的美元、点数或百分比利润目标,它会立即平掉所有盈利头寸或仅平最盈利的一笔。
使用场景
完整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. 脚本运行一次,检查当前总利润,若目标达成则执行平仓。
参数说明
此免费EA工具下载提供了简洁高效的利润管理方案。如需更高级的风控管理(如保本止损、移动止损、定时出场),请关注我们的高级版交易管理器EA——订阅频道获取每周脚本更新。
参考来源:AutoCompile AI - 原创工具脚本MQL4实现,2025年。
```