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

 
trader781:

Dann beantworten Sie bitte meine vorherige Frage

1) Schreiben eines Arrays von Strukturen

2) Übertragen auf andere Funktionen

3) Abrufen und Vergleichen von Elementen eines Arrays von Strukturen

4) Drucken einer Reihe von Strukturen

Es ist wichtig für mich, es in Form von Code zu schreiben, damit ich verstehe, wie es aussehen muss.

Das hängt ganz von der jeweiligen Aufgabe ab. Da die Aufgaben so unterschiedlich sein können, wie Sie wollen, was soll angezeigt werden?

Nun, ich werde es schreiben, ich werde meine Zeit verschwenden und was ich geschrieben habe, ist quadratisch. Und das Loch ist dreieckig. Und wo bringe ich dann den quadratischen an?

 
Artyom Trishkin:

Das hängt ganz von der jeweiligen Aufgabe ab. Da die Aufgaben so vielfältig sein können, wie Sie wollen, was soll gezeigt werden?

Nun, ich werde es schreiben, meine Zeit verschwenden, aber was ich geschrieben habe, ist spießig. Und das Loch ist dreieckig. Und wo bringe ich dann den quadratischen an?

Nehmen wir den Beitrag 699 und darüber

wie man dies an andere Funktionen weitergibt und ein Element in der Struktur mit dem vorherigen vergleicht

so kann ich eine beliebige Reihenfolge nehmen und alle Werte auf dem Drucker ausgeben

Der Unterschied besteht darin, dass es sich nicht um eine Zahl handelt und dass es andere Regeln für die Aufzeichnung gibt.

 
trader781:

Nehmen wir den Beitrag 699 und darüber

wie man dies an andere Funktionen weitergibt und das Strukturelement mit dem vorherigen vergleicht

und so kann ich eine beliebige Reihenfolge nehmen und alle Werte ausdrucken

Der Unterschied ist, dass es sich nicht um eine Zahl handelt und andere Schreibregeln gelten.

Sie müssen alle notwendigen Aufträge in einer Schleife durchlaufen.

Nachdem der nächste notwendige Auftrag ermittelt ist, erhöhen Sie die Matrix um 1 und tragen alle Daten zu diesem Auftrag in die neue Zelle ein. Die Array-Zelle selbst wird mit der Öffnungszeit des Auftrags gefüllt (wenn Sie nach geschlossenen Aufträgen suchen, mit der Schließzeit). Der Rest der Daten sollte in die Felder der Struktur geschrieben werden.

Nach dem Ende der Schleife sortieren Sie das Array in aufsteigender Reihenfolge der Werte.

Sie sollten dies zuerst tun. Über den Rest kann weiter diskutiert werden.

 
Vitalie Postolache:

Dies ist kein Problem, das in einem einzigen Zyklus gelöst werden kann.

Ich danke Ihnen.

 
Artyom Trishkin:
//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
struct myorder
  {
   int               Ticket;
   double            orderopenprice;
   int               ordertype;
   double            profit;
   double            stoploss;
   double            lot;
  };
myorder orders[][5];

int    i;
int    Magic=444;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   CalcOrders();

  }
//+------------------------------------------------------------------+
void CalcOrders()
  {
   int count1=-1;
   ArrayResize(orders,AccountInfoInteger(ACCOUNT_LIMIT_ORDERS),10);
   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
        {
         count1++;
         orders[count1][0].Ticket=OrderTicket();
         orders[count1][1].lot=OrderLots();
         orders[count1][2].orderopenprice=OrderOpenPrice();
         orders[count1][3].ordertype=OrderType();
         orders[count1][4].profit=OrderProfit();
         orders[count1][5].stoploss=OrderStopLoss();
        }

     }
   ArraySort(orders,WHOLE_ARRAY,0,MODE_ASCEND);

  }
//+------------------------------------------------------------------+
Dateien:
test.mq4  3 kb
 
trader781:

Ich habe Ihren Code in Ihren Beitrag eingefügt.

Wenn Sie jetzt anfangen, die Sache zu klären

  1. Warum haben Sie das Array der Strukturen zu einem mehrdimensionalen Array gemacht?
  2. Warum haben Sie die Größe des Struktur-Arrays in der Funktion CalcOrders() in"Maximal zulässige Anzahl der ausstehenden Aufträge" geändert? Wenn Sie Ihre Hilfe öffnen (was Sie immer tun sollten), werden Sie sehen, dass dieser Bezeichner(ACCOUNT_LIMIT_ORDERS) Null zurückgeben kann, was bedeutet, dass es keine Begrenzung für die Anzahl der anstehenden Aufträge gibt. Die Array-Größe sollte vor der Schleife Null sein.
  3. Warum erhöhen Sie die Größe des Arrays in der Schleife nicht?
 
Artyom Trishkin:

Ich habe Ihren Code in Ihren Beitrag eingefügt.

Wenn Sie jetzt anfangen, die Sache zu klären

  1. Warum haben Sie ein Feld von Strukturen zu einem mehrdimensionalen Feld gemacht?
  2. Warum ändern Sie die Größe des Struktur-Arrays in der Funktion CalcOrders() in"Maximal zulässige Anzahl aktiver schwebender Aufträge"? Wenn Sie Ihre Hilfe öffnen (was Sie immer tun sollten), werden Sie sehen, dass dieser Bezeichner(ACCOUNT_LIMIT_ORDERS) Null zurückgeben kann, was bedeutet, dass es keine Begrenzung für die Anzahl der anstehenden Aufträge gibt. Die Array-Größe sollte vor der Schleife Null sein.
  3. Warum erhöhen Sie die Größe des Arrays in der Schleife nicht?

1) dachte, dass die Parameternummer X in der Reihenfolge Y für die gegebene Aufgabe besser geeignet ist

2) Ich habe es gleich 50 oder 100 je nach Kontotyp, und nichts anderes

3) wenn alsocount1++; bei jedem Durchlauf zunimmt und das Feld seinen Wert erhält

 
trader781:

1) ist der Ansicht, dass die Parameternummer X der Ordnung Y für diese Aufgabe besser geeignet ist

2) Sie beträgt 50 oder 100, je nach Kontotyp, und sonst nichts.

3) wenn alsocount1++; bei jedem Durchlauf zunimmt und das Feld seinen Wert erhält

1. Wofür ist die Struktur dann?

2. Sie benötigen diesen Parameter für eine Reihe von "was ging und was geht"-Marktpositionen... Das Array vor der Schleife muss eine Größe von Null haben.

3. Das ist richtig. Das Array hat am Anfang eine Größe von Null. Mit jeder neu gefundenen Bestellung wird das Array so groß wie die Anzahl der benötigten Bestellungen.

 
Artyom Trishkin:

1) Wofür ist die Struktur dann?

2. Sie benötigen diesen Parameter für die Reihe der Marktpositionen "was ging und was geht". Das Array vor der Schleife muss eine Größe von Null haben.

3. Das ist richtig. Das Array hat am Anfang eine Größe von Null. Mit jeder neu gefundenen Bestellung wird das Array so groß wie die Anzahl der benötigten Bestellungen.

1) der Compiler wird sich beschweren, wenn die zweite Dimension nicht angegeben wird; es erscheint sofort die Meldung "specify class type, unknown parameters"

2) der Bot stirbt sofort nach dem Start mit der Meldung "Kritischer Fehler - Array außerhalb der Reichweite".

3) setzeint count1=-1; dann durchlaufe die Schleife. Was ist hier los?

 
trader781:

1) der Compiler wird sich beschweren, wenn die zweite Dimension nicht gesetzt ist

2) dann stirbt der Bot sofort beim Start mit "critical error array out of range"

3) setze einfachint count1=-1; Was ist hier falsch?

Es sagt Ihnen nur, dass eine der Dimensionen entfernt werden sollte. Sie deklarieren ein eindimensionales Array und wollen es in ein zweidimensionales Array umwandeln. Was werden Sie am Ende bekommen? Natürlich wird der Compiler eine Fehlermeldung ausgeben.

2. Sie müssen das Array in der Schleife richtig füllen, und nicht nur eine Variable mit zufälliger Größe angeben und dann etwas mit zufälliger Größe hineinschieben.

3. Sie sind derjenige, der die Variable auf -1 setzt. Und das Array muss vor der Schleife die Größe Null haben. Was verstehst du nicht?

Lassen Sie uns ein Assoziationsspiel spielen:

  • Stellen Sie sich vor, Sie haben einen leeren Luftballon (leeres Feld), der kein internes Volumen (keine Feldgröße) hat. In diese Sprechblase (im Array) wollen Sie die Münzen (die gewünschten Aufträge) legen. Hier vergrößert jede Münze, sobald Sie entscheiden, dass sie in den Ballon passt (jede gefundene gewünschte Reihenfolge), das Innenvolumen des Ballons (nur die Münze selbst dehnt den Ballon aus, und Sie müssen es selbst tun - vergrößern Sie das Feld um 1 und stopfen Sie eine Reihenfolge hinein).
    Am Ende, wenn du alle Münzen gefunden und in den Ball gestopft hast, wird dieser nicht entleert - sein inneres Volumen wurde durch die Münzen gedehnt (am Ende des Suchzyklus wird die Größe des Feldes gleich der Anzahl der gefundenen notwendigen Aufträge sein, da du die Größe des Feldes mit jedem gefundenen notwendigen Auftrag um 1 erhöht hast).

    Stellen Sie sich nun vor, dass Sie Ihre Münzen anfangs nicht in eine Kugel stecken, die aus Gummi ist und ihre Größe verändern kann, sondern in eine kleine Spardose, die eine begrenzte Größe hat (Sie haben die Größe des Feldes anfangs festgelegt und sie nicht weiter vergrößert). Was wird geschehen? Nicht alle Münzen passen in das Sparschwein. Der Ballon wird.

Hier ist eine Assoziation für Sie.
Grund der Beschwerde: