Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 220

 
Nikolai Semko #:

bedeutet, dass Sie im Kampfmodus jeden grafischen Unsinn ohne Minimierung abschalten sollten. Lassen Sie die Grafik einfrieren, wenn das Fenster sichtbar, aber nicht aktiv ist.
Und es ist einfacher und besser, so scheint es mir, alle Grafiken automatisch auszuschalten und zu entfernen , wenn die Maus inaktiv ist, z. B. 1 Minute. Sobald die Maus aktiv ist, werden die Grafiken wieder angezeigt.

Das ist ganz und gar nicht gut. Hier sehen Sie sich das Diagramm 2 Minuten lang an, und das Diagramm ist vor einer Minute gestorben. Wozu ist sie dann nötig?

 
Vitaly Muzichenko #:

Das ist ganz und gar nicht gut. Sie schauen sich das Diagramm zwei Minuten lang an, und das Diagramm ist vor einer Minute gestorben. Wozu ist es dann gut?

Natürlich brauchen Sie für diesen Modus einen "Auto-hide"-Schalter.

 
Nikolai Semko #:

bedeutet, dass im Kampfmodus alle grafischen Overheads ohne Minimierung ausgeschaltet werden müssen.

Der Bildschirm des Diagramms selbst wird ohne Minimierung gezeichnet. Auf erfahrene Weise wurde der Modus des Terminalbetriebs gefunden, wenn VPS minimal belastet wird.

 

Ich hoffe, ich schreibe im richtigen Thema.

1. Gleichzeitige Durchführung eines Tests mit mehreren Paaren und mehreren Währungen

Frage: Wie erhalte ich das Ergebnis für jedes Paar?

2Wir führen die Optimierung für mehrere Paare gleichzeitig durch

Frage: Wie erhält man ein Ergebnis für jedes Paar?

---

Vor einiger Zeit, etwa vor 3 Jahren, wurde versprochen, dies in den Tester aufzunehmen, aber bis jetzt ist nichts geschehen. Oder finde ich sie nicht?

 

Es gibt eine legale Möglichkeit, die Arbeit von Market Advisor oder Signal Service zu unterbinden, zum Beispiel. Sagen wir, es gibt keinen Zugang zu ihnen aus einem oder anderen Grund - VPS.

Die Methode funktioniert, wenn es eine Einschränkung auf dem Handelsserver gibt. Sie müssen nur alles mit schwebenden Aufträgen füllen, aber vorsichtig, sonst wird es unmöglich sein, die offenen Positionen zu schließen.


Vielleicht schreibt jemand ein solches Notfallmarktprodukt...

 

MQL5. MESSAGE BOX dupliziert Meldungen im Protokoll "Experten". Bitte teilen Sie mir mit, wie ich es deaktivieren kann. ***

Ich danke Ihnen!

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Merkmale der Sprache mql5, Feinheiten und Tricks

fxsaber, 2017.09.22 20:43

POSITION_TIME_UPDATE ist nur für die Änderung des Loses einer Position relevant. Zum Beispiel eine teilweise Schließung einer Position auf einem beliebigen Konto oder ein Netting-Add-on.

Änderungen der SL/TP-Ebenen haben keinen Einfluss auf POSITION_TIME_UPDATE.

Anders ausgedrückt: POSITION_TIME_UPDATE ist nur von Änderungen betroffen, die sich in der Trade History - Trades widerspiegeln. Die SL/TP-Stufen gelten nicht für solche Änderungen, so dass sie nicht betroffen sind.

Es kann Situationen geben, in denen POSITION_TIME_UPDATE_MSC == POSITION_TIME_UPDATE trotz Änderungen der Losgröße.

 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von Neulingen zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes" verschoben.
 
fxsaber #:
Praktisches Sortieren einer Reihe von Strukturen


Anmeldung


Ergebnis

Hallo und danke fürs Teilen!

Das wäre perfekt, wenn es funktionieren würde. Wenn Ihr Code jedoch in ein .mq5-Skript eingefügt und ausgeführt wird, treten leider die folgenden Fehler auf:

  • Template-Deklarationen sind in lokalen Klassen nicht erlaubt ArraySortStruct.mq5 87 4
  • (nach geringfügiger Änderung Ihres Codes): Schablonendeklarationen sind nur auf globaler, Namespace- oder Klassenebene zulässig ArraySortStruct.mq5 90 4 )

Könnten Sie dies bitte beheben? Für Sie ist es wahrscheinlich einfach, während ich nicht wüsste, wo ich anfangen sollte :-)

 
Bodolino #:

Hallo und danke fürs Teilen!

Das wäre perfekt, wenn es funktionieren würde. Wenn Ihr Code jedoch in ein .mq5-Skript eingefügt und ausgeführt wird, treten leider die folgenden Fehler auf:

  • Template-Deklarationen sind in lokalen Klassen nicht erlaubt ArraySortStruct.mq5 87 4
  • (nach geringfügiger Änderung Ihres Codes): Schablonendeklarationen sind nur auf globaler, Namespace- oder Klassenebene zulässig ArraySortStruct.mq5 90 4 )

Könnten Sie dies bitte beheben? Für dich ist es wahrscheinlich einfach, während ich nicht wüsste, wo ich anfangen sollte :-)

Ich bin mir nicht sicher, wie ich die Funktionalität (Unterfeld und Methode) und die Benutzerfreundlichkeit erhalten kann. Vielleicht ist das hier genau das Richtige für Sie.

// Сортировка массива структур и указателей на объекты 
по полю.
#define  ArraySortStruct_Define(TYPE, FIELD)                                      \
namespace TYPE##FIELD                                                            \
{                                                                                \
  class SORT                                                                     \
  {                                                                              \
  private:                                                                       \
    template <typename T>                                                        \
    static void Swap( T &Array[], const int i, const int j )                     \
    {                                                                            \
      const T Temp = Array[i];                                                   \
                                                                                 \
      Array[i] = Array[j];                                                       \
      Array[j] = Temp;                                                           \
                                                                                 \
      return;                                                                    \
    }                                                                            \
                                                                                 \
    template <typename T>                                                        \
    static int Partition( T &Array[], const int Start, const int End )           \
    {                                                                            \
      int Marker = Start;                                                        \
                                                                                 \
      for (int i = Start; i <= End; i++)                                         \
        if (Array[i].##FIELD <= Array[End].##FIELD)                              \
        {                                                                        \
          SORT::Swap(Array, i, Marker);                                          \
                                                                                 \
          Marker++;                                                              \
        }                                                                        \
                                                                                 \
       return(Marker - 1);                                                       \
    }                                                                            \
                                                                                 \
    template <typename T>                                                        \
    static void QuickSort( T &Array[], const int Start, const int End )          \
    {                                                                            \
      if (Start < End)                                                           \
      {                                                                          \
        const int Pivot = Partition(Array, Start, End);                          \
                                                                                 \
        SORT::QuickSort(Array, Start, Pivot - 1);                                \
        SORT::QuickSort(Array, Pivot + 1, End);                                  \
      }                                                                          \
                                                                                 \
      return;                                                                    \
    }                                                                            \
                                                                                 \
  public:                                                                        \
    template <typename T>                                                        \
    static void Sort( T &Array[], int Count = WHOLE_ARRAY, const int Start = 0 ) \
    {                                                                            \
      if (Count == WHOLE_ARRAY)                                                  \
        Count = ::ArraySize(Array);                                              \
                                                                                 \
      SORT::QuickSort(Array, Start, Start + Count - 1);                          \
                                                                                 \
      return;                                                                    \
    }                                                                            \
  };                                                                             \
}

#define  ArraySortStruct(TYPE, ARRAY, FIELD) TYPE##FIELD::SORT::Sort(ARRAY)


Anwendung.

ArraySortStruct_Define(MqlRates, open)
ArraySortStruct_Define(MqlRates, high)
ArraySortStruct_Define(MqlRates, time)

void OnStart()
{
  MqlRates Rates[];
  
  CopyRates(_Symbol, PERIOD_CURRENT, 0, 5, Rates); // Взяли бары
  
  Print("\nБары без сортировки - как получили.");
  ArrayPrint(Rates);
  
  Print("\nСортируем по open-цене.");
  ArraySortStruct(MqlRates, Rates, open);
  ArrayPrint(Rates);

  Print("\nСортируем по high-цене.");
  ArraySortStruct(MqlRates, Rates, high);
  ArrayPrint(Rates);

  Print("\nСортируем по времени.");
  ArraySortStruct(MqlRates, Rates, time);
  ArrayPrint(Rates);
}