581589 发表于 2026-5-24 13:23:31

【 BigRise一款俄罗斯的源码】多货币自动匹配对冲(参数已经调校好,无需修改)








由原来的MT4升级到MT5,并把之前的俄语释义,全部改成英文和中文,增加了一些开单条件(但是都默认关闭的),手数采用平推即可,大资金的可以自己修改加仓参数,有三个选项可以自己选择开启或关闭,默认都是关闭,只做平推,很稳健!

加载欧美任意一个货币兑即可,一分钟周期(五分钟可选)不要总单独提问了,所有我发布的代码都是经过亲测。

581589 发表于 2026-5-25 13:12:33



中午时分开了两单,自动手数的,也可以固定手数开单,都可以设置,无限制。

581589 发表于 2026-5-25 13:47:24



周一开盘大吉!!!俄罗斯的东西确实不错。

581589 发表于 2026-5-25 19:36:36



最新盈利展示。今后不再展示,请自行测试!

581589 发表于 2026-5-26 13:09:02



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

面板源码修正:

//+------------------------------------------------------------------+
//| 更新面板数据(数值)——优化颜色和格式                              |
//+------------------------------------------------------------------+
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.symbol);
      double lot = CalculateLotSize(pairs);
      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.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.symbol);
      }
      else if(sparam == "btn_closeLoss")
      {
         CloseLossPositions(pairs.symbol);
      }
      else if(sparam == "btn_closePair")
      {
         ClosePositionsBySymbol(pairs.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.symbol;
         double lot = CalculateLotSize(pairs);
         OpenOrder(sym, 1, lot, InpMagic, "Manual Buy");
      }
      else if(sparam == "TRADEs_S")
      {
         string sym = pairs.symbol;
         double lot = CalculateLotSize(pairs);
         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;
}
//+------------------------------------------------------------------+

581589 发表于 2026-5-26 13:11:57

EA面板修正后最新版本,参数已经调校好,默认即可,仓位大的忽略!

581589 发表于 2026-5-28 09:50:47



本来不想这样张扬的,无奈很多客户问盈利情况,自己看~今日最新盈利。

581589 发表于 2026-5-28 21:12:09



今日的盈利和开单情况,今天白天和昨日有一天的持仓单,刚才一波行情结束全部盈利出局!

581589 发表于 2026-5-31 19:28:14

我特意用模拟账号给大家观摩:

账号:63559

密码:Abc123789$(密码不定时更新)

服务器:EBCFinancialGroupKY-Demo

581589 发表于 2026-6-5 23:31:43



今日两个软件盈利收益!

fjszph 发表于 2026-5-24 13:28:45

这不错的做单

581589 发表于 2026-5-24 14:10:19

fjszph 发表于 2026-5-24 13:28
这不错的做单

感谢支持

16237298 发表于 2026-5-24 16:03:29

MT4,还能不能用

581589 发表于 2026-5-24 16:13:25

16237298 发表于 2026-5-24 16:03
MT4,还能不能用

你之前有的话可以用。就是源码有些凌乱,需要优化

53916584 发表于 2026-5-24 23:50:32

奈何活跃度不够只能看着

581589 发表于 2026-5-25 06:36:18

53916584 发表于 2026-5-24 23:50
奈何活跃度不够只能看着

那就多活跃活跃

413774302 发表于 2026-5-25 06:45:56

参数都默认就可以吗?有人试过没呀?

581589 发表于 2026-5-25 14:30:56

413774302 发表于 2026-5-25 06:45
参数都默认就可以吗?有人试过没呀?

别人测试不如自己测试

hncbxjh 发表于 2026-5-25 20:54:22

这个不错

huangyi0324 发表于 2026-5-26 01:54:55


能把面板优化一下吗

agg123456789 发表于 2026-5-26 02:08:45

看着不错,先收藏一下

581589 发表于 2026-5-26 09:03:29

huangyi0324 发表于 2026-5-26 01:54
能把面板优化一下吗

正在处理这个面板模块

581589 发表于 2026-5-26 09:03:46

agg123456789 发表于 2026-5-26 02:08
看着不错,先收藏一下

感谢支持~~~~

581589 发表于 2026-5-26 09:04:02

hncbxjh 发表于 2026-5-25 20:54
这个不错

谢谢老板支持

jiangliangjl 发表于 2026-5-26 11:08:00

这个不错,下载测试,感谢楼主!

470949635 发表于 2026-5-26 11:45:20

先下载试试,感谢楼主
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【 BigRise一款俄罗斯的源码】多货币自动匹配对冲(参数已经调校好,无需修改)