新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 90

 
Vitaly Muzichenko:

谢谢你,由于某些原因,这批货并不是这样的。

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
double   r=-1;
  if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots() || r==-1) {
                r=OrderLots();
  }}}}}}}
  return(r);
}

如何返回快照中第十四个卖出止损的手数= 0.03?

 
Marina Korotkih:

谢谢你,由于某些原因,这批货并不是这样的。

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
  if (sy=="0") sy=Symbol();
  double r=MarketInfo(sy, MODE_MINLOT);
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots()) {
                r=OrderLots();
  }}}}}}}
  return(r);
}
这是最低限度的,如果你需要最近的订单,那么我现在就做。
 
Vitaly Muzichenko:

这是最低限度的,如果你需要最近的订单,那么我现在就做。

这里要找的是离价格最远的地段

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
datetime t=0;
double r=-1,l=0;
if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderOpenPrice() || r==-1) {
                r=OrderOpenPrice();
                l=OrderLots();
  }}}}}}}
  return(l);
}
 
Marina Korotkih:

谢谢你,由于某些原因,这批货并不是这样的。

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
double   r=-1;
  if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots() || r==-1) {
                r=OrderLots();
  }}}}}}}
  return(r);
}

如何返回快照中第十四个卖出止损的手数= 0.03?



没有该函数工作正常,为什么返回值不是1和14个订单而是2?

它是一个测试器吗?

对我来说,它工作正常。

 
Vitaly Muzichenko:

这里要找的是离价格最远的地段


谢谢你,这很有意义。找到了,现在你可以找到你需要知道的一切了 )

 
Alekseu Fedotov:

没有该函数工作正常,为什么返回值不是1和14个订单而是2?

它是一个测试器吗?

对我来说,它工作正常。

你必须按价格排序,因为你不能按尺寸搜索,网格可能是混合的,你会找到最大的或最小的,但不是第一个也不是最后一个。
 
Marina Korotkih:

谢谢你,这很有意义。找到了,现在你可以找到你需要知道的一切了 )

要了解一个订单或头寸的所有信息,最好是用票据来做

if(OrderSelect(i, SELECT_BY_TICKET)) {
  // всё что угодно
}
 
Alekseu Fedotov:

...为什么返回值不是1和14个订单而是2?


因为我是这样称呼的

GetOrderOpenPrice(Symbol(),OP_SELLSTOP,_Magic)
 
Vitaly Muzichenko:

要想了解一个订单或头寸的全部细节,最好从票据上进行查询。

if(OrderSelect(i, SELECT_BY_TICKET)) {
  // всё что угодно
}

但要做到这一点,我们首先需要知道最后一个订单的票据14

所以顺序还是要先搜索,就像第一个函数中那样?

或者 ,只是 ,用 SELECT_BY_ POS 替换 S ELECT_BY_TICKET

 
Marina Korotkih:

但为了做到这一点,你必须首先找出最后一笔订单的票据 14

所以顺序仍然需要像第一个函数中那样先搜索?

或者 ,只是 ,用 SELECT_BY_ POS 替换 S ELECT_BY_TICKET

这取决于你需要检查什么。事实上,我们可以在这里找出一切,按价格选择订单,然后为它写出所需的参数,并返回一切。

多使用一次循环并不是一个好主意,所以,最好在一个循环中实现所有的东西;在真实的交易中并不明显,但在测试器中的测试会运行很长时间。然而,这一切都取决于任务,有人为测试员写程序,有人为交易写程序,所以你可以使用不止一个周期。

P.S.如果专家顾问是一个pipsqueak,当然,最好不要使用单一周期)
原因: