Helfen Sie mir, das Programmieren zu lernen.

 

Wie sammle und verwende ich Informationen über den Handel? Ich muss Informationen über alle EA-Positionen, deren Volumen, Gewinn, Typ und Eröffnungskurs sammeln. Und dann verweisen Sie auf Informationen über die jüngste Position oder die größte Position. Ich finde es schwierig, in Arrays zu schreiben.

1. Ist es überhaupt notwendig, sich mit Arrays zu beschäftigen?

2. Ist es besser, ein Array von Strukturen oder verschiedene Arrays zu verwenden?

3. Wozu brauche ich ein dynamisches Array, wenn ich sowieso Speicher zuweisen muss? Ist es nicht einfacher, ein statisches Array zu verwenden? Oder können wir nicht auf einen dynamischen Index verzichten, weil er rückwärts indiziert werden kann?


Beispielcode ohne oop, weil ich dieses Konstrukt nicht einmal schreiben konnte, wenn es Ihnen nichts ausmacht, danke.

 
pribludilsa:

Wie sammle und verwende ich Informationen über den Handel? Ich muss Informationen über alle EA-Positionen, deren Volumen, Gewinn, Typ und Eröffnungskurs sammeln. Und dann verweisen Sie auf Informationen über die jüngste Position oder die größte Position. Ich finde es schwierig, in Arrays zu schreiben.

1. Ist es überhaupt notwendig, mit Arrays zu arbeiten?

2. Ist es besser, ein Array von Strukturen oder verschiedene Arrays zu verwenden?

3. Wozu brauche ich ein dynamisches Array, wenn ich sowieso Speicher zuweisen muss? Ist es nicht einfacher, ein statisches Array zu verwenden? Oder können wir nicht auf einen dynamischen Index verzichten, weil er rückwärts indiziert werden kann?


Beispielcode ohne oop, weil ich dieses Konstrukt nicht einmal schreiben könnte, wenn es nicht zu viel Mühe macht, danke.

Warum überhaupt etwas bauen? Sie müssen die Positionen in einer Schleife durchlaufen und die Informationen verarbeiten - und Sie müssen sie nicht zusammenstellen. Alles, was Sie zum gleichen Zeitpunkt sammeln, ist veraltete Information.

 

1. Beim Umgang mit der Handelsgeschichte wird in der Regel auf Arrays verzichtet. Das ist ungefähr so wie im Beispiel:https://www.mql5.com/ru/docs/trading/historyselect. Es lohnt sich, alle Funktionen in der Spalte auf der linken Seite des Links (und alle Beispiele dort) zu erkunden.

2. Eine Reihe von Strukturen ist sehr praktisch. Aber die eingebauten Funktionen, die auf mehrdimensionale Arrays angewendet werden können - ArraySort() usw. - funktionieren damit nicht.

(3) Wenn Sie sicher sind, dass die anfänglich angegebene Array-Größe ausreicht, können Sie auch statische Arrays verwenden. Wenn ihre Größe angemessen ist.

 
Vladimir Karputov:

Warum überhaupt etwas sammeln? Sie müssen die Elemente durchgehen und die Informationen verarbeiten - und Sie brauchen sie nicht zu sammeln. Alles, was Sie zur gleichen Zeit sammeln, ist veraltete Information.

Ich versuche, ein Raster ohne ein Oop zu schreiben. Also habe ich beschlossen, erst einmal zu üben, und ich kann scheinbar keinen Eintrag in das Array erstellen. Oder brauche ich es vielleicht gar nicht? Wie kann man das am besten machen? Nun, ich habe in einer Schleife gedacht. So habe ich angefangen.
int OnInit()
{
ENUM_POSITIONS_TYPE ar [1000]; //проинициализирую нулем еще, просто я не копирую, а вручную всё пишу, и некоторые очевидные куски не пишу.
 return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{}
void OnTick()
{
for(int index=PositionsTotal()-1; index>=0; index--)
{
ulong ticket=PositionGetTicket(index);
PositionSelectByTicket(ticket); // И вот я готов вызывать функции для выуживания данных, только я не знаю //как их вписывать в массив. 
 
Dmitry Fedoseev:

1. Beim Umgang mit der Handelsgeschichte wird in der Regel auf Arrays verzichtet. Das ist ungefähr so wie im Beispiel:https://www.mql5.com/ru/docs/trading/historyselect. Es lohnt sich, alle Funktionen in der Spalte auf der linken Seite des Links (und alle Beispiele dort) zu erkunden.

2. Eine Reihe von Strukturen ist sehr praktisch. Aber die eingebauten Funktionen, die auf mehrdimensionale Arrays angewendet werden können - ArraySort() usw. - funktionieren damit nicht.

(3) Wenn Sie sicher sind, dass die anfänglich angegebene Array-Größe ausreicht, können Sie auch statische Arrays verwenden. Wenn ihre Größe angemessen ist.

Nicht ich bin es, der die Geschichte schreibt, sondern die Positionen, die ich analysieren möchte, sind offen. Wie kann man das am besten tun?
 
Ich schreibe ein Grid ohne OOP. Ich muss herausfinden, welche der offenen Positionen die größte ist und um welche Art von Geschäft es sich handelt: Kauf oder Verkauf. Ich verstehe, dass ich zunächst Daten von jeder Position in der Schleife sammeln, sie in ein Array schreiben und dann das Array analysieren oder das jüngste Element nehmen muss, wenn es dynamisch mit umgekehrter Indexierung ist.
 
pribludilsa:
Es geht nicht um Geschichte, sondern um die Analyse von offenen Positionen. Wie kann man das am besten tun?

Fast dasselbe, aber ohne HistorySelect(). Wir beginnen mit der Funktion PositionsToatal() und untersuchen dann über diesen Link alle Funktionen, die mit Position

 
pribludilsa:
Ich schreibe ein Grid ohne OOP. Ich muss wissen, welche der offenen Positionen die größte ist, und zwar durch welche Art von Geschäften, Kauf oder Verkauf. Ich verstehe, dass ich zunächst Daten von jeder Position in der Schleife sammeln, sie in ein Array schreiben und dann das Array analysieren oder das neueste Element nehmen sollte, wenn es dynamisch mit umgekehrter Indexierung ist.

Sie müssen die Positionen nicht nach und nach aufstellen und nach Höhen und Tiefen Ausschau halten.

 
Dmitry Fedoseev:

Sie brauchen nicht durch das Feld zu gehen und nach dem Maximum und Minimum zu suchen.


Ich danke Ihnen. Aber können Sie uns ein kurzes Beispiel nennen? Wir müssen es aufschreiben, um es zu vergleichen, nicht wahr? Und wo sonst als in einem Array aufschreiben? Ich kann nicht herausfinden, wie man das macht, ohne zu schreiben. Wir arbeiten mit einer Position in einem Schleifendurchlauf. Wie können wir eine andere Position vergleichen, wenn sie sich in einem anderen Schleifendurchlauf befindet?

 
pribludilsa:

Ich danke Ihnen. Können Sie uns nur ein kurzes Beispiel nennen? Wir müssen sie aufschreiben, um sie vergleichen zu können, nicht wahr? Und wo anders als in einem Array schreiben? Ich kann nicht herausfinden, wie man das macht, ohne zu schreiben. Wir arbeiten mit einer Position in einem Schleifendurchlauf. Wie können wir eine andere Position vergleichen, wenn sie sich in einem anderen Schleifendurchlauf befindet?

int Magic=123;

double maxBuyPrice=0;
ulong maxBuyTicket=0;
double minSellPrice=DBL_MAX;
ulong minSellTicket=0;   

for(int i=0;i<PositionsTotal();i++){
   ulong ticket=PositionGetTicket(i);
   if(ticket!=0){
      long magic=PositionGetInteger(POSITION_MAGIC);
      string symbol=PositionGetString(POSITION_SYMBOL);
      if(magic==Magic && symbol==Symbol()){
         long type=PositionGetInteger(POSITION_TYPE);
         if(type==POSITION_TYPE_BUY){
            if(PositionGetDouble(POSITION_PRICE_OPEN)>maxBuyPrice){
               maxBuyPrice=PositionGetDouble(POSITION_PRICE_OPEN);
               maxBuyTicket=ticket; // тут можно и другие данные позиции запоминать в переменные
            }
         }
         else if(type==POSITION_TYPE_SELL){
            if(PositionGetDouble(POSITION_PRICE_OPEN)<minSellPrice){
               minSellPrice=PositionGetDouble(POSITION_PRICE_OPEN);
               minSellTicket=ticket; // и тут
            }      
         }
      }
   }
}

if(maxBuyTicket!=0){
   
}
if(minSellTicket!=0){

}
 
Dmitry Fedoseev:

Vielen Dank für dieses Beispiel.

      long magic=PositionGetInteger(POSITION_MAGIC);
      string symbol=PositionGetString(POSITION_SYMBOL);
      if(magic==Magic && symbol==Symbol())

Ich dachte, ich wäre der Einzige, der es so formuliert, anstatt "Ich weiß es nicht" zu schreiben.

      if(PositionGetInteger(POSITION_MAGIC)==Magic && PositionGetString(POSITION_SYMBOL)==Symbol())

hz bedeutet "Ich würde es gerne wissen"... verstehen Sie mich nicht falsch...


ps; Es hilft, bei der Fehlersuche im Programm den Überblick zu behalten.

Grund der Beschwerde: