错误、漏洞、问题 - 页 2411

 
Aleksey Sergan:



请运行此代码:多币种iMA趋势2

在设置(符号 参数)中指定 "EURUSD,GBPUSD"。

关于我的配置

MetaTrader 5 x64 build 2009 started (MetaQuotes Software Corp.)
Windows 10 (build 17763) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 3518 / 8077 Mb, Disk: 86 / 415 Gb, GMT+2
C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

所有SL都以其符号价格收盘。也就是说,不存在价格重叠的错误。

 
Vladimir Karputov:

请运行此代码:多币种iMA趋势2

在设置(符号 参数)中指定 "EURUSD,GBPUSD"。

关于我的配置

所有SL都以其符号价格收盘。也就是说,不存在价格重叠的错误。

谢谢你,这个错误已经被本地化了。下面的帖子。

 
Andrey Barinov:

有两个错误。

№1.你的错误。在代码的某个地方。你正在用英镑兑美元的价格为欧元兑美元的头寸设置SL。终端应该没有什么反对意见。

№2.终端中的错误。如果这个SL被触发的价格在当时的欧元兑美元流中不存在,使用英镑兑美元的价格。

安德烈-巴里诺夫

https://www.mql5.com/ru/docs/constants/structures/mqltraderequest

显然,在发送修改请求时,位置字段比符号更有优先权。打印req.position

是的,事实证明你是对的,我的错误是符合逻辑的。

在结构中。

MqlTradeRequest m_request;

m_request.position = #3

m_request.symbol = GBPUSD

m_request.sl = 1.60704

英镑兑美元的实际仓位数#4

当OrderSend被执行时,测试者为3号位置对应的符号设置了一个止损,这个位置是eurusd。

测试器的缺陷。

- 未能检查 m_request.position和m_request.symbol是否匹配。

- 在1.60704设置买入位置的止损,符号eurusd,其当前价格为1.30935。

- 在下一个交易日设置的止损为1.60704,尽管实际价格为1.30935。

谢谢大家。我希望平台的开发者能看到这个帖子。

 
Aleksey Sergan:

是的,事实证明你是对的,我的错误是符合逻辑的。

在结构上。

MqlTradeRequest m_request;

m_request.position = #3

m_request.symbol = GBPUSD

m_request.sl = 1.60704

英镑兑美元的实际仓位数#4

当OrderSend被执行时,测试者为3号位置对应的符号设置了一个止损,这个位置是eurusd。

测试器的缺陷。

- 未能检查 m_request.position和m_request.symbol是否匹配。

- 在1.60704设置买入位置的止损,符号eurusd,其当前价格为1.30935。

- 在下一个交易日设置的止损为1.60704,尽管实际价格为1.30935。

谢谢大家。我希望平台的开发者能看到这个帖子。

在当前价格1.30935执行1.60704的买入头寸的止损,这不是一个错误。但在目前1.30935的价格上,将买入止损点设置在1.60704的水平上是一个错误。

 

建设2007年

职能。

bool GetDialLastProfit (string symbol, datetime startDate, datetime endDate, long magic, double &profit, double &lot)
{
  HistorySelect (startDate, endDate);
  int deals = HistoryDealsTotal ();
  ulong ticket;

  for (int i = deals - 1; i >= 0; i--)
  //for (int i = 0; i < deals; i++)
  {
    ticket = HistoryDealGetTicket (i);
    if (ticket != 0)
    {
      if (HistoryDealGetInteger(ticket, DEAL_MAGIC) == magic)
      {
        profit = HistoryDealGetDouble (ticket, DEAL_PROFIT);
        
        //if (!HistoryDealGetDouble(ticket, DEAL_PROFIT, profit))
        //  return false;
        
        lot    = HistoryDealGetDouble (ticket, DEAL_VOLUME);
        
        return (true);
      }
    }
  }

  return (false);
}

应该将交易的 财务结果 输出到利润变量中,但结果总是0.0,而手数变量中的值总是正确的。

是否有错误?- 还是我做错了什么?

 
Andrey Dik:

建设2007年

职能。

应该将交易的 财务结果 输出到利润变量中,但结果总是0.0,而手数变量中的值总是正确的。

是否有错误?- 还是我做错了什么?

应检查DEAL_ENTRY_OUT或INOUT。_IN交易的利润为0

 
Andrey Barinov:

DEAL_ENTRY_OUT或INOUT应该被关注。_IN交易的利润为0

好吧,从名单的末尾开始,第一个就被拿走了,应该是OUT了。

 
Andrey Dik:

嗯,这是名单末尾的第一个,应该是OUT了。

如果 在endDate中传递TimeCurrent(),就用TimeCurrent()+60或类似的东西代替。这应该有帮助。

 
Andrey Barinov:

如果你在endDate中传递TimeCurrent(),用TimeCurrent()+60或类似的东西代替。这应该有帮助。

不,它仍然是0.0。

 
Andrey Dik:

不,它仍然是0.0。

然后进行调试。打印交易票据,并在测试器中看到那里实际选择的内容。添加一个按交易类型 的过滤器。