KimIV的有用功能 - 页 115

 

你好,Andrey!

  1. 开盘价已经有三个功能。
  2. 还有门票的功能。有两个人。
安德烈,这些功能有你需要的一切,除了按批量大小选择。我将在不久的将来制作其他功能,在这些功能中,可以通过手数获得开盘价和票数。

 
KimIV:

你好,Andrey!

  1. 开盘价已经有三个功能。
  2. 还有门票的功能。有两个人。
安德烈,这些功能有你需要的一切,除了按批量大小选择。我将在不久的将来制作其他功能,在这些功能中,可以通过手数获得开盘价和票数。
也许,它们对我来说是多余的,我必须摆脱不必要的条件,如:下一个开仓的价格、最后一个开仓的价格、最接近市场的价格。而且结果并不总是正确的。此外,如果我们正确地进行比较,对所有这些微妙之处的理解会更快。谢谢你,我期待着它。
 

GetOpenPriceByLot()函数。

该函数按手数返回头寸或订单的开盘价。要考虑的位置的选择是由外部参数指定的。

  • sy- 市场工具的名称。如果设置了这个参数,函数将只考虑指定仪器的位置。默认值"" 意味着任何市场工具。NULL 值表示当前的仪器。
  • op- 交易操作,位置或订单类型。有效值:OP_BUYOP_SELL,OP_BUYLIMIT,OP_BUYSTOP,OP_SELLLIMIT,OP_SELLSTOP-1。默认值为-1 意味着任何交易操作。
  • mn- 位置或订单的标识符,MagicNumber。默认值为-1,意味着任何标识符。
  • lo- 地段。默认值0 意味着任何批次
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.03.2013                                                     |
//|  Описание : Возвращает цену открытия позиции или ордера по размеру лота.   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая операция)                 |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//|    lo - лот                        (  0  - любой лот)                      |
//+----------------------------------------------------------------------------+
double GetOpenPriceByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
  double p=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=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((op<0 || OrderType()==op) && OrderType()<6) {
          if (lo==0 || lo==NormalizeLot(OrderLots())) p=OrderOpenPrice();
        }
      }
    }
  }
  return(p);
}
附上一个测试GetOpenPriceByLot()函数的脚本
附加的文件:
 

GetTicketByLot()函数。

该函数按手数返回仓位或订单的票数。要考虑的位置的选择是由外部参数指定的。

  • sy- 市场工具的名称。如果设置了这个参数,函数将只考虑指定符号的位置。默认值"" 意味着任何市场工具。NULL 值表示当前的仪器。
  • op- 交易操作,位置或订单类型。有效值:OP_BUYOP_SELL,OP_BUYLIMIT,OP_BUYSTOP,OP_SELLLIMIT,OP_SELLSTOP-1。默认值为-1 意味着任何交易操作。
  • mn- 位置或订单的标识符,MagicNumber。默认值为-1,意味着任何标识符。
  • lo- 地段。默认值0 意味着任何批次。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.03.2013                                                     |
//|  Описание : Возвращает тикет позиции или ордера по размеру лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая операция)                 |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//|    lo - лот                        (  0  - любой лот)                      |
//+----------------------------------------------------------------------------+
int GetTicketByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
  int i, k=OrdersTotal(), t;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((op<0 || OrderType()==op) && OrderType()<6) {
          if (lo==0 || lo==NormalizeLot(OrderLots())) t=OrderTicket();
        }
      }
    }
  }
  return(t);
}

附上一个测试GetTicketByLot()函数的脚本。


附加的文件:
 

你好,伊戈尔!

非常感谢你们的新功能和如此迅速的速度。一切都非常好。例如,该函数返回按条件排列的票据订单,这些条件可以由外部变量设置,否则就不能使用它们。我对这里的这句话有点不清楚。

如果((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6))

这里我们检查if 语句的条件,即如果外部变量<0,任何订单类型都可以使用,或者如果我们在函数调用中写上,例如OP_BUY,将从OP_BUY订单中进行选择。这个条件很清楚,但进一步说,我们有一个通过&& 写的等价条件,它指出OrderType()必须在挂单范围内,即从1到5。我们的OP_BUY类型不包括在这个范围内,因此运算符的条件必须是假的,控制必须传递给if-else运算符后面的运算符,也就是说,我很难说在哪里,在卷发体箭头后面的某个地方。在我看来,我们应该在这里规定市场订单的条件和同类挂单的单独功能。也就是说,如果我想从市场订单中进行选择,但不知道它的确切类型,我采取外部变量<0,但在指定从0到1的条件的函数。 同样的过程也适用于待定订单。因此,我得出的结论是,在使用这个有用的条件时,我们应该为每一类订单类型使用不同的函数。

另外,我有一个图书馆连接的问题。我已经搜索和阅读了,但在编译我正在编写的EA时,连接会出现错误。我还没有时间处理这个问题,我想更快地编写可盈利的专家顾问,所以我已经复制了所有三个需要的库,并将它们附在特殊函数start()之后,并将它们的全局变量 放在EA的全局变量中,并注释了对它们的引用。这不是很方便,但它是有效的。
 
00007:

我对这里的这句话有点不清楚。

如果((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6))

谢谢你!纠正了...这是复制的结果,即使用另一个函数的预演,旨在只与限价和止损订单 一起工作。

00007:

我在连接图书馆方面也有一个问题。我已经搜索和阅读了,但在编译我正在编写的专家顾问时,连接给我一个错误。我没有时间去弄清楚,我想更快地写出一个可盈利的专家顾问,所以我已经复制了所有三个需要的库,并将它们附在特殊函数start()之后,并将它们的全局变量放在全局EA变量中,注释了对它们的引用。这不是很方便,但它是有效的。

顺便说一下,我不使用我自己的MQH文件形式的库。我通常在我的EA中复制我需要的功能,即我的标准现成EA是一个单一的MQ4文件。我需要的一切都在这个文件里。是的,代码中存在一些重复性。但在功能的版本上没有问题。

 

顺便说一下,我还注意到,你为每个功能都有测试脚本,它们有你需要的所有额外功能,你可以简单地将这些功能与功能一起添加到你的EA中,它将全部在一个文件中,没有多余的东西。功能简单而有用,但如果你允许,我将为自己做四个:两个用于位置,两个用于停止。他们将更普遍地满足我的EA的微妙要求。但现在我看到它是多么容易做到。非常感谢伊戈尔。

恭喜你,Andrei。

 

TimeOpenFirstPos()函数。

该函数返回第一次开仓的时间。选择要考虑的位置是由外部参数指定的。

  • sy- 市场工具的名称。如果设置了这个参数,函数将只考虑这个仪器的位置。默认值"" 意味着任何市场工具。NULL 值表示当前的仪器。
  • op- 贸易操作,职位类型。有效值:OP_BUYOP_SELL-1。默认值-1 意味着任何位置。
  • mn- 位置标识符,MagicNumber。默认值为-1,意味着任何标识符。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.01.2012                                                     |
//|  Описание : Возвращает время открытия первой открытой позиций.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime TimeOpenFirstPos(string sy="", int op=-1, int mn=-1) {
  datetime t=TimeCurrent();
  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) {
              if (t>OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(t);
}
该函数的使用类似于TimeOpenLastPos()。
 

你好

如何在你的SetRegression()(https://www.mql5.com/ru/forum/107476/page35)通道上添加一个foeba。

 
gince:

你好

如何在你的SetRegression()(https://www.mql5.com/ru/forum/107476/page35)通道上添加一个foeba。

鸭子,这很简单。

  1. 你设定菲波线的第一点(计算你希望它来自哪里)。
  2. 决定在哪个栏里得到第二点。
  3. 然后使用EquationDirect() 来获取价格。
  4. 有了两点的坐标,用SetTLine() 函数画一条通过它们的线。