程序库: MT4Orders - 页 80

 
fxsaber #:

试试最新版本。复制粘贴。

谢谢 fxsaber。我还需要一些时间来确认,但到目前为止,内存使用量似乎并没有降低。

出于好奇,OrderSwap() 在哪里定义?我在代码中似乎找不到。

 
pcdeni #:

到目前为止,内存使用量似乎并没有降低。

需要数据来重现问题。出现问题的交易账户的 Laconic 代码和投资访问。也许可以在私人信息中提供。

出于好奇,OrderSwap() 定义在哪里?我在代码中似乎找不到。

MT4_ORDERFUNCTION(Swap, double, ::PositionGetDouble(POSITION_SWAP), 0, true)
 
你好,我遇到了一个奇怪的问题。 我使用这个库已经有一段时间了,我想说 "HUGE THANKS"(非常感谢),它给了我难以置信的帮助,

所以多年来,我在 EA 中使用这个库/代码从未遇到过任何问题。

现在,当我编译 MT5 EA 时,它从这段代码中返回了 3 个错误,基本上都是关于一行的:(见下面的代码)
'=' - 意外令牌 MT4Orders.mqh 192 25
')' - 意外令牌 MT4Orders.mqh 192 68
'*=' - 预期名称 MT4Orders.mqh 194 13

在我的 EA 中,我还包括:

#include <stderror.mqh>
#include <stdlib_mq5.mqh>
#import"kernel32.dll"

你知道这里可能发生了什么吗?

库单独编译时没有错误,没有问题,和往常一样。只有在尝试编译 EA 时,才会出现这些错误。

#define  ORDER_SELECT (-2)

   static int GetDigits( double Price )
  {
    int Res = 0;

    while ((bool)(Price = ::NormalizeDouble(Price - (int)Price, 8)))   // <- 行 192 所以这显然是个问题 "= :: "
    {
      Price *= 10; // LINE 194

      Res++;
    }

    return(Res);
  }

我在 EA 发现了一些疑点
union Price
  {
   uchar             buffer[8];
   double            close;
  };

这个联合价格名称会覆盖 GetDigits 函数中的价格名称吗?
 
Filip Valkovic #:
我在我的 EA 发现了一些疑点
所以这个联合价格名称会覆盖 GetDigits 函数中的价格名称?这可能是问题所在吗?

这就是原因。

 
请帮我找出佣金计算中的错误。为此,请在任何可用交易账户上运行此脚本。
// 通过 MT4/MT5 样式计算和比较总佣金/隔夜利息/利润。

#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // 等待交易环境同步的最长时间(以微秒为单位
#include <MT4Orders.mqh>

#define  TOSTRING(A) (#A + " = " + DoubleToString(A, 2))
#define  PRINT(A, B) Print(TOSTRING(A) + ", " + TOSTRING(B) + ", " + (string)!NormalizeDouble((A) - (B), 2))

// MT4 风格
void Calc_MT4( double &Commission, double &Swap, double &Profit )
{
  Commission = 0;
  Swap = 0;
  Profit = 0;
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
    {
      Commission += OrderCommission();
      Swap += OrderSwap();
      Profit += OrderProfit();
    }
}

// MT5 风格
void Calc_MT5( double &Commission, double &Swap, double &Profit )
{
  Commission = 0;
  Swap = 0;
  Profit = 0;
  
  if (HistorySelect(0, INT_MAX))  
    for (int i = HistoryDealsTotal() - 1; i >= 0; i--)
    {
      const ulong Ticket = HistoryDealGetTicket(i);
      
      if (HistoryDealGetInteger(Ticket, DEAL_TYPE) <= DEAL_TYPE_SELL)
      {
        Commission += HistoryDealGetDouble(Ticket, DEAL_COMMISSION);
        Swap += HistoryDealGetDouble(Ticket, DEAL_SWAP);
        Profit += HistoryDealGetDouble(Ticket, DEAL_PROFIT);
      }
    }
}

void OnStart()
{
  if (PositionsTotal())
    MessageBox("The script works when there are no open positions.");
  else
  {
    double Commission_MT4, Swap_MT4, Profit_MT4;
    double Commission_MT5, Swap_MT5, Profit_MT5;
    
    Calc_MT4(Commission_MT4, Swap_MT4, Profit_MT4); // MT4 风格
    Calc_MT5(Commission_MT5, Swap_MT5, Profit_MT5); // MT5 风格
    
    PRINT(Commission_MT4, Commission_MT5);
    PRINT(Swap_MT4, Swap_MT5);
    PRINT(Profit_MT4, Profit_MT5);
  }
}


它将产生如下结果。

Commission_MT4 = -15591.12, Commission_MT5 = -15591.12, true
Swap_MT4 = -5948.77, Swap_MT5 = -5948.77, true
Profit_MT4 = 34851.13, Profit_MT5 = 34851.13, true


如果高亮部分有误,请告诉我。谢谢。

 
2023.01.02 13:23:28.780 fxsaber_test (EURCHF,H1)        Commission_MT4 = -2875.33, Commission_MT5 = -2875.29, false
2023.01.02 13:23:28.835 fxsaber_test (EURCHF,H1)        Swap_MT4 = -1051.56, Swap_MT5 = -1051.56, true
2023.01.02 13:23:28.835 fxsaber_test (EURCHF,H1)        Profit_MT4 = 7198.08, Profit_MT5 = 7198.08, true
 
Enrique Dangeroux #:

你确定编译了这一行?

交易、自动交易系统和交易策略测试论坛

库:MT4Orders

fxsaber, 2023.01.02 12:24 pm.

#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // 等待交易环境同步的最长时间(以微秒为单位
来自电报的 EX5 显示错误?
 
以 1:1 的复制粘贴方式编译,除了 Swap = 0 后缺少分号。
 
fxsaber #:

电报中的 EX5 会出错吗?

这可能是排除源版本不匹配的最可靠方法。

 
请给 EX5 发私信,我现在无法访问电报