Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1479

 
MrBrooklin #:

Vielen Dank, Alexander. Durch deine Korrektur hat der Code funktioniert. Um ehrlich zu sein, habe ich gemerkt, dass ich selbst in drei Kieferbäumen verwirrt war. Ich muss die Übergabe von Argumenten an eine Funktion noch einmal studieren. Offenbar habe ich hier ein völliges Missverständnis.

Mit freundlichen Grüßen, Vladimir.

Die Ausgabe von Variablen in den globalen Bereich ist keine Übergabe von Argumenten an eine Funktion...

//+------------------------------------------------------------------+
//|                                              Count_Pos (v.2).mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Calculate positions Buy and Sell                                 |
//+------------------------------------------------------------------+
void Calc_Pos(uint & pos_buy,uint & pos_sell)
  {
   for(int i=0; i<PositionsTotal(); i++)
     {
      PositionGetSymbol(i);
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
         pos_buy++;
      if(
         PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
         pos_sell++;
     }
   Print("pos_buy ",pos_buy);
   Print("pos_sell ",pos_sell);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   uint count_buy=0, count_sell=0;
   Calc_Pos(count_buy,count_sell);
   Print("По символу ",_Symbol," открыто: ",count_buy," длинных позиций");
   Print("По символу ",_Symbol," открыто: ",count_sell," коротких позиций");
  }
//+------------------------------------------------------------------+

Setzen Sie & vor die Variablennamen bei der Eingabe in die Funktion, und alle Probleme werden gelöst sein.

 
Alexey Viktorov #:

Die Ausgabe von Variablen in den globalen Bereich ist keine Übergabe von Argumenten an eine Funktion...

Setzen Sie & vor die Variablennamen bei der Eingabe in die Funktion, und alle Probleme werden gelöst sein.

Hallo Alexey, das ist also das Problem!!! Vielen Dank, mein Lieber! Mein ganzer Kopf war kaputt, ich dachte, da fehlt noch etwas! Es stellte sich heraus, dass Gehirne nicht genug sind!!!! ))

Mit freundlichen Grüßen, Vladimir.

 
Alexey Viktorov #:
Setzen Sie & vor die Variablennamen bei der Funktionseingabe und alle Probleme sind gelöst

Ich habe das Video über Funktionen mit Referenzen gefunden und angeschaut. Nach dieser Video-Lektion wurde mir klar, dass ich nicht nur eine MQL5-Lektion für Anfänger brauche, sondern eine MQL5-Lektion für besonders begabte Anfänger mit Dummheit. Kurz gesagt, ich habe nichts verstanden. Im Allgemeinen müssen Sie alle Informationen, die Sie erhalten haben, verdauen und dieses Video fünf- oder sogar sechsmal erneut ansehen. Aber es wird sich schon etwas finden, was ich in meiner Freizeit tun kann! ))

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin #:

Ich habe ein Video über Funktionen mit Links gefunden und angesehen. Nach dieser Video-Lektion wurde mir klar, dass ich nicht nur eine MQL5-Lektion für Anfänger brauche, sondern eine MQL5-Lektion für Anfänger, die besonders dumm begabt sind. Kurz gesagt, ich habe nichts verstanden. Im Allgemeinen müssen Sie alle Informationen, die Sie erhalten haben, verdauen und sich dieses Video fünf oder sogar sechs Mal ansehen. Aber es wird schon etwas zu tun geben in meiner Freizeit! ))

Mit freundlichen Grüßen, Vladimir.

Verschwenden Sie keine Zeit, auch wenn Sie nirgends etwas zu tun haben. Der Name des "Lehrers" spricht für sich selbst, ein Dilettant ist ein Dilettant.

Dieses Video ist nur 3 Minuten lang nützlich für Sie. Der Rest ist nur ablenkend und Sie verlieren nützliche Informationen.

Es ist besser, die Dokumentation sorgfältig zu lesen, mit Beispielen zu experimentieren und Sie werden alles verstehen.

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Передача параметров - Функции - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:

Vergeuden Sie keine Zeit, auch wenn es nirgendwo etwas zu vergeuden gibt. Allein der Name des "Lehrers" spricht für sich selbst, ein Amateur ist ein Amateur.

Es gibt nur 3 Minuten nützliche Informationen in diesem Video. Der Rest ist nur eine Ablenkung und Sie verlieren nützliche Informationen.

Es ist besser, die Dokumentation sorgfältig zu lesen, mit Beispielen zu experimentieren und Sie werden alles verstehen.

Danke, Alexey, ich dachte, dass die Video-Lektion informativer und nützlicher für mich sein würde, aber es stellte sich heraus, dass genau das Gegenteil der Fall war. Was das MQL5-Referenzhandbuch, den Abschnitt Parameterübertragung, betrifft, so habe ich es auf die gleiche Weise gelesen, aber es stellte sich heraus, dass es wie das berühmte Sprichwort ist: "Ich schaue in das Buch, ich sehe die Abbildung!". Ich habe nichts verstanden. Kurzum, natürlich werde ich noch ein paar Mal nachlesen und experimentieren, ich habe ja keine andere Wahl. ))

Mit freundlichen Grüßen, Vladimir.

 

Nachdem ich mir das Video-Tutorial angesehen und im MQL5-Referenzhandbuch über die Übergabe von Argumenten per Referenz gelesen habe, scheint es mehr oder weniger klar zu sein. Bei der Analyse des im Referenzhandbuch vorgestellten Codes hat jedoch ein Fragment immer noch für Verwirrung gesorgt, obwohl es meiner Meinung nach nichts mit der Übergabe von Argumenten per Referenz zu tun hat:

//+------------------------------------------------------------------+
//| передача параметров по ссылке                                    |
//+------------------------------------------------------------------+
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("a и b после вызова:",a," ",b);
  }
//+------------------------------------------------------------------+
//--- результат выполнения скрипта
//  a и b перед вызовом: 14 8
//  a и b после вызова: 28 4

In diesem Zusammenhang habe ich eine Frage an die Experten der MQL5-Programmierung: Warum zum Teufel haben sie die Funktion SecondMethod(a,b ) in die Variable d in OnStart( ) "geschoben"? Ist das eine Voraussetzung für das korrekte Funktionieren des Skripts, oder habe ich da wieder etwas falsch verstanden?

Mit freundlichen Grüßen, Vladimir.

 

Bitte helfen Sie mir.

Es gibt viele Arrays mit Zeit, und die Zeit einiger Elemente in diesen Arrays kann übereinstimmen.

Ich muss sie in einem Array sammeln, ohne die Zeitwerte zu wiederholen.

Ich habe es auf diese Weise gemacht:

struct str1
  {
   int               time[];// в массиве порядка 10 тыс элементов
  };

struct str2
  {
   str1              arr[];// в массиве порядка 1 тыс элементов
  };

str2 m_name[]; // в массиве порядка 100 элементов

int ArrFull[]; // массив в который нужно собрать отсортированное время без повторений
//+------------------------------------------------------------------+
void OnStart()
  {
// считаем что m_name[] ранее уже заполнили


   int tempArr[];// объявляю дополнительный массив

   int size1 = ArraySize(m_name);
   for(int i = 0; i < size1; i++)
     {
      int size2 = ArraySize(m_name[i].arr);
      for(int j = 0; j < size2; j++)
        {
         // копирую в дополнительный массив все массивы времени из структур
         ArrayInsert(tempArr, m_name[i].arr[j].time, ArraySize(tempArr));
        }
     }
// сортирую дополнительный массив
   ArraySort(tempArr);

   int size = ArraySize(tempArr);
   ArrayResize(ArrFull, size);
   ArrFull[0] = tempArr[0];
   int j = 1;

// копирую не повторяющиеся элементы из дополнительного массива в массив с которым в дальнейшем буду работать
   for(int i = 1; i < size; i++)
      if(ArrFull[j - 1] != tempArr[i])
        {
         ArrFull[j] = tempArr[i];
         j++;
        }

   size = ArrayResize(ArrFull, j);

// дальше продолжение. много много букв
  }
//+------------------------------------------------------------------+


Aber es stellte sich heraus, dass es ein sehr langsamer Code ist. Er muss schneller sein. Wie man ????

 
MrBrooklin Argumenten per Referenz gelesen habe, scheint es mehr oder weniger klar zu sein. Bei der Analyse des im Referenzhandbuch vorgestellten Codes hat jedoch ein Fragment immer noch für Verwirrung gesorgt, obwohl es meiner Meinung nach nichts mit der Übergabe von Argumenten per Referenz zu tun hat:

In diesem Zusammenhang habe ich eine Frage an die Experten der MQL5-Programmierung: Warum zum Teufel haben sie die Funktion SecondMethod(a,b ) in die Variable d in OnStart( ) "geschoben"? Ist das eine Voraussetzung für das korrekte Funktionieren des Skripts und ich habe wieder etwas falsch verstanden?

Mit freundlichen Grüßen, Vladimir.

Der Variable d wird das Ergebnis der Funktionsausführung zugewiesen
 
Artyom Trishkin #:
Der Variablen d wird das Ergebnis der Funktionsausführung zugewiesen

Vielen Dank, Artyom, für Ihre Antwort! Istes unmöglich, nur die Funktion SecondMethod(a,b) ohne Zuweisung zu verwenden?

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin #:

Vielen Dank, Artyom, für deine Antwort! Istes unmöglich, nur die Funktion SecondMethod(a,b) ohne Zuweisung zu verwenden?

Mit freundlichen Grüßen, Vladimir.

Ja, man kann. Dann werden zwei Werte empfangen - nur in den Variablen, die per Referenz übergeben werden. Das heißt, die Funktion gibt drei Werte zurück
Grund der Beschwerde: