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

 
Anatoliy Markov #:

Wir danken Ihnen für Ihre Teilnahme. Die Aufgabenstellung ist für mich klar. Ich hänge bei der Umsetzung fest...

Ich habe es mit den Kommentaren versucht. Bis zur zweiten Gruppe nummeriert er richtig. Beim dritten Mal gibt er einen Kommentar ab, obwohl die erste Gruppe noch auf dem Markt ist. Es geht nicht darum, die Zahlen zu vervielfachen, sondern die frei gewordenen Zahlen zu übernehmen. Ich hoffe, ich habe mich klar ausgedrückt).

Nicht ganz klar, aber trotzdem die Schaltfläche zum Einfügen von Code verwenden


oder ALT+s

 
void OnTick()
{
  //---
    
    for(int a=1; a<10; a++)
     {
       comment="";
       for(int i=0; i<OrdersTotal(); i++)
         {
          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
             if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
               {    
                  if (OrderComment()==IntegerToString(a)) continue; 
                  else
                  {
                   comment=IntegerToString(a);
                   break;                  
                  } 
               }
            } 
         } 
        if(comment!="") break; 
     }
    if (CountOfBuy(magic)<1 && CountOfSell(magic)<1) comment="1";
  //---
}
Да, так более информативно. Т.е. этот незамысловатый модуль должен давать коммент для 
последующего присвоения ордеру. Когда открыта группа с комментом 1, он дает коммент 2 (это правильно). 
Когда открыта 2-я группа, опять дает 1. Не могу понять.
 

Guten Abend zusammen!

Ich habe eine Funktion geschrieben, die feststellt, ob ein schwebender Auftrag bereits gesetzt ist, aber die Funktion funktioniert aus irgendeinem Grund nicht. Können Sie uns bitte sagen, wo der Fehler liegt? Mit freundlichen Grüßen, Vladimir.

//+------------------------------------------------------------------+
//| Функция IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если в советнике уже установлен отложенный    |
//| ордер, в противном случае возвращает ложь.                       |
//| Применим для функции с типом данных bool, чтобы хранить          |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong  order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенного ордера нет, значит и у нашего советника отложенного ордера нет */
      if(OrderSelect(i)==false)
         return false; // поэтому возвращаем ложь
     }
   /* если отложенный ордер уже есть и его мэджик совпадает с мэджиком нашего советника */
   if(OrderGetInteger(ORDER_MAGIC)==Magic_Number)
      return true;  // то возвращаем истину
   /* в противном случае, если отложенный ордер уже есть, но его мэджик не совпадает с мэджиком нашего советника */
   else
      return false; // значит это чья-то чужая позиция, поэтому возвращаем ложь
  }
 
MrBrooklin ein schwebender Auftrag bereits gesetzt ist, aber die Funktion funktioniert aus irgendeinem Grund nicht. Können Sie uns bitte sagen, wo der Fehler liegt? Mit freundlichen Grüßen, Vladimir.

ICH HABE DEN FEHLER SELBST GEFUNDEN!!!

Hier ist ein normal funktionierender Code. Kann für jemanden nützlich sein. Mit freundlichen Grüßen, Vladimir.

//+------------------------------------------------------------------+
//| Функция IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если в советнике не установлен отложенный     |
//| ордер, в противном случае возвращает ложь.                       |
//| Применим для функции тип данных bool, чтобы хранить              |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong  order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенного ордера нет, значит и у нашего советника отложенного ордера нет */
      if(OrderSelect(i)==false)
         return true; // поэтому возвращаем значение истина
      else // в противном случае
         return false; // возвращаем значение ложь
     }
   /* если отложенный ордер уже есть и его мэджик совпадает с мэджиком нашего советника */
   if(OrderGetInteger(ORDER_MAGIC)==Magic_Number)
      return true;  // то возвращаем истину
   /* в противном случае, если отложенный ордер уже есть, но его мэджик не совпадает с мэджиком нашего советника */
   else
      return false; // значит это чужой ордер, поэтому возвращаем значение ложь
 

Bitte teilen Sie mir mit, wie ich das organisieren kann oder wo ich suchen muss:

Um die Berechnung von Balken nicht durchführen zu müssen, wurden hier Puffer erfunden. Bei jedem neuen Tick wird nur der letzte Balken überprüft (so wie ich es verstehe). Wenn ein neuer Balken erscheint, beginnt die Berechnung nur mit diesem Balken.

Dank des Puffers werden die Linien nicht über den gesamten Verlauf neu gezeichnet, sondern es wird ein zusätzliches Segment an der letzten Kante hinzugefügt. Insgesamt gibt es 8 Puffer.

Was ist, wenn ich eine Berechnung hundert Mal durchführen muss (sagen wir 100 Mal, um eine Linie zu zeichnen, wobei nur eine Variable geändert wird) und dann das beste Ergebnis zeichnen muss? Und bei einem neuen Tick oder Timer machen Sie das Gleiche, aber mit der bestehenden "Geschichte" der Ergebnisse (Zeichnungen). Wo und wie speichere ich diese Informationen, damit ich nicht den gesamten Verlauf neu berechnen muss?

Oder, einfacher ausgedrückt, wie kann die Anzahl der Puffer im Indikator erhöht werden? Vielleicht schreiben Sie sie separat in eine Datei? Was ist besser
 
Ivan Butko #:

Bitte teilen Sie mir mit, wie ich das organisieren kann oder wo ich suchen muss:

Um die Berechnung von Balken nicht durchführen zu müssen, wurden hier Puffer erfunden. Bei jedem neuen Tick wird nur der letzte Balken überprüft (so wie ich es verstehe). Wenn ein neuer Balken erscheint, beginnt die Berechnung nur mit diesem Balken.

Dank des Puffers werden die Linien nicht über den gesamten Verlauf neu gezeichnet, sondern es wird ein zusätzliches Segment an der letzten Kante hinzugefügt. Insgesamt gibt es 8 Puffer.

Was ist, wenn ich eine Berechnung hundert Mal durchführen muss (sagen wir 100 Mal, um eine Linie zu zeichnen, wobei nur eine Variable geändert wird) und dann das beste Ergebnis zeichnen muss? Und bei einem neuen Tick oder Timer machen Sie das Gleiche, aber mit der bestehenden "Geschichte" der Ergebnisse (Zeichnungen). Wo und wie speichere ich diese Informationen, damit ich diese Berechnungen nicht für die gesamte Historie durchführen muss?

Oder, einfacher ausgedrückt, wie kann ich die Anzahl der Puffer in einem Indikator erhöhen? Vielleicht separat in eine Datei schreiben? Was ist der beste Weg, um

Die Indikatoren verfügen über 512 Puffer.

 
Artyom Trishkin #:

Die Indikatoren verfügen über 512 Puffer.

Oh, wow. Ich danke Ihnen. Ich habe wohl an der falschen Stelle gesucht. Ich werde es weiter versuchen.

 
MrBrooklin #:

FEHLER VON MIR SELBST GEFUNDEN!!!

Hier ist ein normal funktionierender Code. Kann für jemanden nützlich sein. Mit freundlichen Grüßen, Vladimir.

Das ist für niemanden von Nutzen. Ihr Code weist grobe Fehler auf. Und es hat keinen Sinn, sie zu korrigieren.

Sie machen sich nicht einmal die Mühe, die Grundlagen der Sprache zu lernen und versuchen, etwas zu schreiben.

Entweder man nimmt es ernst oder man gibt es auf.

 
Koldun Zloy #:

Niemand kann es benutzen. Ihr Code weist grobe Fehler auf. Und es hat keinen Sinn, sie zu korrigieren.

Sie machen sich nicht einmal die Mühe, die Grundlagen der Sprache zu lernen, und Sie versuchen, etwas zu schreiben.

Entweder Sie machen ernst oder Sie geben es auf.

Guten Morgen! Ja, Sie haben völlig Recht. Wir müssen aufhören, diese sinnlose Sache mit den

Alle Fragen von Neulingen zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes

und hier auf Hilfe warten.

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin #:
Guten Morgen! Ja, Sie haben völlig Recht. Sie müssen mit dieser sinnlosen Angelegenheit aufhören, d.h. Sie müssen sich bei der

Alle Fragen von Neulingen zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes

und warten hier auf Hilfe.

Mit freundlichen Grüßen, Vladimir.

Sie haben Recht, geben Sie es auf.

Sie haben nicht einmal verstanden, was ich auf Russisch geschrieben habe.

Warum wollen Sie in die Programmierung einsteigen?

Grund der Beschwerde: