发表于:2026-03-11 03:40只看该作者
82楼
QLG 发表于 2026-03-11 11: 38叫AI帮你写代码
我还以为是小龙虾
韬客社区www.talkfx.co
发表于:2026-03-11 03:45只看该作者
83楼
贪婪恐惧 发表于 2026-03-11 11: 40我还以为是小龙虾
小龙虾可以直接代人交易了,只是你敢不敢给它干。哈哈
韬客社区www.talkfx.co
发表于:2026-03-11 07:14只看该作者
84楼
小龙虾是啥
韬客社区www.talkfx.co
发表于:2026-03-12 02:41只看该作者
85楼
QLG 发表于 2026-03-11 11:45小龙虾可以直接代人交易了,只是你敢不敢给它干。哈哈
要的token 可能比你交易赚的还多。。。
韬客社区www.talkfx.co
发表于:2026-03-12 03:17只看该作者
86楼
金山老鬼1201 发表于 2026-03-06 12: 37
老铁们,这个面板怎么样 哈哈
老哥,这个非常管用,能不能把这个脚本给我。。。我上个月用AI摸索了很多遍,就是这个图标按钮找不到,后来放弃了。不管是脚本,还是指标都试过,最后卡在按钮上。如果不方便,麻烦告知一下,这个图标按钮怎么搞的
韬客社区www.talkfx.co
发表于:2026-03-12 03:19只看该作者
87楼
我只要一件平仓就行
韬客社区www.talkfx.co
发表于:2026-03-12 05:27只看该作者
88楼
贪婪恐惧 发表于 2026-03-12 11: 19我只要一件平仓就行
用DS生成的一键平仓按钮:
//+------------------------------------------------------------------+
//| CloseButton.mq4 |
//| Generated by AI Assistant |
//+------------------------------------------------------------------+
#property strict
#property version "1.00"
// 输入参数
input string ButtonSet = "----- 按钮设置 -----";
input int BtnX = 10;
input int BtnY = 20;
input int BtnWidth = 120;
input int BtnHeight = 30;
input string BtnText = "一键平仓";
input color BtnColor = clrRed;
input int FontSize = 10;
input string CloseSet = "----- 平仓设置 -----";
input bool CloseAllPairs = true;
input bool ShowConfirm = true;
input int Slippage = 3;
// 全局变量
string btnName = "CloseButton";
int timerInterval = 1; // 1秒更新
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// 创建按钮
if(!ObjectCreate(0, btnName, OBJ_BUTTON, 0, 0, 0))
{
Print("按钮创建失败");
return(INIT_FAILED);
}
// 设置按钮
ObjectSetInteger(0, btnName, OBJPROP_XDISTANCE, BtnX);
ObjectSetInteger(0, btnName, OBJPROP_YDISTANCE, BtnY);
ObjectSetInteger(0, btnName, OBJPROP_XSIZE, BtnWidth);
ObjectSetInteger(0, btnName, OBJPROP_YSIZE, BtnHeight);
ObjectSetString(0, btnName, OBJPROP_TEXT, BtnText);
ObjectSetInteger(0, btnName, OBJPROP_FONTSIZE, FontSize);
ObjectSetInteger(0, btnName, OBJPROP_COLOR, clrWhite);
ObjectSetInteger(0, btnName, OBJPROP_BGCOLOR, BtnColor);
ObjectSetInteger(0, btnName, OBJPROP_BORDER_COLOR, clrBlack);
// 启动定时器(每秒更新一次持仓信息)
EventSetTimer(timerInterval);
// 立即更新一次
UpdateDisplay();
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
// 删除按钮和显示
ObjectDelete(0, btnName);
ObjectDelete(0, "Info1");
ObjectDelete(0, "Info2");
// 停止定时器
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Expert timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
UpdateDisplay();
}
//+------------------------------------------------------------------+
//| Chart event function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
if(id == CHARTEVENT_OBJECT_CLICK && sparam == btnName)
{
ObjectSetInteger(0, btnName, OBJPROP_STATE, false);
ExecuteClose();
}
}
//+------------------------------------------------------------------+
//| 更新显示信息 |
//+------------------------------------------------------------------+
void UpdateDisplay()
{
int total = OrdersTotal();
int buyCount = 0, sellCount = 0;
double profit = 0;
for(int i = total-1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(!CloseAllPairs && OrderSymbol() != Symbol()) continue;
if(OrderType() == OP_BUY) buyCount++;
if(OrderType() == OP_SELL) sellCount++;
profit += OrderProfit() + OrderSwap() + OrderCommission();
}
}
// 创建信息显示
string info1 = "持仓: " + IntegerToString(buyCount+sellCount) +
" (↑" + IntegerToString(buyCount) +
" ↓" + IntegerToString(sellCount) + ")";
if(ObjectFind(0, "Info1") < 0)
ObjectCreate(0, "Info1", OBJ_LABEL, 0, 0, 0);
ObjectSetInteger(0, "Info1", OBJPROP_XDISTANCE, BtnX);
ObjectSetInteger(0, "Info1", OBJPROP_YDISTANCE, BtnY + BtnHeight + 5);
ObjectSetString(0, "Info1", OBJPROP_TEXT, info1);
ObjectSetInteger(0, "Info1", OBJPROP_COLOR, clrWhite);
ObjectSetInteger(0, "Info1", OBJPROP_FONTSIZE, 9);
// 显示盈亏
if(total > 0)
{
string info2 = "盈亏: $" + DoubleToString(profit, 2);
color clr = (profit >= 0) ? clrLime : clrRed;
if(ObjectFind(0, "Info2") < 0)
ObjectCreate(0, "Info2", OBJ_LABEL, 0, 0, 0);
ObjectSetInteger(0, "Info2", OBJPROP_XDISTANCE, BtnX);
ObjectSetInteger(0, "Info2", OBJPROP_YDISTANCE, BtnY + BtnHeight + 20);
ObjectSetString(0, "Info2", OBJPROP_TEXT, info2);
ObjectSetInteger(0, "Info2", OBJPROP_COLOR, clr);
ObjectSetInteger(0, "Info2", OBJPROP_FONTSIZE, 9);
}
else
{
ObjectDelete(0, "Info2");
}
ChartRedraw(0);
}
//+------------------------------------------------------------------+
//| 执行平仓 |
//+------------------------------------------------------------------+
void ExecuteClose()
{
// 统计订单
int buyCount=0, sellCount=0;
double profit=0;
int totalOrders=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(!CloseAllPairs && OrderSymbol() != Symbol()) continue;
totalOrders++;
if(OrderType()==OP_BUY) buyCount++;
if(OrderType()==OP_SELL) sellCount++;
profit += OrderProfit()+OrderSwap()+OrderCommission();
}
}
if(totalOrders == 0)
{
MessageBox("当前没有持仓", "提示", MB_OK);
return;
}
// 确认对话框
if(ShowConfirm)
{
string msg = "确认平仓?\n";
msg += "买单: " + IntegerToString(buyCount) + "\n";
msg += "卖单: " + IntegerToString(sellCount) + "\n";
msg += "盈亏: $" + DoubleToString(profit,2);
if(MessageBox(msg, "确认", MB_YESNO) != IDYES)
return;
}
// 执行平仓
int success=0, fail=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(!CloseAllPairs && OrderSymbol() != Symbol()) continue;
RefreshRates();
double price = (OrderType()==OP_BUY) ? Bid : Ask;
if(OrderClose(OrderTicket(), OrderLots(), price, Slippage, clrNONE))
success++;
else
fail++;
}
}
MessageBox("平仓完成\n成功: " + IntegerToString(success) +
"\n失败: " + IntegerToString(fail), "结果", MB_OK);
UpdateDisplay();
}
//+------------------------------------------------------------------+韬客社区www.talkfx.co
发表于:2026-03-12 06:34只看该作者
89楼
QLG 发表于 2026-03-12 13: 27用DS生成的一键平仓按钮:
//+------------------------------------------------------------------+ //| CloseButton.mq4 | //| Generated by AI Assistant | //+------------------------------------------------------------------+ #property strict #property version "1.00" // 输入参数 input string ButtonSet = "----- 按钮设置 -----"; input int BtnX = 10; input int BtnY = 20; input int BtnWidth = 120; input int BtnHeight = 30; input string BtnText = "一键平仓"; input color BtnColor = clrRed; input int FontSize = 10; input string CloseSet = "----- 平仓设置 -----"; input bool CloseAllPairs = true; input bool ShowConfirm = true; input int Slippage = 3; // 全局变量 string btnName = "CloseButton"; int timerInterval = 1; // 1秒更新 //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { // 创建按钮 if(!ObjectCreate(0, btnName, OBJ_BUTTON, 0, 0, 0)) { Print("按钮创建失败"); return(INIT_FAILED); } // 设置按钮 ObjectSetInteger(0, btnName, OBJPROP_XDISTANCE, BtnX); ObjectSetInteger(0, btnName, OBJPROP_YDISTANCE, BtnY); ObjectSetInteger(0, btnName, OBJPROP_XSIZE, BtnWidth); ObjectSetInteger(0, btnName, OBJPROP_YSIZE, BtnHeight); ObjectSetString(0, btnName, OBJPROP_TEXT, BtnText); ObjectSetInteger(0, btnName, OBJPROP_FONTSIZE, FontSize); ObjectSetInteger(0, btnName, OBJPROP_COLOR, clrWhite); ObjectSetInteger(0, btnName, OBJPROP_BGCOLOR, BtnColor); ObjectSetInteger(0, btnName, OBJPROP_BORDER_COLOR, clrBlack); // 启动定时器(每秒更新一次持仓信息) EventSetTimer(timerInterval); // 立即更新一次 UpdateDisplay(); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { // 删除按钮和显示 ObjectDelete(0, btnName); ObjectDelete(0, "Info1"); ObjectDelete(0, "Info2"); // 停止定时器 EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert timer function | //+------------------------------------------------------------------+ void OnTimer() { UpdateDisplay(); } //+------------------------------------------------------------------+ //| Chart event function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { if(id == CHARTEVENT_OBJECT_CLICK && sparam == btnName) { ObjectSetInteger(0, btnName, OBJPROP_STATE, false); ExecuteClose(); } } //+------------------------------------------------------------------+ //| 更新显示信息 | //+------------------------------------------------------------------+ void UpdateDisplay() { int total = OrdersTotal(); int buyCount = 0, sellCount = 0; double profit = 0; for(int i = total-1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(!CloseAllPairs && OrderSymbol() != Symbol()) continue; if(OrderType() == OP_BUY) buyCount++; if(OrderType() == OP_SELL) sellCount++; profit += OrderProfit() + OrderSwap() + OrderCommission(); } } // 创建信息显示 string info1 = "持仓: " + IntegerToString(buyCount+sellCount) + " (↑" + IntegerToString(buyCount) + " ↓" + IntegerToString(sellCount) + ")"; if(ObjectFind(0, "Info1") < 0) ObjectCreate(0, "Info1", OBJ_LABEL, 0, 0, 0); ObjectSetInteger(0, "Info1", OBJPROP_XDISTANCE, BtnX); ObjectSetInteger(0, "Info1", OBJPROP_YDISTANCE, BtnY + BtnHeight + 5); ObjectSetString(0, "Info1", OBJPROP_TEXT, info1); ObjectSetInteger(0, "Info1", OBJPROP_COLOR, clrWhite); ObjectSetInteger(0, "Info1", OBJPROP_FONTSIZE, 9); // 显示盈亏 if(total > 0) { string info2 = "盈亏: $" + DoubleToString(profit, 2); color clr = (profit >= 0) ? clrLime : clrRed; if(ObjectFind(0, "Info2") < 0) ObjectCreate(0, "Info2", OBJ_LABEL, 0, 0, 0); ObjectSetInteger(0, "Info2", OBJPROP_XDISTANCE, BtnX); ObjectSetInteger(0, "Info2", OBJPROP_YDISTANCE, BtnY + BtnHeight + 20); ObjectSetString(0, "Info2", OBJPROP_TEXT, info2); ObjectSetInteger(0, "Info2", OBJPROP_COLOR, clr); ObjectSetInteger(0, "Info2", OBJPROP_FONTSIZE, 9); } else { ObjectDelete(0, "Info2"); } ChartRedraw(0); } //+------------------------------------------------------------------+ //| 执行平仓 | //+------------------------------------------------------------------+ void ExecuteClose() { // 统计订单 int buyCount=0, sellCount=0; double profit=0; int totalOrders=0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(!CloseAllPairs && OrderSymbol() != Symbol()) continue; totalOrders++; if(OrderType()==OP_BUY) buyCount++; if(OrderType()==OP_SELL) sellCount++; profit += OrderProfit()+OrderSwap()+OrderCommission(); } } if(totalOrders == 0) { MessageBox("当前没有持仓", "提示", MB_OK); return; } // 确认对话框 if(ShowConfirm) { string msg = "确认平仓?\n"; msg += "买单: " + IntegerToString(buyCount) + "\n"; msg += "卖单: " + IntegerToString(sellCount) + "\n"; msg += "盈亏: $" + DoubleToString(profit,2); if(MessageBox(msg, "确认", MB_YESNO) != IDYES) return; } // 执行平仓 int success=0, fail=0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(!CloseAllPairs && OrderSymbol() != Symbol()) continue; RefreshRates(); double price = (OrderType()==OP_BUY) ? Bid : Ask; if(OrderClose(OrderTicket(), OrderLots(), price, Slippage, clrNONE)) success++; else fail++; } } MessageBox("平仓完成\n成功: " + IntegerToString(success) + "\n失败: " + IntegerToString(fail), "结果", MB_OK); UpdateDisplay(); } //+------------------------------------------------------------------+
非常感谢。我刚才试过了,这个一键平仓的脚本,在电脑图表左上角,红色的按钮,点击后,还有一个确认选项,确认后方可平仓该图表的货币对。这个与我的盯盘EA只能选一个运行。我研究一下看能不能同时运行,给整合到我盯盘EA中,我再研究一下。
韬客社区www.talkfx.co
发表于:2026-03-12 08:05只看该作者
90楼
QLG 发表于 2026-03-12 13: 27用DS生成的一键平仓按钮:
//+------------------------------------------------------------------+ //| CloseButton.mq4 | //| Generated by AI Assistant | //+------------------------------------------------------------------+ #property strict #property version "1.00" // 输入参数 input string ButtonSet = "----- 按钮设置 -----"; input int BtnX = 10; input int BtnY = 20; input int BtnWidth = 120; input int BtnHeight = 30; input string BtnText = "一键平仓"; input color BtnColor = clrRed; input int FontSize = 10; input string CloseSet = "----- 平仓设置 -----"; input bool CloseAllPairs = true; input bool ShowConfirm = true; input int Slippage = 3; // 全局变量 string btnName = "CloseButton"; int timerInterval = 1; // 1秒更新 //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { // 创建按钮 if(!ObjectCreate(0, btnName, OBJ_BUTTON, 0, 0, 0)) { Print("按钮创建失败"); return(INIT_FAILED); } // 设置按钮 ObjectSetInteger(0, btnName, OBJPROP_XDISTANCE, BtnX); ObjectSetInteger(0, btnName, OBJPROP_YDISTANCE, BtnY); ObjectSetInteger(0, btnName, OBJPROP_XSIZE, BtnWidth); ObjectSetInteger(0, btnName, OBJPROP_YSIZE, BtnHeight); ObjectSetString(0, btnName, OBJPROP_TEXT, BtnText); ObjectSetInteger(0, btnName, OBJPROP_FONTSIZE, FontSize); ObjectSetInteger(0, btnName, OBJPROP_COLOR, clrWhite); ObjectSetInteger(0, btnName, OBJPROP_BGCOLOR, BtnColor); ObjectSetInteger(0, btnName, OBJPROP_BORDER_COLOR, clrBlack); // 启动定时器(每秒更新一次持仓信息) EventSetTimer(timerInterval); // 立即更新一次 UpdateDisplay(); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { // 删除按钮和显示 ObjectDelete(0, btnName); ObjectDelete(0, "Info1"); ObjectDelete(0, "Info2"); // 停止定时器 EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert timer function | //+------------------------------------------------------------------+ void OnTimer() { UpdateDisplay(); } //+------------------------------------------------------------------+ //| Chart event function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { if(id == CHARTEVENT_OBJECT_CLICK && sparam == btnName) { ObjectSetInteger(0, btnName, OBJPROP_STATE, false); ExecuteClose(); } } //+------------------------------------------------------------------+ //| 更新显示信息 | //+------------------------------------------------------------------+ void UpdateDisplay() { int total = OrdersTotal(); int buyCount = 0, sellCount = 0; double profit = 0; for(int i = total-1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(!CloseAllPairs && OrderSymbol() != Symbol()) continue; if(OrderType() == OP_BUY) buyCount++; if(OrderType() == OP_SELL) sellCount++; profit += OrderProfit() + OrderSwap() + OrderCommission(); } } // 创建信息显示 string info1 = "持仓: " + IntegerToString(buyCount+sellCount) + " (↑" + IntegerToString(buyCount) + " ↓" + IntegerToString(sellCount) + ")"; if(ObjectFind(0, "Info1") < 0) ObjectCreate(0, "Info1", OBJ_LABEL, 0, 0, 0); ObjectSetInteger(0, "Info1", OBJPROP_XDISTANCE, BtnX); ObjectSetInteger(0, "Info1", OBJPROP_YDISTANCE, BtnY + BtnHeight + 5); ObjectSetString(0, "Info1", OBJPROP_TEXT, info1); ObjectSetInteger(0, "Info1", OBJPROP_COLOR, clrWhite); ObjectSetInteger(0, "Info1", OBJPROP_FONTSIZE, 9); // 显示盈亏 if(total > 0) { string info2 = "盈亏: $" + DoubleToString(profit, 2); color clr = (profit >= 0) ? clrLime : clrRed; if(ObjectFind(0, "Info2") < 0) ObjectCreate(0, "Info2", OBJ_LABEL, 0, 0, 0); ObjectSetInteger(0, "Info2", OBJPROP_XDISTANCE, BtnX); ObjectSetInteger(0, "Info2", OBJPROP_YDISTANCE, BtnY + BtnHeight + 20); ObjectSetString(0, "Info2", OBJPROP_TEXT, info2); ObjectSetInteger(0, "Info2", OBJPROP_COLOR, clr); ObjectSetInteger(0, "Info2", OBJPROP_FONTSIZE, 9); } else { ObjectDelete(0, "Info2"); } ChartRedraw(0); } //+------------------------------------------------------------------+ //| 执行平仓 | //+------------------------------------------------------------------+ void ExecuteClose() { // 统计订单 int buyCount=0, sellCount=0; double profit=0; int totalOrders=0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(!CloseAllPairs && OrderSymbol() != Symbol()) continue; totalOrders++; if(OrderType()==OP_BUY) buyCount++; if(OrderType()==OP_SELL) sellCount++; profit += OrderProfit()+OrderSwap()+OrderCommission(); } } if(totalOrders == 0) { MessageBox("当前没有持仓", "提示", MB_OK); return; } // 确认对话框 if(ShowConfirm) { string msg = "确认平仓?\n"; msg += "买单: " + IntegerToString(buyCount) + "\n"; msg += "卖单: " + IntegerToString(sellCount) + "\n"; msg += "盈亏: $" + DoubleToString(profit,2); if(MessageBox(msg, "确认", MB_YESNO) != IDYES) return; } // 执行平仓 int success=0, fail=0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(!CloseAllPairs && OrderSymbol() != Symbol()) continue; RefreshRates(); double price = (OrderType()==OP_BUY) ? Bid : Ask; if(OrderClose(OrderTicket(), OrderLots(), price, Slippage, clrNONE)) success++; else fail++; } } MessageBox("平仓完成\n成功: " + IntegerToString(success) + "\n失败: " + IntegerToString(fail), "结果", MB_OK); UpdateDisplay(); } //+------------------------------------------------------------------+
调试好了,一键平仓整合到我的盯盘EA了。感觉很方便。单子也解套了。
韬客社区www.talkfx.co
发表于:2026-03-12 11:10只看该作者
91楼
这个好啊感谢提供的代码
韬客社区www.talkfx.co
发表于:2026-03-12 12:56只看该作者
92楼
lenyou 发表于 2026-03-12 10: 41要的token 可能比你交易赚的还多。。。
现在都是ai 的时代了
韬客社区www.talkfx.co














