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

 
Vitalie Postolache:


Wenn man es mit dem Gleichgewicht vergleicht, dann ist es so:

Ich danke Ihnen.

 
trader781:

OK, dann, wie ich es verstehe, erhalten wir drei verschiedene benutzerdefinierte Funktionen mit der Rückkehr der richtigen (wenn wir für drei verschiedene Parameter suchen)

ArraySort

dann

ArrayBsearch nach der richtigen Nummer

und wie geht man dann damit um?

Genau der Übergang von einem Array zu einem Strukturelement

Du verstehst das nicht.

Sie müssen eine einzige Funktion erstellen, die das global deklarierte Array auffüllt und sortiert. Das Array muss als Referenz an die Funktion übergeben werden.

Und Sie brauchen zusätzliche Funktionen, die die benötigten Daten aus diesem Array herausnehmen.

 
Artyom Trishkin:

Du verstehst das nicht.

Sie müssen eine einzige Funktion erstellen, die das global deklarierte Array füllt und sortiert. Das Array muss als Referenz an die Funktion übergeben werden.

Und Sie brauchen zusätzliche Funktionen, die die Daten, die Sie benötigen, aus diesem Array übernehmen.

Ok, können Sie demonstrieren, wie man etwas aus einem Array von Strukturen nimmt? sagen wir gefüllt und sortiert

wie man durch Verweis und Schreiben überträgt.

 

Bitte teilen Sie mir mit, wie der Zustand aussehen soll. Wenn ein Stop-Loss ausgelöst wird, wird das Lot mit 2 multipliziert, und wenn der nächste Auftrag einen Take-Profit auslöst, würde das Lot zum ursprünglichen Lot zurückkehren, das vor dem Stop-Loss lag.

Ich verstehe es so, aber ich weiß nicht, wie es weitergehen soll...

for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
   if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
      {
      if (OrderMagicNumber()==magic)
         {
         if (OrderStopLoss()==OrderClosePrice())
            {
            lot=lot*4;
            }
         }
      }

   } 

 

Eine weitere Frage: Was habe ich im Block "Aufträge löschen" falsch geschrieben? Es werden nicht immer Aufträge gelöscht.

OrderDelete error 4108
market order #1 cannot be deleted

if (Hour()==23 && Minute()==59)            
         {
         for(int n=OrdersTotal()-1;n>=0;n--)
            {
            if(OrderSelect(n,SELECT_BY_POS))
               {
               if(OrderMagicNumber()==magic)
                  {
                  bool del=OrderDelete(OrderTicket());
                  if (del==true)
                     {
                     otl_b=0; otl_s=0; //обнуляем переменные отложек
                     }
                  
                  }  
               }  
            }
         }
 
wishmast:

Noch eine Frage: Was habe ich falsch in den Block zum Löschen von Aufträgen geschrieben? Es werden nicht immer Aufträge gelöscht, im Log steht

OrderDelete error 4108
market order #1 cannot be deleted

if (Hour()==23 && Minute()==59)            
         {
         for(int n=OrdersTotal()-1;n>=0;n--)
            {
            if(OrderSelect(n,SELECT_BY_POS))
               {
               if(OrderMagicNumber()==magic)
                  {
                  bool del=OrderDelete(OrderTicket());
                  if (del==true)
                     {
                     otl_b=0; otl_s=0; //обнуляем переменные отложек
                     }
                  
                  }  
               }  
            }
         }


Sie versuchen, einen Marktauftrag zu löschen. Diese werden nicht gelöscht, sondern mit der Funktion OrderClose() geschlossen. Damit die Schleife korrekt gelöscht oder geschlossen werden kann, müssen wir den Auftrag nach seinem Typ unterscheiden.

if(OrderType()<=OP_SELL) - für Marktaufträge, if(OrderType()>OP_SELL) - für schwebende Aufträge.

 

Es gibt eine Funktion namensCHARTEVENT_MOUSE_MOVE

Frage: Funktioniert das auch auf mobilen Geräten, die keine Maus haben?

 
wishmast:

Bitte teilen Sie mir mit, wie der Zustand aussehen soll. Wenn ein Stop-Loss ausgelöst wird, wird das Lot mit 2 multipliziert, und wenn der nächste Auftrag einen Take-Profit auslöst, würde das Lot zum ursprünglichen Lot zurückkehren, das vor dem Stop-Loss lag.

Ich verstehe es so, aber ich weiß nicht, wie es weitergehen soll...

for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
   if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
      {
      if (OrderMagicNumber()==magic)
         {
         if (OrderStopLoss()==OrderClosePrice())
            {
            lot=lot*4;
            }
         }
      }

   } 

Wenn Sie es schnell gemacht haben, wird der letzte Verlustauftrag angezeigt, und ich denke, Sie werden verstehen, was damit zu tun ist und welche Parameter zu korrigieren sind.
Dateien:
last1.mq4  4 kb
 
wishmast:

Bitte teilen Sie mir mit, wie der Zustand aussehen soll. Wenn ein Stop-Loss ausgelöst wird, wird das Lot mit 2 multipliziert, und wenn der nächste Auftrag einen Take-Profit auslöst, würde das Lot zum ursprünglichen Lot zurückkehren, das vor dem Stop-Loss lag.

Ich verstehe es so, aber ich weiß nicht, wie es weitergehen soll...

for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
   if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
      {
      if (OrderMagicNumber()==magic)
         {
         if (OrderStopLoss()==OrderClosePrice())
            {
            lot=lot*4;
            }
         }
      }

   } 

Die Lösung dieses Problems hängt von der vollständigen Logik des Expert Advisors ab. Sie können das Auslösen von Stoploss oder Takeprofit anhand des Kommentars nachvollziehen.

  if(StringFind(OrderComment(),"sl")>=0)// сработал стоплосс
  if(StringFind(OrderComment(),"tp")>=0)// сработал тейкпрофит

...

 
Artyom Trishkin:

Du verstehst das nicht.

Sie müssen eine einzige Funktion erstellen, die das auf globaler Ebene deklarierte Array füllt und sortiert. Das Array muss als Referenz an die Funktion übergeben werden.

Und Sie brauchen zusätzliche Funktionen, die die benötigten Daten aus diesem Array herausnehmen.

Artem, du irrst dich. Das auf globaler Ebene deklarierte Array ist in allen Teilen des Programms sichtbar, und man muss es nicht irgendwo von irgendwoher übergeben. Es wird einfach an einer Stelle im Programm ausgefüllt, an einer anderen sortiert und an einer dritten gelesen, das spielt keine Rolle.
Grund der Beschwerde: