错误、漏洞、问题 - 页 479

 
然后写信给servicedesk并附上代码。
 
sergeev:

然后写信给服务台并附上代码。

是的,最好给服务台写信并附上专家代码。

不要担心代码--我们在测试后会擦除一切。我们的主要和唯一的任务是发现错误

 

另一个问题。我正在使用CopyTime函数。呼叫。

CopyTime("EURUSD", PERIOD_MN1, D'2011.06.30', D'2011.08.01', Array)

由于某些原因,只返回一个值为D'2011.08.01'的元素。D'2011.07.01'究竟在哪里?有什么诀窍?

P.S. Array[] 是一个动态数组。

 
marketeer:

另一个问题。我正在使用CopyTime函数。呼叫。

由于某些原因,只返回一个值为D'2011.08.01'的元素。D'2011.07.01'究竟在哪里?有什么好处呢?

P.S. 数组Array[] 是动态的。

是的,由于某些原因,第一个元素被跳过,写到servicedesk。

datetime Array[];
   CopyTime("EURUSD", PERIOD_MN1, D'2011.06.01', D'2011.08.01', Array); 
   for(int i=0;i<ArraySize(Array);i++)
     {
      Print(i," ",Array[i]);
     }

1 2011.08.01 00:00:00

0 2011.07.01 00:00:00

 
marketeer:

另一个问题。我正在使用CopyTime函数

已经有一个类似的应用程序。

想明白了。

 

这里有另一个谜团。我抓不住这个毛病--我不知道是我的还是终端的。

有一个微不足道的代码可以计算专家顾问下的订单数量。计数器被存储在全局变量中。它看起来像这样。

int Count;

int OnInit()
{
  Count = (int)GlobalVariableGet("Count");
  return(0);
}

void OnTick()
{
  // bla-bla-bla
  if(успешно отправлен ордер)
  {
    Count++;
    if(!MQL5InfoInteger(MQL5_TESTING))
    {
      if(GlobalVariableSet("Count", Count) == 0)
      {
        Print("GlobalVariableSet error ", GetLastError());
      }
    }
  }
}

这个数字用于订单评论。因此,我偶尔会注意到,下一个订单数比已经进入市场的头寸数要低(一些单位)。日志中没有任何错误。

你有什么想法吗?也许有人遇到过类似的全局变量的 最后"消失 "的情况,例如,在某些情况下退出时终端没有保存这些变量(好吧,也许是在失去连接的情况下--只是一个版本)?

Документация по MQL5: Глобальные переменные терминала / GlobalVariableGet
Документация по MQL5: Глобальные переменные терминала / GlobalVariableGet
  • www.mql5.com
Глобальные переменные терминала / GlobalVariableGet - Документация по MQL5
 
marketeer:

这里有另一个难题。我抓不住这个毛病--我不知道是我的还是终端的。

试试这样的方法。我还没有在全球范围内真正做到这一点。但它算得上是正确的。

    int Amount_Orders = 0;

    for(count = 0; count < OrdersTotal(); count++)
       {  
        if(OrderSelect(OrderGetTicket(count))) 
          {
           int tp_ord = (ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE);  
           if(tp_ord == ORDER_TYPE_BUY_STOP  || tp_ord == ORDER_TYPE_SELL_STOP ||
              tp_ord == ORDER_TYPE_BUY_LIMIT || tp_ord == ORDER_TYPE_SELL_LIMIT)
           Amount_Orders++;  
          }
       }
 
tol64:

试试这样的方法。我还没有在全球范围内真正做到这一点。但它算得上是正确的。

我遇到的问题是,写入全局变量 的值会丢失,即不完全丢失(如按月超时删除时),但旧的值会保留。你当然可以重新计算订单,但我的方法应该也可以。
 
papaklass:

对开发商而言。

如果一个订单在到期 关闭,OnTrade是否不打算对其进行跟踪?

PS:交易事件OnTrade的处理程序的目的一点也不清楚。 如果止损或止盈没有被抓住,如果挂单在其到期时间前被关闭,也没有被抓住。在算法运行过程中,我们必须反复检查一切。这种方法会造成混乱,因为我们依赖交易事件处理程序,但又不得不反复检查。更有甚者,在反复检查之后,我们必须捕捉那些没有被OnTrade()处理的事件。但现在我们可以玩俄罗斯方块,在图表上画出各种胡言乱语。开发者们,请把平台的交易部分带到它的逻辑终点。

我不能说任何关于待定订单的情况,我还没有与他们合作过。

例如,正是OnTrade处理程序将这些行输出到日志中。

2011.08.08 09:03:05 ChTestExp (EURUSD,H1) EURAUD的多头头寸将被止损关闭。
2011.08.08:09:03:05 ChTestExp (EURUSD,H1) -----------------Deal #5263582 [sl 1.37819]
2011.08.08 09:03:05 ChTestExp (EURUSD,H1) oldDealsTotal=558 newDealsTotal=559
 
papaklass:

把函数Print(__FUNCTION__)放在OnTrade()函数中。当你的日志里有了它

触发止损买入0.10 AUDUSD 0.89783 sl: 0.89544 tp: 0.90024 [#15在0.89544卖出0.10 AUDUSD]
交易#7在0.89544卖出0.10澳元兑美元完成(基于订单#15)
交易执行[#7在0.89544卖出0.10澳元兑美元]
订单执行在0.89544卖出0.10[#15在0.89544卖出0.10澳元兑美元]

你会检查OnTrade()是否起作用吗?

对我来说,即使没有你的插入,一切都能正常进行,因为所有的交易、交易量、利润都是计算出来的,都是在OnDeinite中对每个符号分别进行汇总和显示。由于所有加起来的参数(交易数量、利润)与测试者的报告完全一致,我没有理由怀疑OnTrade()。

唯一没有在OnTrade()中处理的是在测试结束时平仓的交易(有 "测试结束 "的注释)和在测试器中通过止损平仓的交易(注释 "所以..."),在测试模式中,我们必须在OnDeinit中额外处理它们。摘自测试人员的日志。

2011.08.09 00:06:43 Core 1日志文件 "E:\Program Files\MetaTrader 5\Tester\Agent-127.0.0.1-3000\logs\20110809.log "写道
2011.08.09 00:06:43 Core 1 EURUSD,H1: 在13962毫秒内产生了888296个点(275个条)(历史上总条数6479,总时间16177毫秒)。
2011.08.09 00:06:43 核心1在测试间隔的8%处发生了停止。
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 退出结束
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 所有利润 = -9072.04
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 总计交易:17
.....
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 ----------------------------------------
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 总利润 EURGBP = -4738.97
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 本周盈利 欧元兑英镑 = 319.68
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 英镑兑美元总利润 = -3775.86
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 本周盈利 GBPUSD = -1798.83
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 总利润 EURUSD = -557.21
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 本周利润 EURUSD = 65.85
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 余额=927.96 等额=927.96 利润=0.00 保证金级别=0.00
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 ---------------Report-------------------
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 平衡=10000.00 等价=927.96 利润=0.00 保证金级别=0.00
2011.08.09 00:06:43 2011.01.18 10:11:00 核心 1 开场错误:1 闭场错误:0 修改错误:0 引用:1
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 运行时间:0分钟。14秒。
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 ChTestExp专家顾问完成了对欧元兑美元图表的工作,H1期间
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 脱机执行
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 OnDeinit_UninitReason = 另一个原因
2011.08.09 00:06:43 Core 1 OnTester result 0
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 订单 买入 1.65 at 1.59804 [#69 买入 1.65 GBPUSD at 1.59804]
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 交易执行 [#68在1.59804买入1.65英镑兑美元]
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 交易 #68 在1.59804买入1.65 GBPUSD 完成(基于订单 #69)。
2011.08.09 00:06:43 Core 1 2011.01.18 10:11:00 由于在1.59804的测试结束而平仓 [sell 1.65 GBPUSD 1.57341182 tp: 1.57247]
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 订单 买入 0.45 at 0.83931 [#68 买入 0.45 EURGBP at 0.83931]
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 订单执行 [#67 在0.83931买入0.45 EURGBP] 。
2011.08.09 00:06:43 2011.01.18 10:11:00 交易#67在0.83931买入0.45欧元英镑完成(基于订单#68)。
2011.08.09 00:06:43 核心 1 2011.01.18 10:11:00 触发了29.09%的止损 [卖出0.45 EURGBP 0.83930333 tp: 0.80463] 。
2011.08.09 00:06:43 核心 1 2011.01.17 14:39:39 欧元兑美元的多头头寸将被关闭止损。
2011.08.09 00:06:43 核心 1 2011.01.17 14:39:39 -----------------Deal #66 sl 1.32900

2011.08.09 00:06:43 核心 1 2011.01.17 14:39:39 oldDealsTotal=65 newDealsTotal=66

来自测试人员的报告。

结果
故事质量。 100%
酒吧。 275 提基。 888296
净利润。 -9 072.04 总利润。 1 652.29 全部损失。 -10 724.33
盈利能力。 0.15 预期回报。 -533.65
恢复系数。 -0.92 夏普比率。 -0.35

资产负债表的缩减。
绝对的资产负债表缩减。 9 072.04 资产负债表上的最大提款额。 10 392.34 (91.80%) 按资产负债表的相对缩减。 91.80% (10 392.34)
提取资金。
资金的绝对缩水。 9 072.04 资金的最大提取量。 9 852.02 (91.39%) 资金的相对缩减。 91.39% (9 852.02)

总交易量。 17 空头交易(占赢家的百分比)。 10 (70.00%) 多头交易(胜率)。 7 (85.71%)
总交易量。 67 盈利的交易(占所有交易的百分比)。 13 (76.47%) 亏损交易(占全部的百分比)。 4 (23.53%)

最大的赢利交易。 263.25 最大的亏损交易。 -5 036.39

平均盈利的交易。 127.10 平均亏损交易。 -2 681.08

最大的连续胜利次数(利润)。 10 (1 320.30) 连续损失的最大数量(损失)。 2 (-4 084.59)

连续获利的最大数量(赢的数量)。 1 320.30 (10) 最大的连续损失(损失的数量)。 -5 036.39 (1)

平均连续赢利。 4 平均连续损失。 1


正如你所看到的,独立计算的总数字是一致的,这意味着一切都很正确。故意把停止的例子拿出来。