Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 166

 
-Aleks-:

Können Sie mir in meiner Funktion zeigen, wie man das macht? Es fällt mir wirklich schwer, das zu verstehen.


Sie müssen entscheiden, welche Variablen aus der Funktion Sie benötigen (für das Hauptprogramm) und diese übergeben/abrufen. Wenn Sie alle benötigen, deklarieren Sie diese Variablen am Anfang des Programms, damit sie für alle Funktionen auf einmal sichtbar sind.
 
-Aleks-:

Denken Sie nicht an das "Warum", sondern besser an das "Wie".

Ich habe Ihnen gesagt, dass dies nicht für diese Funktion gilt...

Solche Funktionen sind in der Regel groß, deshalb ist es schade, sie mehrmals zur Ausführung aufzurufen, um verschiedene Werte zu erhalten, aber ich möchte alle Ergebnisse auf einmal erhalten.

Ich möchte zum Beispiel gleichzeitig die Anzahl aller Lose und die Anzahl aller Aufträge, aufgeschlüsselt nach Auftragsart, abfragen.

#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
double n_Lot_BUY;
double n_Lot_SELL;
int n_Order_BUY;
int n_Order_SELL;

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
  }
void OnTick()
  {
   F();
   Print("Лотов BUY:",n_Lot_BUY,"   Лотов SELL:",n_Lot_SELL,"   Позиций BUY:",n_Order_BUY,"   Позиций SELL:",n_Order_SELL);
  }
//+------------------------------------------------------------------+
void F()
  {
   n_Lot_BUY=0;
   n_Lot_SELL=0;
   n_Order_BUY=0;
   n_Order_SELL=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)){break;}
      if(OrderType()==0)
        {
         n_Order_BUY++;
         n_Lot_BUY=n_Lot_BUY+OrderLots();
        }
      if(OrderType()==1)
        {
         n_Order_SELL++;
         n_Lot_SELL=n_Lot_SELL+OrderLots();
        }
     }
  }
//+------------------------------------------------------------------+
 
Nikolay Gaylis:

Ich meine, die Idee ist, alle Variablen vorher zu deklarieren, und dann ändern Sie sie durch eine Funktion - ich habe es, danke für die Option. Aber es ist nicht immer praktisch, wenn ein und derselbe Variablenname für dieselbe Art von Variablen verwendet wird... keine anderen Optionen?
 

dieselben Typen können in einer Struktur kombiniert und als Array deklariert werden, wie oben vorgeschlagen)

//структура из переменных
struct OrdStruct
   {
   double tp;
   double sl;
   double open;
   double close;
   double lot;
   datetime time_open; 
   datetime time_close;
   };

//массив структур
OrdStruct ORDERS[];


//обращение к переменным
ORDERS[i].sl=OrderStopLoss();
ORDERS[i].tp=OrderTakeProfit();
ORDERS[i].lot=OrderLots();

//или
ORDERS[i]=ORDERS[i+1];

ZeroMemory(ORDERS[i]);
 
Taras Slobodyanik:

Die gleichen Typen können in einer Struktur kombiniert und als Array deklariert werden, wie oben vorgeschlagen)

Das ist schon schwer zu verstehen... Ich kann zum Beispiel nicht verstehen, was i ist und ob das Array ORDERS[i]= eine Größe haben sollte?

 
-Aleks-:

Das ist schon schwer zu verstehen... zum Beispiel verstehe ich i nicht - was ist gleich und sollte das Array ORDERS[i]= nicht größer sein?


Dies ist nur ein Beispiel, natürlich muss i angegeben werden und die Größe des Arrays muss an die Anzahl der Aufträge angepasst werden...

d.h. die Variablen sind in etwa die gleichen tp / sl / lot ... aber der Index des Feldes i ändert sich

 
-Aleks-:

Es schmerzt mich, deinen Kummer zu sehen... Sie befinden sich in einem technischen Forum, benutzen Sie bitte Logik.

1 Beschreiben Sie das Problem;

Beschreiben Sie die Variablen, die Sie verwenden;

Beschreiben Sie, was Sie als Ergebnis erhalten möchten;

Lernen Sie, Ihre Ideen in einem technischen Forum in einer technischen Sprache auszudrücken. Andernfalls wird es sehr lange dauern, bis man hier raten kann.

 
Taras Slobodyanik:


Dies ist zum Beispiel, natürlich muss ich angeben und die Größe des Arrays in Abhängigkeit von der Anzahl der Aufträge...

d.h. die Variablen sind in etwa die gleichen tp / sl / lot ... aber der Index des Feldes i ändert sich

Ja, ich habe es verstanden, danke, ich sollte versuchen, es in Zukunft zu benutzen, irgendwo.... Ich verstehe einfach nicht, und die Arbeit mit dieser Struktur als ein Array? Sortieren und andere Standardoperationen durchführen?

 
Alexey Kozitsyn:

Es schmerzt mich, deinen Kummer zu sehen... Sie befinden sich in einem technischen Forum, benutzen Sie bitte Logik.

1. Beschreiben Sie das Problem;

Beschreiben Sie die Variablen, die Sie verwenden;

Beschreiben Sie, was Sie als Ergebnis erhalten möchten;

Lernen Sie, Ihre Ideen in einem technischen Forum in einer technischen Sprache auszudrücken. Andernfalls wird es sehr lange dauern, bis man hier raten kann.

Bitte schreiben Sie, wo in meinen Worten keine Logik steckt?

Die Qual des Wissens ist das Vergnügen des Lösens.

Ich wollte mein Problem nicht verschütten, also habe ich es einfach gehalten - ich finde es schwierig zu erraten, was die Ursache für die Wahrnehmungsschwierigkeiten ist... Es tut mir leid, wenn ich Ihnen mit meinem "Kummer" Unbehagen bereitet habe.

 
-Aleks-:

D.h. die Idee ist, alle Variablen im Voraus zu deklarieren, und sie dann durch eine Funktion zu ändern - verstanden, danke für die Variante. Aber es ist nicht immer praktisch, wenn ein und derselbe Variablenname für dieselbe Art von Variablen verwendet wird... keine anderen Optionen?

Lesen Sie hier genau nach, und Sie werden sehen, was hier los ist. Hier wird die erste vorgeschlagene Option beschrieben, die Parameterübergabe per Verweis.

Einfach ausgedrückt, wenn eine Funktion aufgerufen wird, kann die Variable als Parameter übergeben werden

double FirstMethod(int i,int j)

oder durch Verweis, wenn dem Variablennamen ein &-Zeichen vorangestellt ist.

double SecondMethod(int &i,int &j)

Bei der zweiten Variante werden die Variablen, die per Referenz an die Funktion übergeben werden, zusammen mit den Variablen, die sogar unterschiedliche Namen haben, geändert. Im Sonderfall sind dies die Variablen i und j

Alles andere geht aus dem Hilfetext hervor.

Передача параметров - Функции - Основы языка - Справочник MQL4
Передача параметров - Функции - Основы языка - Справочник MQL4
  • docs.mql4.com
Передача параметров - Функции - Основы языка - Справочник MQL4