程序库: MT4Orders - 页 10

 
Aliaksandr Kryvanos:

按符号和 majic 选择不起作用

if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
}

OrderSelect 不起作用,它不能选择订单(按指数选择票据)来使用它,附件中有一个 简单的示例,由于某些原因,它在 MT5 上不起作用。

您的代码无法如我们所愿在 MT4 上运行。因为其中有一个错误--您将仓位设置为零,但却与另一个值进行比较。
OrderSend(Symbol(),OP_BUY, 0.01,Ask, 0, 0,0,"",0,0,clrNONE);
将代码更正为
OrderSend(Symbol(),OP_BUY, 0.01,Ask, 0, 0,0,"",MagicNumber,0,clrNONE);
警报是错误的。
[删除]  
谢谢你,我向你道歉,我只是碰巧想把一个 EA 翻译成 mt5 版本,这花了我很长时间,而且交易逻辑不匹配,我检查了 Magic 和所有可能影响它的东西,所以我写了一个简单的例子,但没有成功。但后来我发现了我的错误,上面这个例子与它无关。我想删除我的帖子,但我没有时间。
 
Aliaksandr Kryvanos:

按符号和 majic 选择不起作用

if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
}

OrderSelect 不起作用,无法选择订单(按指数选择票据)来使用它,附件中的简单示例,由于某些原因,它在 mt5 上不起作用。

您没有在 OrderSend 中设置魔力
[删除]  

您好,我有一个问题,如何获取 MT5 发送订单时的错误数据,在 MT4 版本中是这样的

bool CloseError = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
if (CloseError == false)
{
  ResetLastError();
  error = GetLastError();
  Print(" CloseOpenedTrades OrderClose failed" + " - ticket=", OrderTicket() + string(error) + ") " + ErrorDescription(error) + " - ticket= ", OrderTicket());
}

错误代码包含在MqlTradeResult 结构中,如果无法访问结果,我将无法在 MT5 中使用上述代码,我该如何修改 mt4orders.mqh 以返回交易服务器错误信息?

 
Aliaksandr Kryvanos:

您好,我有一个问题,如何获取 MT5 发送订单时的错误数据,在 MT4 版本中是这样的

bool CloseError = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
if (CloseError == false)
{
  ResetLastError();
  error = GetLastError();
  Print(" CloseOpenedTrades OrderClose failed" + " - ticket=", OrderTicket() + string(error) + ") " + ErrorDescription(error) + " - ticket= ", OrderTicket());
}

错误代码包含在MqlTradeResult 结构中,如果无法访问结果,我将无法在 MT5 中使用上述代码,我该如何修改 mt4orders.mqh 以返回交易服务器错误?

您可以让 GetLastError 返回更多的值 - 用 MqlTradeResult 中的代码对其进行补充。
[删除]  
例如,如果在关闭订单时出现错误,GetLastError() 将返回(交易服务器的)错误代码,即使我们不检查MqlTradeResult Result; Result.retcode in OrderSend(Request, Result)?
 
Aliaksandr Kryvanos:
例如,如果在关闭订单时出现错误,即使我们不检查MqlTradeResult Result; Result.retcode in OrderSend(Request, Result),GetLastError() 是否也会返回(交易服务器的)错误代码?

是的,这并不难实现。

Aliaksandr Kryvanos:
bool CloseError = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
if (CloseError == false)
{
  ResetLastError();
  error = GetLastError();
  Print(" CloseOpenedTrades OrderClose failed" + " - ticket=", OrderTicket() + string(error) + ") " + ErrorDescription(error) + " - ticket= ", OrderTicket());
}

我不明白突出显示的意思。

[删除]  
fxsaber:

是的,这并不难实现。

我不明白突出显示部分的意思。

是在 mt4 的 EA 中

您说这不难实现,但事实上,如果订单未发送,GetLastError() 会返回交易服务器错误,而无需分析MqlTradeResult 结构。

您只需在

static bool NewOrderSend( const MqlTradeRequest &Request )
  {
    MqlTradeResult Result;
    if (::OrderSend(Request, Result) || Result.retcode != TRADE_RETCODE_DONE)
    {
      Print("OrderSend() error: ", ResultRetcodeDescription(Result.retcode));
      return(false);
    }
    else
    {
      return(true);
    }

    //return(MT4ORDERS::OrderSend(Request, Result) ?Result.retcode < TRADE_RETCODE_ERROR : false);
  }

但如果 GetLastError() 可以正常工作,有必要这样做吗?

 
Aliaksandr Kryvanos:

mt4 顾问就是这种情况

那么就是逻辑错误。

您说这并不难实现,但事实上,如果未发送订单,GetLastError() 可能会返回交易服务器错误,而无需分析MqlTradeResult 结构。

您只需在

static bool NewOrderSend( const MqlTradeRequest &Request )
  {
    MqlTradeResult Result;
    if (::OrderSend(Request, Result) || Result.retcode != TRADE_RETCODE_DONE)
    {
      Print("OrderSend() error: ", ResultRetcodeDescription(Result.retcode));
      return(false);
    }
    else
    {
      return(true);
    }

    //return(MT4ORDERS::OrderSend(Request, Result) ?Result.retcode < TRADE_RETCODE_ERROR : false);
  }

但如果 GetLastError() 可以正常工作,有必要这样做吗?

我不明白您的意思。你在 if 中的实现包含一个错误。此外,TRADE_RETCODE_DONE_PARTIAL(交易完成)是成功执行 OrderSend 的 结果。

即使您修改了代码,也只会记录一条错误信息(其他人可能不想每次都看到)。但它在 MQL 中是不可用的。

因此,GetLastError 同时返回标准运行时错误 和额外的交易服务器返回代码 的变体似乎是最佳选择。

[删除]  
我明白了,你能否告诉我如何让 GetLastError() 也输出交易服务器错误,如果你还没有时间,我可以自己写。谢谢