程序库: MT4Orders - 页 5

 
-Aleks-:

找到了 - 谢谢 - 错误几乎没有了,但还有一个:

OrderCloseBy' - 函数未定义 cPoza13-1.mqh 1885 8

 //+------------------------------------------------------------------------------------------------------------------------------------+
//| Возвращает TRUE, если один ордер закрылся другим
//+------------------------------------------------------------------------------------------------------------------------------------+
bool cPoza::closeBy(int ticketB, int ticketA)
{
  if(ticketB > 0 && ticketA > 0)
  {
    if(OrderCloseBy(ticketB, ticketA)) return true;
    else Print("Magic=", mMagic, " ",__FUNCTION__, " Встречное закрытие не вышло ticketB=", ticketB, " ticketA=", ticketA, " вызвало ошибку-", _LastError);
  }
  else return false;
 
  return false;
}

// 没有实现的东西:
//CloseBy 时刻--我还没有时间这样做。也许将来需要的时候会有时间。
// 确定平仓头寸的 TP 和 SL - 目前(构建 1368),MQL5 不知道如何做到这一点。

我为自己编写了这个库,我不使用 CloseBy。这就是我没有实现它的原因。也许我会尽快添加。

作为临时解决方案,请在包含您的库之前添加以下几行

#ifdef __MQL5__
  bool OrderCloseBy( const int Ticket, const int Opposite, const color Arrow_Color = clrNONE )
  {
    return(false);
  }  
#endif
 
fxsaber:

当然有可能我觉得没必要

显然,应该这样做。

事实上,DC 限制了订单 的最大数量,如果账户中有 15-20 个带有网格的智能交易系统(Expert Advisors),解决方法就是在接近订单限制的时刻将部分网格最小化,我们必须挖掘历史数据以了解头寸的真实财务结果。

 
fxsaber:
// 没有实现的东西:
//CloseBy 时刻--我还没有时间这样做。也许将来需要的时候会有时间。
// 确定平仓头寸的 TP 和 SL - 目前(构建 1368),MQL5 不知道如何做到这一点。
这个库是我自己写的,我不使用 CloseBy。这就是我没有实现它的原因。也许在加速后我也会加入这个功能。

那太好了,谢谢。CloseBy 对于在计算点中固定部分位置非常方便。

 
-Aleks-:

在使用平均法构建网格时,我们还必须积极利用历史数据,事实上,DC 限制了订单 的最大数量,如果账户中有 15-20 个带有网格的 Expert Advisors,那么在接近订单限制时,解决方案就会被视为部分网格的崩溃,我们必须分别挖掘历史数据,以了解头寸的真实财务结果。

我将在下一个版本中添加 CloseBy 和历史加速功能。我只是不明白这是否是需要的(库已被使用),还是以防万一的建议。
 
fxsaber:
// 没有实现的东西:
//CloseBy 时刻--我还没有时间这样做。也许将来需要的时候会有时间。
// 确定平仓头寸的 TP 和 SL - 目前(构建 1368),MQL5 不知道如何做到这一点。

这个库是我自己写的,我不使用 CloseBy。所以我还没有实现它。也许等我熟悉了之后会尽快添加。

作为临时解决方案,请在启用库之前添加以下几行

#ifdef __MQL5__
  bool OrderCloseBy( const int Ticket, const int Opposite, const color Arrow_Color = clrNONE )
  {
    return(false);
  }  
#endif

谢谢--在处理订单的部分编译成功了!现在我要解决语言不兼容造成的其他错误...

 
fxsaber:
我将在下一个版本中添加 CloseBy 和历史加速功能。我只是不明白这是需求(库已被使用)还是只是以防万一的建议。

我使用了它,得到了非常有趣的结果,但我还没有在真实账户 上使用它(功能)--很快就会。


 
fxsaber:
会成功的!我通过 MT4Orders 在股票市场上做任何事情。我不会因为未结头寸的数量而限制自己。
但我不建议通过 MT4Orders 处理证券交易所的历史记录。即 MODE_TRADE - 没问题,MODE_HISTORY - 不需要在交易所 使用。
 

在证券交易所不能设置止损,但可以打开交易。

2016.11.07 10:41:20.468 Trades  '4974': failed modify  buy 0.00  sl: 0.00000, tp: 0.00000 -> sl: 10407.00000, tp: 0.00000 [Invalid request]

在我看来,您没有在库中进行修改。

if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
      Request.type_filling = ORDER_FILLING_RETURN;

我知道你需要在这里添加:

static bool MT4OrderModify( const int Ticket, const double Price, const double SL, const double TP, const datetime Expiration, const color Arrow_Color = clrNONE )
  {
    MqlTradeRequest Request = {0};

               // 订单和仓位出现相同票据的情况将被考虑在内
    bool Res = ((Ticket != MT4ORDERS::Order.Ticket) || (MT4ORDERS::Order.Ticket <= OP_SELL)) ?
               (MT4ORDERS::ModifyPosition(Ticket, Request) ? true : MT4ORDERS::ModifyOrder(Ticket, Price, Expiration, Request)) :
               (MT4ORDERS::ModifyOrder(Ticket, Price, Expiration, Request) ? true : MT4ORDERS::ModifyPosition(Ticket, Request));

    if (Res)
    {
      Request.tp = TP;
      Request.sl = SL;
      if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
      Request.type_filling = ORDER_FILLING_RETURN;

      
      Res = MT4ORDERS::NewOrderSend(Request);
    }

    return(Res);
  }
还是不行。
 
Maxim Dmitrievsky:

他不能在证券交易所设置止损,但他可以开仓交易。

2016.11.07 10:41:20.468 Trades  '4974': failed modify  buy 0.00  sl: 0.00000, tp: 0.00000 -> sl: 10407.00000, tp: 0.00000 [Invalid request]

事实上,这几乎是开发人员的一个错误。添加这一行

  static bool ModifyPosition( const int Ticket, MqlTradeRequest &Request )
  {
    const bool Res = ::PositionSelectByTicket(Ticket);

    if (Res)
    {
      Request.action = TRADE_ACTION_SLTP;
      
      Request.position = Ticket;
      Request.symbol = ::PositionGetString(POSITION_SYMBOL); // 指定一张票是不够的!
    }

    return(Res);
  }

在我看来,在 lib 中您没有指定修改。

一切都在这里。
 
fxsaber:

事实上,这几乎是开发人员的一个错误。添加这一行

  static bool ModifyPosition( const int Ticket, MqlTradeRequest &Request )
  {
    const bool Res = ::PositionSelectByTicket(Ticket);

    if (Res)
    {
      Request.action = TRADE_ACTION_SLTP;
      
      Request.position = Ticket;
      Request.symbol = ::PositionGetString(POSITION_SYMBOL); // 指定一张票是不够的!
    }

    return(Res);
  }

这里一切正常。
是的,它就是这样工作的,谢谢......订单拣选速度变慢了,是的......但到目前为止,我还没有发现其他错误....实际上,这是一个很好的库,我认为它对加快订单拣选速度很有意义。