581589
C
 楼主 | 发表于 2026-5-26 13:06:55 | 显示全部楼层
huangyi0324 发表于 2026-5-26 01:54
能把面板优化一下吗

已经优化完毕。
举报

点赞 评论 使用道具

581589
C
 楼主 | 发表于 2026-5-26 13:09:02 | 显示全部楼层
73A466D16C4C94132D3702BC6CEC7C0D.png

面板进行了优化,搞了许久。。。这方面的功底有些欠缺啊。

面板源码修正:

//+------------------------------------------------------------------+
//| 更新面板数据(数值)——优化颜色和格式                              |
//+------------------------------------------------------------------+
void UpdatePanelData()
{
   if(!gInfoPanelCollapsed)
   {
      ObjectSetString(0, "info_balance", OBJPROP_TEXT, DoubleToString(GetAccountBalance(), 2));
      ObjectSetString(0, "info_equity", OBJPROP_TEXT, DoubleToString(AccountInfoDouble(ACCOUNT_EQUITY), 2));
      ObjectSetString(0, "info_margin", OBJPROP_TEXT, DoubleToString(AccountInfoDouble(ACCOUNT_MARGIN), 2));
      ObjectSetString(0, "info_freeMargin", OBJPROP_TEXT, DoubleToString(AccountInfoDouble(ACCOUNT_MARGIN_FREE), 2));
      ObjectSetString(0, "info_totalOrders", OBJPROP_TEXT, IntegerToString(GetAllPositionsCount()));
      double totalProfit = GetTotalProfit();
      ObjectSetString(0, "info_totalProfit", OBJPROP_TEXT, DoubleToString(totalProfit, 2));
      if(totalProfit >= 0)
         ObjectSetInteger(0, "info_totalProfit", OBJPROP_COLOR, clrLime);
      else
         ObjectSetInteger(0, "info_totalProfit", OBJPROP_COLOR, clrRed);
         
      for(int i = 0; i < totalPairs; i++)
      {
         double pairProfit = GetPairProfit(pairs.symbol);
         string profitStr = DoubleToString(pairProfit, 2);
         ObjectSetString(0, "info_profit"+IntegerToString(i), OBJPROP_TEXT, profitStr);
         if(pairProfit >= 0)
            ObjectSetInteger(0, "info_profit"+IntegerToString(i), OBJPROP_COLOR, clrLime);
         else
            ObjectSetInteger(0, "info_profit"+IntegerToString(i), OBJPROP_COLOR, clrRed);
      }
   }
   if(!gTradePanelCollapsed)
   {
      ObjectSetString(0, "trade_selectedPair", OBJPROP_TEXT, pairs[gSelectedPairIndex].symbol);
      double lot = CalculateLotSize(pairs[gSelectedPairIndex]);
      ObjectSetString(0, "TRADEs_B", OBJPROP_TEXT, "买入  " + DoubleToString(lot, 2));
      ObjectSetString(0, "TRADEs_S", OBJPROP_TEXT, "卖出  " + DoubleToString(lot, 2));
   }
}

//+------------------------------------------------------------------+
//| 创建信息面板(中文)——加宽宽度并调整位置,保证所有信息完整显示    |
//+------------------------------------------------------------------+
void CreateInfoPanel()
{
   int x = 370, y = 20, w = 420, h = 460; // 大幅加宽并右移,避免与交易面板重叠

   if(!ObjectCreate(0, "info_background", OBJ_RECTANGLE_LABEL, 0, 0, 0))
      Print("创建背景失败");
   ObjectSetInteger(0, "info_background", OBJPROP_XDISTANCE, x);
   ObjectSetInteger(0, "info_background", OBJPROP_YDISTANCE, y);
   ObjectSetInteger(0, "info_background", OBJPROP_XSIZE, w);
   ObjectSetInteger(0, "info_background", OBJPROP_YSIZE, h);
   ObjectSetInteger(0, "info_background", OBJPROP_BGCOLOR, clrDarkSlateGray);
   ObjectSetInteger(0, "info_background", OBJPROP_CORNER, CORNER_LEFT_UPPER);
   ObjectSetInteger(0, "info_background", OBJPROP_BORDER_TYPE, BORDER_SUNKEN);
   ObjectSetInteger(0, "info_background", OBJPROP_BORDER_COLOR, clrGoldenrod);
   
   ObjectCreate(0, "info_toggle", OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, "info_toggle", OBJPROP_XDISTANCE, x + w - 70);
   ObjectSetInteger(0, "info_toggle", OBJPROP_YDISTANCE, y + 8);
   ObjectSetInteger(0, "info_toggle", OBJPROP_YSIZE, 24);
   ObjectSetInteger(0, "info_toggle", OBJPROP_XSIZE, 60);
   ObjectSetString(0, "info_toggle", OBJPROP_TEXT, "隐藏");
   ObjectSetInteger(0, "info_toggle", OBJPROP_BGCOLOR, clrDimGray);
   ObjectSetInteger(0, "info_toggle", OBJPROP_FONTSIZE, 11);
   ObjectSetInteger(0, "info_toggle", OBJPROP_COLOR, clrWhite);
   
   ObjectCreate(0, "info_title", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "info_title", OBJPROP_XDISTANCE, x + 15);
   ObjectSetInteger(0, "info_title", OBJPROP_YDISTANCE, y + 15);
   ObjectSetString(0, "info_title", OBJPROP_TEXT, "账户信息");
   ObjectSetInteger(0, "info_title", OBJPROP_COLOR, clrCyan);
   ObjectSetInteger(0, "info_title", OBJPROP_FONTSIZE, 16);
   ObjectSetString(0, "info_title", OBJPROP_FONT, "Arial Bold");
   
   int lineY = y + 50;
   int step = 28;
   int labelX = x + 20;
   int valueX = x + 220; // 数值列右移,给长标签留足空间
   
   // 余额
   ObjectCreate(0, "info_balanceLabel", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "info_balanceLabel", OBJPROP_XDISTANCE, labelX);
   ObjectSetInteger(0, "info_balanceLabel", OBJPROP_YDISTANCE, lineY);
   ObjectSetString(0, "info_balanceLabel", OBJPROP_TEXT, "账户余额:");
   ObjectSetInteger(0, "info_balanceLabel", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "info_balanceLabel", OBJPROP_FONTSIZE, 12);
   ObjectCreate(0, "info_balance", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "info_balance", OBJPROP_XDISTANCE, valueX);
   ObjectSetInteger(0, "info_balance", OBJPROP_YDISTANCE, lineY);
   ObjectSetString(0, "info_balance", OBJPROP_TEXT, "0.00");
   ObjectSetInteger(0, "info_balance", OBJPROP_COLOR, clrYellow);
   ObjectSetInteger(0, "info_balance", OBJPROP_FONTSIZE, 12);
   lineY += step;
   
   // 净值
   ObjectCreate(0, "info_equityLabel", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "info_equityLabel", OBJPROP_XDISTANCE, labelX);
   ObjectSetInteger(0, "info_equityLabel", OBJPROP_YDISTANCE, lineY);
   ObjectSetString(0, "info_equityLabel", OBJPROP_TEXT, "账户净值:");
   ObjectSetInteger(0, "info_equityLabel", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "info_equityLabel", OBJPROP_FONTSIZE, 12);
   ObjectCreate(0, "info_equity", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "info_equity", OBJPROP_XDISTANCE, valueX);
   ObjectSetInteger(0, "info_equity", OBJPROP_YDISTANCE, lineY);
   ObjectSetString(0, "info_equity", OBJPROP_TEXT, "0.00");
   ObjectSetInteger(0, "info_equity", OBJPROP_COLOR, clrYellow);
   ObjectSetInteger(0, "info_equity", OBJPROP_FONTSIZE, 12);
   lineY += step;
   
   // 已用保证金
   ObjectCreate(0, "info_marginLabel", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "info_marginLabel", OBJPROP_XDISTANCE, labelX);
   ObjectSetInteger(0, "info_marginLabel", OBJPROP_YDISTANCE, lineY);
   ObjectSetString(0, "info_marginLabel", OBJPROP_TEXT, "已用保证金:");
   ObjectSetInteger(0, "info_marginLabel", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "info_marginLabel", OBJPROP_FONTSIZE, 12);
   ObjectCreate(0, "info_margin", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "info_margin", OBJPROP_XDISTANCE, valueX);
   ObjectSetInteger(0, "info_margin", OBJPROP_YDISTANCE, lineY);
   ObjectSetString(0, "info_margin", OBJPROP_TEXT, "0.00");
   ObjectSetInteger(0, "info_margin", OBJPROP_COLOR, clrYellow);
   ObjectSetInteger(0, "info_margin", OBJPROP_FONTSIZE, 12);
   lineY += step;
   
   // 可用保证金
   ObjectCreate(0, "info_freeMarginLabel", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "info_freeMarginLabel", OBJPROP_XDISTANCE, labelX);
   ObjectSetInteger(0, "info_freeMarginLabel", OBJPROP_YDISTANCE, lineY);
   ObjectSetString(0, "info_freeMarginLabel", OBJPROP_TEXT, "可用保证金:");
   ObjectSetInteger(0, "info_freeMarginLabel", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "info_freeMarginLabel", OBJPROP_FONTSIZE, 12);
   ObjectCreate(0, "info_freeMargin", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "info_freeMargin", OBJPROP_XDISTANCE, valueX);
   ObjectSetInteger(0, "info_freeMargin", OBJPROP_YDISTANCE, lineY);
   ObjectSetString(0, "info_freeMargin", OBJPROP_TEXT, "0.00");
   ObjectSetInteger(0, "info_freeMargin", OBJPROP_COLOR, clrYellow);
   ObjectSetInteger(0, "info_freeMargin", OBJPROP_FONTSIZE, 12);
   lineY += step;
   
   // 持仓数
   ObjectCreate(0, "info_totalOrdersLabel", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "info_totalOrdersLabel", OBJPROP_XDISTANCE, labelX);
   ObjectSetInteger(0, "info_totalOrdersLabel", OBJPROP_YDISTANCE, lineY);
   ObjectSetString(0, "info_totalOrdersLabel", OBJPROP_TEXT, "持仓总单数:");
   ObjectSetInteger(0, "info_totalOrdersLabel", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "info_totalOrdersLabel", OBJPROP_FONTSIZE, 12);
   ObjectCreate(0, "info_totalOrders", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "info_totalOrders", OBJPROP_XDISTANCE, valueX);
   ObjectSetInteger(0, "info_totalOrders", OBJPROP_YDISTANCE, lineY);
   ObjectSetString(0, "info_totalOrders", OBJPROP_TEXT, "0");
   ObjectSetInteger(0, "info_totalOrders", OBJPROP_COLOR, clrYellow);
   ObjectSetInteger(0, "info_totalOrders", OBJPROP_FONTSIZE, 12);
   lineY += step + 8;
   
   // 分割线
   ObjectCreate(0, "info_line1", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "info_line1", OBJPROP_XDISTANCE, x + 15);
   ObjectSetInteger(0, "info_line1", OBJPROP_YDISTANCE, lineY);
   ObjectSetString(0, "info_line1", OBJPROP_TEXT, "────────────────────────────────────");
   ObjectSetInteger(0, "info_line1", OBJPROP_COLOR, clrLightGray);
   lineY += 25;
   
   // 总盈亏
   ObjectCreate(0, "info_totalProfitLabel", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "info_totalProfitLabel", OBJPROP_XDISTANCE, labelX);
   ObjectSetInteger(0, "info_totalProfitLabel", OBJPROP_YDISTANCE, lineY);
   ObjectSetString(0, "info_totalProfitLabel", OBJPROP_TEXT, "总盈亏:");
   ObjectSetInteger(0, "info_totalProfitLabel", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "info_totalProfitLabel", OBJPROP_FONTSIZE, 12);
   ObjectCreate(0, "info_totalProfit", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "info_totalProfit", OBJPROP_XDISTANCE, valueX);
   ObjectSetInteger(0, "info_totalProfit", OBJPROP_YDISTANCE, lineY);
   ObjectSetString(0, "info_totalProfit", OBJPROP_TEXT, "0.00");
   ObjectSetInteger(0, "info_totalProfit", OBJPROP_COLOR, clrYellow);
   ObjectSetInteger(0, "info_totalProfit", OBJPROP_FONTSIZE, 12);
   lineY += step + 8;
   
   // 各货币对盈亏
   for(int i = 0; i < totalPairs; i++)
   {
      ObjectCreate(0, "info_profitLabel"+IntegerToString(i), OBJ_LABEL, 0, 0, 0);
      ObjectSetInteger(0, "info_profitLabel"+IntegerToString(i), OBJPROP_XDISTANCE, labelX);
      ObjectSetInteger(0, "info_profitLabel"+IntegerToString(i), OBJPROP_YDISTANCE, lineY);
      ObjectSetString(0, "info_profitLabel"+IntegerToString(i), OBJPROP_TEXT, pairs.symbol + ":");
      ObjectSetInteger(0, "info_profitLabel"+IntegerToString(i), OBJPROP_COLOR, clrWhite);
      ObjectSetInteger(0, "info_profitLabel"+IntegerToString(i), OBJPROP_FONTSIZE, 11);
      ObjectCreate(0, "info_profit"+IntegerToString(i), OBJ_LABEL, 0, 0, 0);
      ObjectSetInteger(0, "info_profit"+IntegerToString(i), OBJPROP_XDISTANCE, valueX);
      ObjectSetInteger(0, "info_profit"+IntegerToString(i), OBJPROP_YDISTANCE, lineY);
      ObjectSetString(0, "info_profit"+IntegerToString(i), OBJPROP_TEXT, "0.00");
      ObjectSetInteger(0, "info_profit"+IntegerToString(i), OBJPROP_COLOR, clrYellow);
      ObjectSetInteger(0, "info_profit"+IntegerToString(i), OBJPROP_FONTSIZE, 11);
      lineY += step;
   }
}

//+------------------------------------------------------------------+
//| 创建交易面板(中文)——保持宽度不变,确保文字完整显示              |
//+------------------------------------------------------------------+
void CreateTradePanel()
{
   int x = 10, y = 20, w = 350, h = 460; // 交易面板宽度保持350px

   if(!ObjectCreate(0, "trade_background", OBJ_RECTANGLE_LABEL, 0, 0, 0))
      Print("创建交易面板背景失败");
   ObjectSetInteger(0, "trade_background", OBJPROP_XDISTANCE, x);
   ObjectSetInteger(0, "trade_background", OBJPROP_YDISTANCE, y);
   ObjectSetInteger(0, "trade_background", OBJPROP_XSIZE, w);
   ObjectSetInteger(0, "trade_background", OBJPROP_YSIZE, h);
   ObjectSetInteger(0, "trade_background", OBJPROP_BGCOLOR, clrDarkSlateGray);
   ObjectSetInteger(0, "trade_background", OBJPROP_CORNER, CORNER_LEFT_UPPER);
   ObjectSetInteger(0, "trade_background", OBJPROP_BORDER_TYPE, BORDER_SUNKEN);
   ObjectSetInteger(0, "trade_background", OBJPROP_BORDER_COLOR, clrGoldenrod);
   
   ObjectCreate(0, "trade_toggle", OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, "trade_toggle", OBJPROP_XDISTANCE, x + w - 70);
   ObjectSetInteger(0, "trade_toggle", OBJPROP_YDISTANCE, y + 8);
   ObjectSetInteger(0, "trade_toggle", OBJPROP_YSIZE, 24);
   ObjectSetInteger(0, "trade_toggle", OBJPROP_XSIZE, 60);
   ObjectSetString(0, "trade_toggle", OBJPROP_TEXT, "隐藏");
   ObjectSetInteger(0, "trade_toggle", OBJPROP_BGCOLOR, clrDimGray);
   ObjectSetInteger(0, "trade_toggle", OBJPROP_FONTSIZE, 11);
   ObjectSetInteger(0, "trade_toggle", OBJPROP_COLOR, clrWhite);
   
   ObjectCreate(0, "trade_title", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "trade_title", OBJPROP_XDISTANCE, x + 15);
   ObjectSetInteger(0, "trade_title", OBJPROP_YDISTANCE, y + 15);
   ObjectSetString(0, "trade_title", OBJPROP_TEXT, "交易控制");
   ObjectSetInteger(0, "trade_title", OBJPROP_COLOR, clrCyan);
   ObjectSetInteger(0, "trade_title", OBJPROP_FONTSIZE, 16);
   ObjectSetString(0, "trade_title", OBJPROP_FONT, "Arial Bold");
   
   int lineY = y + 50;
   int step = 26;
   int labelX = x + 20;
   int valueX = x + 200;
   
   // 当前货币对
   ObjectCreate(0, "trade_selectedLabel", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "trade_selectedLabel", OBJPROP_XDISTANCE, labelX);
   ObjectSetInteger(0, "trade_selectedLabel", OBJPROP_YDISTANCE, lineY);
   ObjectSetString(0, "trade_selectedLabel", OBJPROP_TEXT, "当前货币兑:");
   ObjectSetInteger(0, "trade_selectedLabel", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "trade_selectedLabel", OBJPROP_FONTSIZE, 12);
   ObjectCreate(0, "trade_selectedPair", OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "trade_selectedPair", OBJPROP_XDISTANCE, valueX);
   ObjectSetInteger(0, "trade_selectedPair", OBJPROP_YDISTANCE, lineY);
   ObjectSetString(0, "trade_selectedPair", OBJPROP_TEXT, pairs[0].symbol);
   ObjectSetInteger(0, "trade_selectedPair", OBJPROP_COLOR, clrYellow);
   ObjectSetInteger(0, "trade_selectedPair", OBJPROP_FONTSIZE, 12);
   lineY += step + 8;
   
   // 货币对选择按钮
   int btnY = lineY;
   int btnW = 36;
   for(int i = 0; i < totalPairs; i++)
   {
      ObjectCreate(0, "pair_btn_"+IntegerToString(i), OBJ_BUTTON, 0, 0, 0);
      ObjectSetInteger(0, "pair_btn_"+IntegerToString(i), OBJPROP_XDISTANCE, x + 18 + i*(btnW+6));
      ObjectSetInteger(0, "pair_btn_"+IntegerToString(i), OBJPROP_YDISTANCE, btnY);
      ObjectSetInteger(0, "pair_btn_"+IntegerToString(i), OBJPROP_XSIZE, btnW);
      ObjectSetInteger(0, "pair_btn_"+IntegerToString(i), OBJPROP_YSIZE, 26);
      ObjectSetString(0, "pair_btn_"+IntegerToString(i), OBJPROP_TEXT, IntegerToString(i+1));
      ObjectSetInteger(0, "pair_btn_"+IntegerToString(i), OBJPROP_BGCOLOR, clrDarkGray);
      ObjectSetInteger(0, "pair_btn_"+IntegerToString(i), OBJPROP_COLOR, clrWhite);
      ObjectSetInteger(0, "pair_btn_"+IntegerToString(i), OBJPROP_FONTSIZE, 11);
   }
   lineY = btnY + 36;
   
   // 平仓按钮(宽度155px,文字完整)
   ObjectCreate(0, "btn_closeProfit", OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, "btn_closeProfit", OBJPROP_XDISTANCE, x + 15);
   ObjectSetInteger(0, "btn_closeProfit", OBJPROP_YDISTANCE, lineY);
   ObjectSetInteger(0, "btn_closeProfit", OBJPROP_XSIZE, 155);
   ObjectSetInteger(0, "btn_closeProfit", OBJPROP_YSIZE, 28);
   ObjectSetString(0, "btn_closeProfit", OBJPROP_TEXT, "平盈利单");
   ObjectSetInteger(0, "btn_closeProfit", OBJPROP_BGCOLOR, clrDarkGray);
   ObjectSetInteger(0, "btn_closeProfit", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "btn_closeProfit", OBJPROP_FONTSIZE, 12);
   
   ObjectCreate(0, "btn_closeLoss", OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, "btn_closeLoss", OBJPROP_XDISTANCE, x + 180);
   ObjectSetInteger(0, "btn_closeLoss", OBJPROP_YDISTANCE, lineY);
   ObjectSetInteger(0, "btn_closeLoss", OBJPROP_XSIZE, 155);
   ObjectSetInteger(0, "btn_closeLoss", OBJPROP_YSIZE, 28);
   ObjectSetString(0, "btn_closeLoss", OBJPROP_TEXT, "平亏损单");
   ObjectSetInteger(0, "btn_closeLoss", OBJPROP_BGCOLOR, clrDarkGray);
   ObjectSetInteger(0, "btn_closeLoss", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "btn_closeLoss", OBJPROP_FONTSIZE, 12);
   lineY += 34;
   
   ObjectCreate(0, "btn_closePair", OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, "btn_closePair", OBJPROP_XDISTANCE, x + 15);
   ObjectSetInteger(0, "btn_closePair", OBJPROP_YDISTANCE, lineY);
   ObjectSetInteger(0, "btn_closePair", OBJPROP_XSIZE, 155);
   ObjectSetInteger(0, "btn_closePair", OBJPROP_YSIZE, 28);
   ObjectSetString(0, "btn_closePair", OBJPROP_TEXT, "平该货币兑");
   ObjectSetInteger(0, "btn_closePair", OBJPROP_BGCOLOR, clrDarkGray);
   ObjectSetInteger(0, "btn_closePair", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "btn_closePair", OBJPROP_FONTSIZE, 12);
   
   ObjectCreate(0, "btn_closeAll", OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, "btn_closeAll", OBJPROP_XDISTANCE, x + 180);
   ObjectSetInteger(0, "btn_closeAll", OBJPROP_YDISTANCE, lineY);
   ObjectSetInteger(0, "btn_closeAll", OBJPROP_XSIZE, 155);
   ObjectSetInteger(0, "btn_closeAll", OBJPROP_YSIZE, 28);
   ObjectSetString(0, "btn_closeAll", OBJPROP_TEXT, "平全部单");
   ObjectSetInteger(0, "btn_closeAll", OBJPROP_BGCOLOR, clrDarkGray);
   ObjectSetInteger(0, "btn_closeAll", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "btn_closeAll", OBJPROP_FONTSIZE, 12);
   lineY += 38;
   
   // 开关按钮(宽度155px,文字完整)
   ObjectCreate(0, "sw_autoTrade", OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, "sw_autoTrade", OBJPROP_XDISTANCE, x + 15);
   ObjectSetInteger(0, "sw_autoTrade", OBJPROP_YDISTANCE, lineY);
   ObjectSetInteger(0, "sw_autoTrade", OBJPROP_XSIZE, 155);
   ObjectSetInteger(0, "sw_autoTrade", OBJPROP_YSIZE, 26);
   ObjectSetString(0, "sw_autoTrade", OBJPROP_TEXT, "自动交易: 开");
   ObjectSetInteger(0, "sw_autoTrade", OBJPROP_BGCOLOR, clrGreen);
   ObjectSetInteger(0, "sw_autoTrade", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "sw_autoTrade", OBJPROP_FONTSIZE, 11);
   
   ObjectCreate(0, "sw_gridProfit", OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, "sw_gridProfit", OBJPROP_XDISTANCE, x + 180);
   ObjectSetInteger(0, "sw_gridProfit", OBJPROP_YDISTANCE, lineY);
   ObjectSetInteger(0, "sw_gridProfit", OBJPROP_XSIZE, 155);
   ObjectSetInteger(0, "sw_gridProfit", OBJPROP_YSIZE, 26);
   ObjectSetString(0, "sw_gridProfit", OBJPROP_TEXT, "盈利网格: 开");
   ObjectSetInteger(0, "sw_gridProfit", OBJPROP_BGCOLOR, clrGreen);
   ObjectSetInteger(0, "sw_gridProfit", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "sw_gridProfit", OBJPROP_FONTSIZE, 11);
   lineY += 32;
   
   ObjectCreate(0, "sw_gridLoss", OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, "sw_gridLoss", OBJPROP_XDISTANCE, x + 15);
   ObjectSetInteger(0, "sw_gridLoss", OBJPROP_YDISTANCE, lineY);
   ObjectSetInteger(0, "sw_gridLoss", OBJPROP_XSIZE, 155);
   ObjectSetInteger(0, "sw_gridLoss", OBJPROP_YSIZE, 26);
   ObjectSetString(0, "sw_gridLoss", OBJPROP_TEXT, "亏损网格: 开");
   ObjectSetInteger(0, "sw_gridLoss", OBJPROP_BGCOLOR, clrGreen);
   ObjectSetInteger(0, "sw_gridLoss", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "sw_gridLoss", OBJPROP_FONTSIZE, 11);
   
   ObjectCreate(0, "sw_mobileTrade", OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, "sw_mobileTrade", OBJPROP_XDISTANCE, x + 180);
   ObjectSetInteger(0, "sw_mobileTrade", OBJPROP_YDISTANCE, lineY);
   ObjectSetInteger(0, "sw_mobileTrade", OBJPROP_XSIZE, 155);
   ObjectSetInteger(0, "sw_mobileTrade", OBJPROP_YSIZE, 26);
   ObjectSetString(0, "sw_mobileTrade", OBJPROP_TEXT, "移动跟单: 关");
   ObjectSetInteger(0, "sw_mobileTrade", OBJPROP_BGCOLOR, clrDarkGray);
   ObjectSetInteger(0, "sw_mobileTrade", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "sw_mobileTrade", OBJPROP_FONTSIZE, 11);
   lineY += 32;
   
   ObjectCreate(0, "sw_nightUnload", OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, "sw_nightUnload", OBJPROP_XDISTANCE, x + 15);
   ObjectSetInteger(0, "sw_nightUnload", OBJPROP_YDISTANCE, lineY);
   ObjectSetInteger(0, "sw_nightUnload", OBJPROP_XSIZE, 155);
   ObjectSetInteger(0, "sw_nightUnload", OBJPROP_YSIZE, 26);
   ObjectSetString(0, "sw_nightUnload", OBJPROP_TEXT, "夜间清仓: 关");
   ObjectSetInteger(0, "sw_nightUnload", OBJPROP_BGCOLOR, clrDarkGray);
   ObjectSetInteger(0, "sw_nightUnload", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "sw_nightUnload", OBJPROP_FONTSIZE, 11);
   lineY += 40;
   
   // 买卖按钮(宽度155px,文字完整)
   ObjectCreate(0, "TRADEs_B", OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, "TRADEs_B", OBJPROP_XDISTANCE, x + 15);
   ObjectSetInteger(0, "TRADEs_B", OBJPROP_YDISTANCE, lineY);
   ObjectSetInteger(0, "TRADEs_B", OBJPROP_XSIZE, 155);
   ObjectSetInteger(0, "TRADEs_B", OBJPROP_YSIZE, 32);
   ObjectSetString(0, "TRADEs_B", OBJPROP_TEXT, "买入 0.01");
   ObjectSetInteger(0, "TRADEs_B", OBJPROP_BGCOLOR, clrBlue);
   ObjectSetInteger(0, "TRADEs_B", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "TRADEs_B", OBJPROP_FONTSIZE, 13);
   
   ObjectCreate(0, "TRADEs_S", OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, "TRADEs_S", OBJPROP_XDISTANCE, x + 180);
   ObjectSetInteger(0, "TRADEs_S", OBJPROP_YDISTANCE, lineY);
   ObjectSetInteger(0, "TRADEs_S", OBJPROP_XSIZE, 155);
   ObjectSetInteger(0, "TRADEs_S", OBJPROP_YSIZE, 32);
   ObjectSetString(0, "TRADEs_S", OBJPROP_TEXT, "卖出 0.01");
   ObjectSetInteger(0, "TRADEs_S", OBJPROP_BGCOLOR, clrRed);
   ObjectSetInteger(0, "TRADEs_S", OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, "TRADEs_S", OBJPROP_FONTSIZE, 13);
}

//+------------------------------------------------------------------+
//| 更新按钮状态                                                     |
//+------------------------------------------------------------------+
void UpdateButtonsState()
{
   ObjectSetString(0, "sw_autoTrade", OBJPROP_TEXT, gAutoTrade ? "自动交易: 开" : "自动交易: 关");
   ObjectSetInteger(0, "sw_autoTrade", OBJPROP_BGCOLOR, gAutoTrade ? clrGreen : clrDarkGray);
   ObjectSetString(0, "sw_gridProfit", OBJPROP_TEXT, gGridProfit ? "盈利网格: 开" : "盈利网格: 关");
   ObjectSetInteger(0, "sw_gridProfit", OBJPROP_BGCOLOR, gGridProfit ? clrGreen : clrDarkGray);
   ObjectSetString(0, "sw_gridLoss", OBJPROP_TEXT, gGridLoss ? "亏损网格: 开" : "亏损网格: 关");
   ObjectSetInteger(0, "sw_gridLoss", OBJPROP_BGCOLOR, gGridLoss ? clrGreen : clrDarkGray);
   ObjectSetString(0, "sw_mobileTrade", OBJPROP_TEXT, gMobileTrade ? "移动跟单: 开" : "移动跟单: 关");
   ObjectSetInteger(0, "sw_mobileTrade", OBJPROP_BGCOLOR, gMobileTrade ? clrGreen : clrDarkGray);
   ObjectSetString(0, "sw_nightUnload", OBJPROP_TEXT, gUnloadNight ? "夜间清仓: 开" : "夜间清仓: 关");
   ObjectSetInteger(0, "sw_nightUnload", OBJPROP_BGCOLOR, gUnloadNight ? clrGreen : clrDarkGray);
   
   for(int i = 0; i < totalPairs; i++)
   {
      color bg = (gSelectedPairIndex == i) ? clrYellow : clrDarkGray;
      color txt = (gSelectedPairIndex == i) ? clrBlack : clrWhite;
      ObjectSetInteger(0, "pair_btn_"+IntegerToString(i), OBJPROP_BGCOLOR, bg);
      ObjectSetInteger(0, "pair_btn_"+IntegerToString(i), OBJPROP_COLOR, txt);
   }
}

//+------------------------------------------------------------------+
//| 图表事件处理                                                     |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
   if(id == CHARTEVENT_OBJECT_CLICK)
   {
      if(sparam == "info_toggle")
      {
         gInfoPanelCollapsed = !gInfoPanelCollapsed;
         ObjectsDeleteAll(0, "info_", -1, -1);
         if(gInfoPanelCollapsed)
            ObjectSetString(0, "info_toggle", OBJPROP_TEXT, "显示");
         else
         {
            CreateInfoPanel();
            ObjectSetString(0, "info_toggle", OBJPROP_TEXT, "隐藏");
         }
         ChartRedraw();
      }
      else if(sparam == "trade_toggle")
      {
         gTradePanelCollapsed = !gTradePanelCollapsed;
         ObjectsDeleteAll(0, "trade_", -1, -1);
         if(gTradePanelCollapsed)
            ObjectSetString(0, "trade_toggle", OBJPROP_TEXT, "显示");
         else
         {
            CreateTradePanel();
            ObjectSetString(0, "trade_toggle", OBJPROP_TEXT, "隐藏");
         }
         ChartRedraw();
      }
      else if(StringFind(sparam, "pair_btn_") == 0)
      {
         int idx = (int)StringToInteger(StringSubstr(sparam, 9));
         if(idx >= 0 && idx < totalPairs)
            gSelectedPairIndex = idx;
         UpdateButtonsState();
         UpdatePanelData();
      }
      else if(sparam == "btn_closeProfit")
      {
         CloseProfitPositions(pairs[gSelectedPairIndex].symbol);
      }
      else if(sparam == "btn_closeLoss")
      {
         CloseLossPositions(pairs[gSelectedPairIndex].symbol);
      }
      else if(sparam == "btn_closePair")
      {
         ClosePositionsBySymbol(pairs[gSelectedPairIndex].symbol);
      }
      else if(sparam == "btn_closeAll")
      {
         CloseAllPositions();
      }
      else if(sparam == "sw_autoTrade")
      {
         gAutoTrade = !gAutoTrade;
         UpdateButtonsState();
      }
      else if(sparam == "sw_gridProfit")
      {
         gGridProfit = !gGridProfit;
         UpdateButtonsState();
      }
      else if(sparam == "sw_gridLoss")
      {
         gGridLoss = !gGridLoss;
         UpdateButtonsState();
      }
      else if(sparam == "sw_mobileTrade")
      {
         gMobileTrade = !gMobileTrade;
         UpdateButtonsState();
      }
      else if(sparam == "sw_nightUnload")
      {
         gUnloadNight = !gUnloadNight;
         UpdateButtonsState();
      }
      else if(sparam == "TRADEs_B")
      {
         string sym = pairs[gSelectedPairIndex].symbol;
         double lot = CalculateLotSize(pairs[gSelectedPairIndex]);
         OpenOrder(sym, 1, lot, InpMagic, "Manual Buy");
      }
      else if(sparam == "TRADEs_S")
      {
         string sym = pairs[gSelectedPairIndex].symbol;
         double lot = CalculateLotSize(pairs[gSelectedPairIndex]);
         OpenOrder(sym, -1, lot, InpMagic, "Manual Sell");
      }
   }
}

//+------------------------------------------------------------------+
//| 初始化                                                           |
//+------------------------------------------------------------------+
int OnInit()
{
   if(InpAllowedAccount != 0 && AccountInfoInteger(ACCOUNT_LOGIN) != InpAllowedAccount)
   {
      Print("账号未授权!");
      return INIT_FAILED;
   }
   if(InpDemoOnly && AccountInfoInteger(ACCOUNT_TRADE_MODE) != ACCOUNT_TRADE_MODE_DEMO)
   {
      Print("仅允许模拟账户运行!");
      return INIT_FAILED;
   }
   
   ParseBlacklist();
   InitPairs();
   CreateInfoPanel();
   CreateTradePanel();
   UpdateButtonsState();
   
   EventSetMillisecondTimer(InpSpeedMs);
   return INIT_SUCCEEDED;
}

//+------------------------------------------------------------------+
//| 反初始化                                                         |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   EventKillTimer();
   ObjectsDeleteAll(0);
}

//+------------------------------------------------------------------+
//| 定时器(主循环)                                                  |
//+------------------------------------------------------------------+
void OnTimer()
{
   if(gIsProcessing) return;
   gIsProcessing = true;
   
   gIsWithinTime = IsWithinTradingHours();
   gIsBlacklistTime = IsBlacklistTime();
   
   ManageNightUnload();
   ManageMobileTrade();
   
   if(gAutoTrade && gIsWithinTime && !gMobileTrade && !gIsBlacklistTime)
   {
      SSignal sig = CalculateSignal();
      for(int i = 0; i < totalPairs; i++)
      {
         if(sig.shouldOpen && GetPairPositionsCount(pairs.symbol) == 0 && GetAllPositionsCount() < InpMaxOrders)
         {
            double lot = CalculateLotSize(pairs);
            if(AccountInfoDouble(ACCOUNT_MARGIN_FREE) > lot * 1000)
            {
               OpenOrder(pairs.symbol, sig.direction, lot, InpMagic, "BigRise Signal");
            }
         }
      }
      ManageGrid(sig);
   }
   
   ManageTakeProfitStopLoss();
   UpdatePanelData();
   UpdateButtonsState();
   
   gIsProcessing = false;
}
//+------------------------------------------------------------------+
举报

点赞 1 评论 使用道具

581589
C
 楼主 | 发表于 2026-5-26 13:11:57 | 显示全部楼层
EA面板修正后最新版本,参数已经调校好,默认即可,仓位大的忽略!
filetype

BigRise EA.ex5

53.64 KB, 下载次数: 227, 下载积分: 活跃度 -5  [下载]

面板修正

举报

点赞 1 评论 使用道具

581589
C
 楼主 | 发表于 2026-5-26 13:13:23 | 显示全部楼层
jiangliangjl 发表于 2026-5-26 11:08
这个不错,下载测试,感谢楼主!

感谢老板支持
~~
举报

点赞 评论 使用道具

581589
C
 楼主 | 发表于 2026-5-26 13:13:43 | 显示全部楼层
470949635 发表于 2026-5-26 11:45
先下载试试,感谢楼主

谢谢老板的支持。~~~
举报

点赞 评论 使用道具

woc888999
未及格
| 发表于 2026-5-26 13:54:19 | 显示全部楼层
看着很强可惜我没有活跃度
举报

点赞 评论 使用道具

2841731628
D
| 发表于 2026-5-26 13:56:20 | 显示全部楼层
能跑黄金吗?
举报

点赞 评论 使用道具

581589
C
 楼主 | 发表于 2026-5-26 13:58:46 | 显示全部楼层
woc888999 发表于 2026-5-26 13:54
看着很强可惜我没有活跃度

多活跃一下
举报

点赞 评论 使用道具

581589
C
 楼主 | 发表于 2026-5-26 13:59:12 | 显示全部楼层

不能,这是多货币自动匹配
举报

点赞 评论 使用道具

2841731628
D
| 发表于 2026-5-26 14:04:42 | 显示全部楼层
581589 发表于 2026-5-26 13:59
不能,这是多货币自动匹配

直接在MT5里面运行就行了吗?开什么窗口挂ea呢?
举报

点赞 评论 使用道具

581589
C
 楼主 | 发表于 2026-5-26 14:20:48 | 显示全部楼层
2841731628 发表于 2026-5-26 14:04
直接在MT5里面运行就行了吗?开什么窗口挂ea呢?

加载欧美任意一个货币兑即可,一分钟周期(五分钟可选)
举报

点赞 评论 使用道具

wonolove2016072
D
| 发表于 2026-5-26 15:24:12 | 显示全部楼层
581589 发表于 2026-5-26 13:09
面板进行了优化,搞了许久。。。这方面的功底有些欠缺啊。

面板源码修正:

牛逼还有源码提供啊
举报

点赞 评论 使用道具

581589
C
 楼主 | 发表于 2026-5-26 15:48:10 | 显示全部楼层
wonolove2016072 发表于 2026-5-26 15:24
牛逼还有源码提供啊

必须滴必!
举报

点赞 评论 使用道具

na84246767
D
| 发表于 2026-5-26 19:10:08 | 显示全部楼层
这个好用吗?有时间限制吗?..
举报

点赞 评论 使用道具

ggg666
D
| 发表于 2026-5-27 17:17:29 | 显示全部楼层
下载用美分实盘账户测试一下看
举报

点赞 评论 使用道具

581589
C
 楼主 | 发表于 2026-5-27 18:31:50 | 显示全部楼层
ggg666 发表于 2026-5-27 17:17
下载用美分实盘账户测试一下看

开单一天在两波。。。
举报

点赞 评论 使用道具

746427370
D
| 发表于 2026-5-27 18:36:08 | 显示全部楼层
大佬厉害 下载试试
举报

点赞 评论 使用道具

guoweijie
D
| 发表于 2026-5-27 23:13:23 | 显示全部楼层
下载试试
举报

点赞 评论 使用道具

guoweijie
D
| 发表于 2026-5-27 23:14:00 | 显示全部楼层
有时间限制吗?跑那些货币
举报

点赞 评论 使用道具

wenxiaoxiong1
DD
| 发表于 2026-5-27 23:16:15 | 显示全部楼层
太贵了,没币了
举报

点赞 评论 使用道具

EA交易
您需要登录后才可以评论 登录 | 立即注册