设为首页 收藏本站 切换语言

各位老大,帮忙看看代码哪里出错了???

| 发表于 2024-9-23 14:55:09 | 显示全部楼层 |复制链接
各位老大,帮忙看看代码哪里出错了???

  1. void CheckAndOpenLimitOrdersForSymbol(string symbol, SymbolData &data)
  2. {
  3. …………
  4.          double volume = GetTradeVolume(symbol);
  5.          bool isRecoveryMode = false;
  6.          
  7.          if(Recovery) // 只有当Recovery为true时才检查恢复模式
  8.          {
  9.             datetime startTime = TimeCurrent() - 30 * 24 * 60 * 60; // 30天前
  10.             HistorySelect(startTime, TimeCurrent());
  11.             
  12.             double lastLossAmount = 0;
  13.             double recoveryProfit = 0;
  14.             double lastLossVolume = 0;
  15.             bool foundLoss = false;
  16.             datetime lastLossTime = 0;
  17.             
  18.             Print("Checking orders for recovery mode from ", TimeToString(startTime), " to ", TimeToString(TimeCurrent()));
  19.             
  20.             for(int i = HistoryDealsTotal() - 1; i >= 0; i--)
  21.             {
  22.                ulong dealTicket = HistoryDealGetTicket(i);
  23.                if(HistoryDealSelect(dealTicket) &&
  24.                   HistoryDealGetString(dealTicket, DEAL_SYMBOL) == symbol &&
  25.                   HistoryDealGetInteger(dealTicket, DEAL_MAGIC) == InpMagicNumber) // 检查魔术号
  26.                {
  27.                   double dealProfit = HistoryDealGetDouble(dealTicket, DEAL_PROFIT);
  28.                   datetime dealTime = (datetime)HistoryDealGetInteger(dealTicket, DEAL_TIME);
  29.                   
  30.                   Print("Deal found: Time=", TimeToString(dealTime), ", Profit=", DoubleToString(dealProfit, 2));
  31.                   
  32.                   if(dealProfit < 0)
  33.                   {
  34.                      foundLoss = true;
  35.                      lastLossAmount = MathAbs(dealProfit);
  36.                      lastLossVolume = HistoryDealGetDouble(dealTicket, DEAL_VOLUME);
  37.                      lastLossTime = dealTime;
  38.                      Print("Found loss: Amount=", DoubleToString(lastLossAmount, 2), ", Volume=", DoubleToString(lastLossVolume, 2), ", Time=", TimeToString(lastLossTime));
  39.                      break;
  40.                   }
  41.                }
  42.             }
  43.             
  44.             if(foundLoss)
  45.             {
  46.                for(int i = HistoryDealsTotal() - 1; i >= 0; i--)
  47.                {
  48.                   ulong dealTicket = HistoryDealGetTicket(i);
  49.                   if(HistoryDealSelect(dealTicket) &&
  50.                      HistoryDealGetString(dealTicket, DEAL_SYMBOL) == symbol &&
  51.                      HistoryDealGetInteger(dealTicket, DEAL_MAGIC) == InpMagicNumber)
  52.                   {
  53.                      double dealProfit = HistoryDealGetDouble(dealTicket, DEAL_PROFIT);
  54.                      datetime dealTime = (datetime)HistoryDealGetInteger(dealTicket, DEAL_TIME);
  55.                      
  56.                      if(dealTime > lastLossTime)
  57.                      {
  58.                         recoveryProfit += dealProfit;
  59.                         Print("Recovery profit: ", DoubleToString(recoveryProfit, 2), ", Deal Time: ", TimeToString(dealTime));
  60.                      }
  61.                   }
  62.                }
  63.                
  64.                if(recoveryProfit < lastLossAmount)
  65.                {
  66.                   isRecoveryMode = true;
  67.                   volume = lastLossVolume * coefficient;
  68.                   double maxAllowedVolume = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX);
  69.                   volume = (volume > maxAllowedVolume) ? maxAllowedVolume : volume;
  70.                   Print("In recovery mode. New volume: ", DoubleToString(volume, 2), " (coefficient: ", DoubleToString(coefficient, 2), ")");
  71.                }
  72.                else
  73.                {
  74.                   Print("Exiting recovery mode. Loss recovered. Recovery profit: ", DoubleToString(recoveryProfit, 2));
  75.                }
  76.             }
  77.             else
  78.             {
  79.                Print("No recent losses found. Using normal volume: ", DoubleToString(volume, 2));
  80.             }
  81.          }
  82. …………
复制代码


下面是回测里面的日志:

2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Checking orders for recovery mode from 2024.03.31 11:00 to 2024.04.30 11:00
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Deal found: Time=2024.04.30 10:33, Profit=3852.96
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Deal found: Time=2024.04.30 10:25, Profit=0.00
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Deal found: Time=2024.04.30 09:07, Profit=4397.40
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Deal found: Time=2024.04.30 09:03, Profit=0.00
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Deal found: Time=2024.04.30 08:30, Profit=5255.94
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Deal found: Time=2024.04.30 08:25, Profit=0.00
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Deal found: Time=2024.04.29 19:24, Profit=1895.07
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Deal found: Time=2024.04.29 19:22, Profit=0.00
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Deal found: Time=2024.04.29 19:13, Profit=-16772.94
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Found loss: Amount=16772.94, Volume=10.47, Time=2024.04.29 19:13
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Recovery profit: 3852.96, Deal Time: 2024.04.30 10:33
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Recovery profit: 3852.96, Deal Time: 2024.04.30 10:25
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Recovery profit: 8250.36, Deal Time: 2024.04.30 09:07
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Recovery profit: 8250.36, Deal Time: 2024.04.30 09:03
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Recovery profit: 13506.30, Deal Time: 2024.04.30 08:30
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Recovery profit: 13506.30, Deal Time: 2024.04.30 08:25
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Recovery profit: 15401.37, Deal Time: 2024.04.29 19:24
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   Recovery profit: 15401.37, Deal Time: 2024.04.29 19:22
2024.09.23 14:03:03.616    Core 01    2024.04.30 11:00:00   In recovery mode. New volume: 20.94 (coefficient: 2.00)
代码在回测中是完全没有问题的。

下面是实盘中EA的打印日志:

2024.09.23 13:00:01.435    Jade Emperor 4.1 (XAUUSD,H1)    Checking orders for recovery mode from 2024.08.24 08:00 to 2024.09.23 08:00
2024.09.23 13:00:01.435    Jade Emperor 4.1 (XAUUSD,H1)    Deal found: Time=2024.09.20 18:42, Profit=113.43
2024.09.23 13:00:01.435    Jade Emperor 4.1 (XAUUSD,H1)    No recent losses found. Using normal volume: 0.58
代码在实盘中只找到最近一个订单,而且还是盈利的。

各位老大,帮忙看看,怎么回测中没问题,而实盘中就出错。问题出现在哪里?谢谢。
举报

评论 使用道具

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

简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)