Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mql4 关闭订单时无效的票据_Mql4 - Fatal编程技术网

Mql4 关闭订单时无效的票据

Mql4 关闭订单时无效的票据,mql4,Mql4,我正在尝试关闭所有打开的订单,它们都是市场订单,而不是挂起订单,并且SL和TP设置为0,因此它们不应该关闭自己(它们仍然在终端中打开)。我正在阵列中存储票证,因此我的循环如下所示: for(int i = 0; i < trades.size(); ++i) OrderClose(tickets[i], lots[i], Bid, Slippage); for(inti=0;i

我正在尝试关闭所有打开的订单,它们都是市场订单,而不是挂起订单,并且SL和TP设置为0,因此它们不应该关闭自己(它们仍然在终端中打开)。我正在阵列中存储票证,因此我的循环如下所示:

for(int i = 0; i < trades.size(); ++i) OrderClose(tickets[i], lots[i], Bid, Slippage);
for(inti=0;i
但我仍然收到“无效票”错误,你能告诉我为什么吗? 这种情况并不总是发生,就像有些订单关闭了,而有些则抛出了无效的罚单。 我没有注意到只有一个订单的这种行为,所以我假设只有当订单更多时才会发生

代码:

模板
结构向量{
向量(){}
向量(整数数组化){
如果(arraySize<0){arraySize*=-1;}
ArrayResize(m_数据,arraySize);
}
向量(向量和rhs){
如果(size()
当您成功关闭某些票据时,您不会将其从列表中删除
交易
,对吗?看来你应该这么做。如果订单关闭成功,请使用结构清除元素。
顺便说一句,可能没有必要重新发明轮子,使用
CArrayObj
作为元素的容器,并在订单关闭后删除它们

哦,你说得对,谢谢:D我在其他数组上调用了erase(),但在m_buyTicket和m_sellTicket数组上没有调用。如果你不介意的话,我想再问你一个问题。OrderCommission()的返回值是否以点数或实际货币(如美分)表示?以您的帐户货币表示,如美元或欧元。掉期交易也是如此。许多经纪人根本没有佣金,佣金将为零。
template < typename T >
struct vector {
  vector() {}
  vector(int arraySize) {
     if (arraySize < 0) { arraySize *= -1; }
     ArrayResize(m_data, arraySize);
  }
  vector(vector & rhs) { 
     if (size() < rhs.size()) { ArrayResize(m_data, rhs.size()); }
     for(uint i = 0; i < size(); ++i) { m_data[i] = rhs.m_data[i]; }
  }
  vector operator=(vector & rhs) {
     if (size() < rhs.size()) { ArrayResize(m_data, rhs.size()); }
     for(uint i = 0; i < size(); ++i) { m_data[i] = rhs.m_data[i]; }
     return this;
  }
  T operator[](uint index) { return m_data[index]; }
  void push_back( T value ) {

     ArrayResize(m_data, ArraySize(m_data) + 1); 
     m_data[ ArraySize(m_data) - 1 ] = value;
  }
  uint size() { return ArraySize(m_data); }
  void resize(uint newSize) { ArrayResize(m_data, newSize); }
  void erase() {
     ZeroMemory(m_data);
     ArrayResize(m_data, 0);
  }
  void assign(uint index, T value) {
     m_data[index] = value;
  }
private:
  T m_data[];
};

string Buy(double lots) {
  string alertString = "";
  int __ticket;
  if ( (__ticket = OrderSend (Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0, NULL, m_magic)) != -1 )
  {
     m_buyTicket.push_back( __ticket );
     m_buyLots.push_back( lots );
     m_buyPrice.push_back( Ask );
     m_buyAccel.push_back( lots / Lots );
     m_buyPos.push_back( 0 );

     alertString = "Buy function call." +
            "\nAsk\t= " + (string)Round(Ask) +
            "\nBid\t= " + (string)Round(Bid) +
            "\nLots\t= " + (string)Round(lots) +
            "\nSpread\t= " + (string)m_spread +
            "\nID\t= " + (string)CountAll();
  }
  else { 
     int _error = GetLastError();
     alertString = "Error " + (string)_error + "\n" + TranslateError( _error );
  }
  return alertString;
}

string CloseAll() {
  string alertString = "CloseAll function call.";
  // Buy closing
  for (uint i = 0; i < m_buyPrice.size(); ++i)
  {
     if ( OrderClose ( m_buyTicket[i], m_buyLots[i], Bid, Slippage) )
     {
        alertString += "\nBuy " + (string)(i+1) + " closed with profit " +
                       (string)Shrink ( (Bid - m_buyPrice[i]) * m_buyAccel[i] );
     }
     else
     {
        int _error = GetLastError();
        alertString += "\nError " + (string)_error + "\n" + TranslateError( _error ) +
                       "\n(while closing Buy " + (string)(i+1) + ")";
     }
  }
  // Sell closing
  for (uint i = 0; i < m_sellPrice.size(); ++i)
  {
     if ( OrderClose ( m_sellTicket[i], m_sellLots[i], Ask, Slippage) )
     {
        alertString += "\nSell " + (string)(i+1) + " closed with profit " +
                       (string)Shrink ( (m_sellPrice[i] - Ask) * m_sellAccel[i] );
     }
     else
     {
        int _error = GetLastError();
        alertString += "\nError " + (string)_error + "\n" + TranslateError( _error ) +
                       "\n(while closing Sell " + (string)(i+1) + ")";
     }
  }
  return alertString;
}