初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1480

 
Artyom Trishkin #:
可以。然后将收到两个值--仅在通过引用传递的变量中。也就是说,函数返回三个值

为了方便起见,我删除了 d 变量。只留下了函数。打印结果并没有改变。老实说,我完全 不理解这三个值。

再见,弗拉基米尔。

 
MrBrooklin #:

为了引起兴趣,我删除了 d 变量。只留下了函数。打印结果没有变化。老实说,我完全 不理解这三个值。

再见,弗拉基米尔。

没有改变是因为没有打印这个值。

只要添加打印,您就会看到。

 
Alexey Viktorov #:

未更改,因为未打印该值。

只需添加打印,您就会看到。

打印了。没有变化。

2023.11.22 19:48:24.110 10 (EURUSDrfd,H1)       a и b перед вызовом:14 8
2023.11.22 19:48:24.110 10 (EURUSDrfd,H1)       a и b после вызова:28 4

也许我又误解了什么?还是你需要 打印d变量?这就是我们刚才所说的吗?

敬上,弗拉基米尔。

 
MrBrooklin #:

打印出来。一切照旧。

敬上,弗拉基米尔。

在哪里打印?

//+------------------------------------------------------------------+
//| передача параметров по ссылке                                    |
//+------------------------------------------------------------------+
double SecondMethod(int &i,int &j)
  {
   double res;
//---
   i*=2;
   j/=2;
   res=i+j;
//---
   return(res);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---.
   int a=14,b=8;
   Print("a и b перед вызовом:",a," ",b);
   double d=SecondMethod(a,b);
   Print("Результат выполнения функции ", d);
   Print("a и b после вызова:",a," ",b, " ",d);// или здесь. А можно и там и тут…
  }
//+------------------------------------------------------------------+
 
Alexey Viktorov #:

在哪里印刷?

现在我全明白了。))谢谢大家!

弗拉基米尔

 
大家早上好,心情不错!我在继续学习MQL5 编程语言。我写了一个小脚本来计算未结头寸的总数,并打印出一些参数,包括错误代码(如果有的话):
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ResetLastError(); // установим значение предопределенной переменной _LastError в ноль
   int pos_total = PositionsTotal(); // объявим переменную для хранения количества открытых позиций
   if(pos_total > 0) // если есть открытые позиции
     {
      for(int i=0; i<pos_total; i++) // запустим цикл и переберём все открытые позиции
        {
         if(PositionGetSymbol(i) == _Symbol) // выберем все открытые позиции по текущему символу
           {
            ulong  pos_id = PositionGetInteger(POSITION_IDENTIFIER);
            double pos_price = PositionGetDouble(POSITION_PRICE_OPEN);
            double pos_tp = PositionGetDouble(POSITION_TP);
            double pos_sl = PositionGetDouble(POSITION_SL);
            PrintFormat("Позиция #%d цена = %G тейк-профит = %G стоп-лосс = %G", pos_id, pos_price, pos_tp, pos_sl);
           }
         else // если выбрать позицию не удалось
           {
            PrintFormat("Не удалось выбрать позицию по символу %s. Ошибка = ", _Symbol, GetLastError());
           }
        }
     }
  }
//+------------------------------------------------------------------+

我在一个有未结头寸的符号上运行了这个脚本。运行正常,信息打印正确。下一步。在没有未平仓头寸的符号上运行。没有未平仓头寸的信息显示正确,但错误原因代码不知为何没有显示。您能帮我弄明白为什么不显示错误代码吗?

弗拉基米尔

 
MrBrooklin #:

在一个有未结头寸的符号上启动了它。运行正常,信息显示正确。下一个。我在一个没有开仓的符号上运行了它。没有未平仓头寸的信息显示正确,但错误原因代码却没有显示。您能帮我弄明白为什么不显示错误代码吗?

如果没有错误,错误代码从何而来?只是仓位的符号不对而已。

 
JRandomTrader #:

如果没有错误,为什么会有错误代码?只是位置符号 不对而已。

感谢您的回复!我以为至少会显示这个错误代码:

err_trade_position_not_found

4753

未找到仓位


我不同意关于符号的说法。这个符号正是这个脚本被抛出的图表上的符号。我现在没有 GBPUSDrfd 这个符号的未结头寸,但也没有错误。这不清楚

2023.11.23 13:27:26.385 7 (GBPUSDrfd,H1)        Не удалось выбрать позицию по символу GBPUSDrfd. Ошибка = 
2023.11.23 13:27:26.385 7 (GBPUSDrfd,H1)        Не удалось выбрать позицию по символу GBPUSDrfd. Ошибка = 

敬上,弗拉基米尔。

 
MrBrooklin #:

感谢您的回复!我以为至少会显示这个错误代码:

err_trade_position_not_found

4753

未找到位置


我不同意关于符号的说法。该符号正是抛出该脚本的图表上的符号。我在 GBPUSDrfd 上没有任何未结头寸,但也没有错误。我不明白

敬上,弗拉基米尔。

所有仓位都已找到!但找到的位置都没有我们需要的符号。

 
JRandomTrader #:

找到所有位置!但找到的位置都没有我们需要的符号。

我现在明白了。谢谢!!!原来,如果至少有一个未结头寸,错误代码 4753 就不会出现!事实证明,如果至少有一个未结头寸,错误代码 4753 就不会出现。

敬上,弗拉基米尔