KimIV的有用功能 - 页 121

 

在函数https://forum.mql4.com/ru/38949/page5#434241,有一个错误。

它应该是这样的

double PriceOpenNearPos(string sy="", int op=-1, int mn=-1) {
  double mi, oop=0, p;
  int    i, k=OrdersTotal(), pp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (OrderType()==OP_BUY)  mi=MarketInfo(OrderSymbol(), MODE_ASK);
            if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
            p=MarketInfo(OrderSymbol(), MODE_POINT);
            if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
            if (pp==0 || pp>MathAbs(OrderOpenPrice()-mi)/p) {
              pp=MathAbs(OrderOpenPrice()-mi)/p;
              oop=OrderOpenPrice();
              if(pp==0) break;
            }
          }
        }
      }
    }
  }
  return(oop); 

}

请重新下载。

 

大家下午好!

在修复专家顾问系统时(由于MQL的更新),结果发现Igor Kim的许多功能不再起作用了。这包括最受欢迎的那些。比如说。

NumberOfPositions - 返回位置的数量。

ExistPositions - 返回职位存在的标志。

另一个函数,我昨天在主题中提到:函数NumberOfBarCloseLastPos()
此函数返回关闭最后一个位置的条数。

当我在Strategy Tester图表上显示评论时,我看到尽管存在交易(当前和已关闭),但这些函数一直返回常量值(-1和/或0)。看起来EA在其代码中没有看到这些函数所定义的条件。

此外,所谓的 "可执行 "函数停止工作,例如,一组用于关闭位置的函数:ClosePosBySelect(该函数关闭一个初步选定的位置)和相关函数。
ClosePositions - 以市场价格关闭头寸,等等。

请告知这些函数中存在什么样的bug,有什么需要修复的,至少使用其中一个函数--NumberOfPositions--它返回的是位置的数量

 
Rita:

大家下午好!

在修复专家顾问系统时(由于MQL的更新),结果发现Igor Kim的许多功能不再起作用了。这包括最受欢迎的那些。比如说。

NumberOfPositions - 返回位置的数量。

ExistPositions - 返回职位存在的标志。

另一个函数,我昨天在分支中提到:函数NumberOfBarCloseLastPos()
该函数返回关闭最后位置的条数。

当我在Strategy Tester图表上显示评论时,我看到尽管存在交易(当前和已关闭),但这些函数一直返回常量值(-1和/或0)。看起来EA在其代码中没有看到这些函数所定义的条件。

此外,所谓的 "可执行 "函数也停止工作,例如,一组用于关闭头寸的函数:ClosePosBySelect(它关闭了一个预先选定的头寸)和
ClosePositions - 以市场价格关闭头寸,等等。

请告知函数中出现了什么样的故障,哪些需要修复,至少以其中一个函数为例--NumberOfPositions--返回位置的数量

NumberOfPositions()对我来说工作得很好!是的,我一直在用MQL4工作,没有任何优点如果你用一种最新的语言写作,那么我想一切都需要为它量身定做,或者去做自由职业者!现在一切都以可怕的力量被商业化了!我为你感到高兴!

如果你能以某种方式适应NumberOfPositions(),那么ExistPositions()就不需要了。你可以这样检查。

if(NumberOfPositions() > 0) //вместо if(ExistPositions() == true)
----------------------------//или
if(NumberOfPositions() == 0)//вместо if(ExistPositions() == false)

好运!

 
borilunad:

NumberOfPositions()对我来说工作得很好!是的,我一直在用MQL4工作,没有任何优点如果你在用一种更新的语言写作,那么一切可能都应该调整到它,或者去做自由职业者!现在,一切都在以可怕的力量被商业化。!

我不经常来这里,所以我不知道,"没有专业人员的MQL4 "是什么意思?

你认为那些能在这里回答的人不这样做,是为了迫使访客付费回答一个不复杂的自由职业问题 吗?

//|  Описание : Возвращает количество позиций.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  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) kp++;
          }}}}}
  return(kp);
}
让我提醒你,Comment( NumberOfPositions(NULL, -1, Magic)); - 它不断返回-1,即使EA已经开仓。
 
Rita:

我不经常来这里,所以我不知道,"没有专业人员的MQL4 "是什么意思?

你认为那些能在这里回答的人不会这样做,以迫使访客付费来回答一个不复杂的自由职业问题 吗?

让我提醒你,Comment( NumberOfPositions(NULL, -1, Magic));将始终返回-1,即使EA已经开仓。

NULL 作为一个函数参数意味着没有参数。

那会更好)Comment( NumberOfPositions(Symbol(), -1, Magic));

 
Rita:

我不经常来这里,所以我不知道,"没有专业人员的MQL4 "是什么意思?

你认为那些能在这里回答的人不这样做,是为了迫使访客付费回答一个不复杂的自由职业问题 吗?

我想知道对于一个商业程序员来说,修复这样一个功能的成本会是多少。

让我提醒你,Comment( NumberOfPositions(NULL, -1, Magic));的输出显示,即使EA已经开仓,也总是返回-1。

MQL4++更新了,他们在这里称它为MQL4++!

我的函数返回正确的 位置!但你在Comment()中出现了错误!我相信这个功能是有效的!

像这样试试吧。

int start()// или что у Вас там, как в обновлённом MQL4


  int BuyPos = NumberOfPositions(Symbol(),OP_BUY, Magic); //это вызов этой функции, чтобы знать, сколько у Вас баев
  int SellPos = NumberOfPositions(Symbol(),OP_SELL,Magic);//а это для селлов



  Comment("Buy ",BuyPos," Sell ",SellPos);

这样,你就可以在图表上准确地看到所有的东西,应用BuyPos和SellPos变量来检查条件看看我是如何掌握的。

      if(BuyPos == 0 && SellPos == 0) 
      {
// и так далее ...

好运!

 

谢谢你,borilunad和vadynik,谢谢你的提示。

的确,这个功能是有效的!在此对您的有益提示表示衷心的感谢:https://www.youtube.com/watch?v=SFJeHI2LVX4&feature=related!

 
borilunad:

现在,一切都在以可怕的力量被商业化。我为你感到高兴!

鲍里斯,你这么说不觉得羞耻吗?计算一下你写了多少页,试图帮助你。这就是你对所有帮助你的人的感谢?我不记得了,但Artem(artmedia70)很好地解决了你的问题,并得到了回报。
 
Rita:

这里有一个备选方案。只有当订单数量 发生变化时,才会调用该函数。此外,如果订单类型发生了变化,它也可以被调用。

// переменные глобального уровня
int Total[6];
int ot;

void OnTick()
{
 if(ot != OrdersTotal())
  CountTrades();

  Comment("Ордеров BUY ", Total[OP_BUY], "\n"
        , "Ордеров SELL ", Total[OP_SELL], "\n"
        , "Ордеров BUYLIMIT ", Total[OP_BUYLIMIT], "\n"
        , "Ордеров SELLLIMIT ", Total[OP_SELLLIMIT], "\n"
        , "Ордеров BUYSTOP ", Total[OP_BUYSTOP], "\n"
        , "Ордеров SELLSTOP ", Total[OP_SELLSTOP], "\n"
}
void CountTrades()
{/*********************Подсчёт открытых ордеров**********************/
  ArrayInitialize(Total, 0);
           int type, total = OrdersTotal(); ot = 0;
            for(int i = 0; i < total; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               {
                type = OrderType();
                 Total[type] += 1;
                ot++;
               }
             }
}/*******************************************************************/
 
Rita:

谢谢你,borilunad和vadynik,谢谢你的提示。

的确,这个功能是有效的!在此对您的有益提示表示衷心的感谢:https://www.youtube.com/watch?v=SFJeHI2LVX4&feature=related!

谢谢你!只有推荐给你的下一个函数可能会出现故障,因为它是用MQL4++编写的