给MQL专家的一个问题 - 页 10

 
FAQ:
如果您的订单打开了,请检查是否有一个订单打开,如果打开了,您可以用检查打开第二个订单...

我写了两个函数,根据不同的情况打开,我将在每个函数的最后检查(我想它们将是一个单独的函数),什么和多少订单是开放的,什么订单将被错过,将被重新打开。

如果你是外汇 方面的EA定位领域的专家,你可能有兴趣了解更多关于它的信息,并在你的交易机器人中使用它。我想重申我的感谢(对不起,我没有详细说明)。

 

上午好。

出现了一个问题。我找不到返回给定工具的 "总 "头寸大小的函数!我搜索了整个论坛,包括I.KIM的分会,https://www.mql5.com/ru/forum/131859- 有-很多不同的功能,除了我需要的那个!

例如,如果在欧元上有几个开放的 "买入 "交易,你能建议如何确定其总金额吗?

GetLot(EURUSD, OP_BUY, magic)

double GetLot(string sy="", int op=-1, int mn=-1) {// возвращает сувокупный размер поз.
   double   l=-1;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {

              I = ------  ???????????
              ------ ????????????
              

            }
          }
        }
      }
    }
  }
  return(l);
}
 

问题解决了!已经发现了一个功能。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();
 
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
 
不是这样的 )
 

这怎么会错呢?那么这个函数会返回什么?

"返回大量开放职位 的总和"--这不正是它所说的吗?

https://www.mql5.com/ru/code/9394

 
Rita:

"返回开放职位的手数之和"--不是这样写的吗?

这就对了。它从来不是一个位置 的总量。你可以打开很多,并检查它。
 

我不需要把锁扣考虑在内。或者说,这里是如何做到的。

我需要的是这个。如果有几个未平仓的卖出和买入头寸,我需要删除反面(补偿)头寸,所以--只保留一个方向。

我想首先计算所有 "海湾 "的总和,然后计算所有 "卖出 "的总和。之后,找出差异(即谁的总大小更大)。而这种 "差异 "应该被留在市场上,--而所有相反的都被清除掉!

那么,这个函数GetAmountLotFromOpenPos 在这里将不起作用?例如,如果我设置

GetAmLotFromOpenPos(EURUSD,OP_SELL, -1)

-不是会返回所有卖出头寸的总手数吗?

 
Rita:

-她不会把所有卖出头寸的手数之和还给我吗?

如果是这样,对不起,没关系。星期一。我的大脑还没有完全投入 :)
 
Rita:

我不需要把锁扣考虑在内。或者说,这里是如何做到的。

我需要的是这个。如果有几个未平仓的卖出和买入头寸,我需要删除反面(补偿)头寸,所以--只保留一个方向。

我想首先计算所有 "海湾 "的总和,然后计算所有 "卖出 "的总和。之后,找出差异(即谁的总大小更大)。而这种 "差异 "应该被留在市场上,--而所有相反的都被清除掉!

那么,这个函数GetAmountLotFromOpenPos 在这里将不起作用?例如,如果我设置

GetAmLotFromOpenPos(EURUSD,OP_SELL, -1)

-难道不会返回所有卖出头寸的总手数吗?

在一般情况下。

SummLot = GetAmLotFromOpenPos("0", OP_BUY, MagicNumber)- GetAmLotFromOpenPos("0", OP_SELL, MagicNumber)。

 
是的,我就是这样做的,以获得一个 "干净 "的平衡。