//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
你好,Andrey!
你好,Andrey!
GetOpenPriceByLot()函数。
该函数按手数返回头寸或订单的开盘价。要考虑的位置的选择是由外部参数指定的。
GetTicketByLot()函数。
该函数按手数返回仓位或订单的票数。要考虑的位置的选择是由外部参数指定的。
附上一个测试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的全局变量中,并注释了对它们的引用。这不是很方便,但它是有效的。我对这里的这句话有点不清楚。
如果((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6))
谢谢你!纠正了...这是复制的结果,即使用另一个函数的预演,旨在只与限价和止损订单 一起工作。
我在连接图书馆方面也有一个问题。我已经搜索和阅读了,但在编译我正在编写的专家顾问时,连接给我一个错误。我没有时间去弄清楚,我想更快地写出一个可盈利的专家顾问,所以我已经复制了所有三个需要的库,并将它们附在特殊函数start()之后,并将它们的全局变量放在全局EA变量中,注释了对它们的引用。这不是很方便,但它是有效的。
顺便说一下,我不使用我自己的MQH文件形式的库。我通常在我的EA中复制我需要的功能,即我的标准现成EA是一个单一的MQ4文件。我需要的一切都在这个文件里。是的,代码中存在一些重复性。但在功能的版本上没有问题。
顺便说一下,我还注意到,你为每个功能都有测试脚本,它们有你需要的所有额外功能,你可以简单地将这些功能与功能一起添加到你的EA中,它将全部在一个文件中,没有多余的东西。功能简单而有用,但如果你允许,我将为自己做四个:两个用于位置,两个用于停止。他们将更普遍地满足我的EA的微妙要求。但现在我看到它是多么容易做到。非常感谢伊戈尔。
恭喜你,Andrei。
TimeOpenFirstPos()函数。
该函数返回第一次开仓的时间。选择要考虑的位置是由外部参数指定的。
你好
如何在你的SetRegression()(https://www.mql5.com/ru/forum/107476/page35)通道上添加一个foeba。
你好
如何在你的SetRegression()(https://www.mql5.com/ru/forum/107476/page35)通道上添加一个foeba。
鸭子,这很简单。