程序库: MT4Orders - 页 41

 
fxsaber :


结果

OrderTicketID () 无效,我认为 MT4Orders.mqh 不是我下载的版本。


我是从这里下载的https://www.mql5.com/zh/code/16006


这不正确。编译时错误百出

MT4Orders
MT4Orders
  • www.mql5.com
Данная библиотека позволяет работать с ордерами в MQL5 (MT5-hedge) точно так же, как в MQL4. Т.е. ордерная языковая система (ОЯС) становится идентичной MQL4. При этом сохраняется возможность параллельно использовать MQL5-ордерную систему. В частности, стандартная MQL5-библиотека будет продолжать полноценно работать. Выбор между ордерными...
 
noChangepromise:

编译错误百出

 
fxsaber :

.


无函数名

您的计算机上有俄语,所以可能运行良好。

 
noChangepromise:

您的计算机上有俄语,因此可能可以正常工作。但对于我们的非俄语计算机而言,它在使用 unicode 时存在很大问题

这是第一次有人提出这样的问题。请尝试下载文件本身,而不是进行复制粘贴。

 
noChangepromise:

请举例说明如何转换 iMA () 或 iCustom ()

我不会转换。

 
// 更改列表:
// 02.11.2019
// 修复:调整 "平仓 "头寸的手数、佣金和平仓价格。


在 MT4 中,计算交易手数的平均值和支付的佣金非常简单。

void OnStart()
{
  double AvgLots = 0;       // 平仓的平均手数。
  double AvgCommission = 0; // 每个平仓头寸的平均佣金。
  
  int AmountPositions = 0;  // 关闭位置的数量。
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL) && OrderLots())
    {
      AvgLots += OrderLots();
      AvgCommission += OrderCommission();
      
      AmountPositions++;
    }
    
  if (AmountPositions)
  {
    AvgLots /= AmountPositions;
    AvgCommission /= AmountPositions;
  }
}

突出显示的部分负责忽略 CloseBy关闭的仓位。因为它们没有交易,实际上是假的。

事实证明,如此简单的代码(我不举其他例子)在 MT5 中使用旧版本的库时无法正常工作。现在一切正常。


ZЫ 我第一次发现 ORDER_POSITION_BY_ID 属性的用途。

 
fxsaber:

突出显示的链接 是一个未解决的问题。如果有人有解决方法,请告诉我。

拐杖解决方法。

bool IsSynchronized( void )
{
  static ulong Orders[];
  
  bool Res = true;
  
  for (int i = ArraySize(Orders) - 1; (i >= 0) && Res; i--)
    if (Orders[i])
      Res = OrderSelect(Orders[i]) || HistoryOrderSelect(Orders[i]);
    
  if (Res)
    for (int i = ArrayResize(Orders, OrdersTotal()) - 1; i >= 0; i--)      
      Orders[i] = OrderGetTicket(i);
      
  return(Res);  
}

#include <MT4Orders.mqh>

void OnTick()
{
  if (!IsSynchronized())
  {
    Alert("Hello World!");
    
    return;
  }
  
  // ....
}
 

如果能至少在源注释标题中说明 MT4ORDERS_FASTHISTORY_OFF 不仅能加快历史数组的处理速度,还能影响功能支持的完整性,尤其是,如果没有该选项,就无法通过OrderSelect(ticket,SELECT_BY_TICKET, MODE_HISTORY)选择先前开立和关闭的市场订单,因为转移的票据属于输入交易(在 IsMT4Deal 中被丢弃)。因为转入的单子属于输入交易(在 IsMT4Deal 中被丢弃),而在 MT4ORDERS_FASTHISTORY_OFF 中(在 GetPositionDealOut 中)的条件编译恰好涵盖了相应出口的搜索。

 
Stanislav Korotky:

如果能至少在源注释标题中说明 MT4ORDERS_FASTHISTORY_OFF 不仅能加快历史数组的处理速度,还能影响功能支持的完整性,尤其是,如果没有该选项,就无法通过 OrderSelect(ticket, SELECT_BY_TICKET, MODE_HISTORY)选择先前开立和关闭的市场订单,因为转移的票据属于输入交易(在 IsMT4Deal 中被丢弃)。因为转入的单子属于输入交易(在 IsMT4Deal 中被丢弃),而在 MT4ORDERS_FASTHISTORY_OFF 中(在 GetPositionDealOut 中)的条件编译恰好涵盖了相应出口的搜索。

没想到这种慢速模式会被别人用上。这么多水已经流走了,根本没办法再去维护。