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

 
Artyom Trishkin:

你的这种感觉很奇怪。只是向你展示了如何保持简单--没有任何不必要的变量。


所以我很累了,是时候去休息一下了--睡觉,是的。

 

下午好!专家顾问中的指标窗口的功能是什么?

 
Nauris Zukas:

下午好!请问专家顾问中的哪些功能可以使指标窗口?


从专家顾问中调用一个空指标。

 
Alekseu Fedotov:

从专家那里叫出一个空指标。

谢谢你!

 
Vitaly Muzichenko:

在这里 找到你需要的代码


你好!我用这个函数来确定最后一个卖出订单的价格

PriceS(string sy="0", int op=OP_SELL, int mn=-1) {             //Цена последнего открытого Селл ордера
  datetime t;
  double   r=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) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}

但当我把它粘贴到我的EA中时,我在'sy'函数的条件中得到了一个编译时错误--意外标记

='- 意外令牌 252 18

需要的L值 1 1

从 "字符串 "到 "数字 "的隐式转换 252 19

'=' - 需要L值 252 18

'=' - 'void'类型的表达式是非法的 252 18

'op' - 意外的令牌 252 28

'=' - 意外标记 252 30

需要的L值 1 1

'OP_SELL' - 非法操作使用 252 31

由于类型转换可能造成的数据损失 252 30

'=' - 需要的L值 252 30

'=' - 'void'类型的表达是非法的 252 30

'mn' - 意外的令牌 252 44

'=' - 意外标记 252 46

需要的L值 1 1

'1' - 非法操作使用 252 48


似乎一切都应该是正确的!? 请指示,我复制了它,没有改变任何东西。


 
vikzip:

你好!我用这个函数来确定最后一个卖出订单的价格

但是当我把它粘贴到EA中时,我在'sy'函数条件中得到了一个编译时错误--意外标记

='- 意外令牌 252 18

需要的L值 1 1

从 "字符串 "到 "数字 "的隐式转换 252 19

'=' - 需要L值 252 18

'=' - 'void'类型的表达式是非法的 252 18

'op' - 意外的令牌 252 28

'=' - 意外标记 252 30

需要的L值 1 1

'OP_SELL' - 非法操作使用 252 31

由于类型转换可能造成的数据损失 252 30

'=' - 需要的L值 252 30

'=' - 'void'类型的表达是非法的 252 30

'mn' - 意外的令牌 252 44

'=' - 意外标记 252 46

需要的L值 1 1

'1' - 非法操作使用 252 48


似乎一切都应该是正确的!? 请指示,我复制了它,没有改变任何东西。


我需要返回函数类型

PriceS(string sy="0", int op=OP_SELL, int mn=-1) {
double PriceS(string sy="0", int op=OP_SELL, int mn=-1) {
 
vikzip:


看起来一切都应该是正确的!? 请指教,我复制了它,没有改变任何东西



函数的头,并没有复制函数的类型


该函数最初看起来是这样的。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает цену открытия последней открытой позиций.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t=0;
  double   r=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) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
 
'op' - unexpected token Армата.mq4 248 28 'OP_SELL' - illegal operation use Армата.mq4 248 31 'mn' - unexpected token Армата.mq4 248 44 
double PriceS(string sy="", int op=OP_SELL, int mn=-1) {             //Цена последнего открытого Селл ордера
  datetime t;
  double   r=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) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
Alekseu Fedotov
:


函数头,并没有复制函数类型


该函数最初看起来是这样的。


阿列克谢-费多托夫

一个函数头,并且没有复制过函数类型


该函数最初看起来是这样的。


正确,该例子还说。如果我没有理解错的话,你可以选择订单类型,我已经做了。

  • Op- 贸易操作,职位类型。有效值:OP_BUYOP_SELL-1。默认值为-1 意味着任何位置。
然后我把这个函数放在start之前,使之成为全局函数。但如果我在函数名称前返回双倍类型,就会出现错误。 请告诉我为什么!?

'PriceS' - 函数只能在全局范围内声明 252 10

我理解的是,该函数必须是全局的!

在翻译器中翻译了这个错误,它说

该函数只能在全局范围内定义。 如果我对这些词的意思理解正确,它必须在全局范围内定义,因此不要在它前面加上double。不清楚为什么即使我只是从模式中复制它,在sy上也会产生错误。

'sy' - 意外的标记 248 17 '=' - 意外的标记 248 19 l-值需要 1 1

我可以把sy变成全局的吗? 在函数中的其他声明变量也有同样的错误。

'op'--意外的标记 248 28 'OP_SELL'--非法操作使用 248 31 'mn'--意外的标记 248 44

 
vikzip:


没错,这也是写在例子里的。如果我没有理解错的话,可以选择订单类型,我就是这么做的。

  • op- 贸易操作,职位类型。有效值:OP_BUYOP_SELL-1。默认值为-1 意味着任何位置。
然后我把这个函数放在start之前,使之成为全局函数。但如果我在函数名称前返回双倍类型,就会出现错误。 请告诉我为什么!?

'PriceS' - 函数只能在全局范围内声明 252 10

我理解的是,该函数必须是全局的!

翻译的错误在译者那里说


将该功能置于启动功能之外

在启动函数的主体 中,你这样调用它。

PriceOpenLastPos(); //текущий символ  любая последняя поз.


PriceOpenLastPos(Symbol(),OP_SELL);//текущий символ  OP_SELL   без магика


PriceOpenLastPos(Symbol(),OP_BUY);//текущий символ   OP_BUY  без магика

3个参数magik,以逗号分隔,放入你自己的参数或0

 
Alekseu Fedotov:

将该功能置于启动功能之外

在启动函数的主体 中,你这样调用它。

3个参数magik,以逗号分隔,放入你自己的参数或0


只要我把函数放在启动函数之外,所有的错误都消失了!!。