Fehler, Irrtümer, Fragen - Seite 2677

 
fxsaber:

Freigeben, natürlich. Das Terminal selbst speichert Ticks in seinem Cache, die ich im Betrieb nicht benötige.

Es ist besser für mich, diese Zecken später bei Kälte wieder aufzuziehen. Sie benötigen einen Mechanismus zur "Abkühlung" des Terminals.

Ich habe es nicht bemerkt.

void OnStart()
  {
   Print("используется памяти до закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   MqlTick items[];
   ulong t0=GetMicrosecondCount();
   uint    count=CopyTicks(Symbol(),items,COPY_TICKS_INFO,0,100000000);
   t0=GetMicrosecondCount()-t0;
   Print ("Загружено за "+string(t0/1000)+" миллисекунд "+ (string)count+ " тиков");
   Print("используется памяти после закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   ArrayFree(items);
   Print("используется памяти после ArrayFree: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
  }


SZY Das Traurige daran ist, dass die Ticks im Speicher ungepackt mit 60 Byte pro Tick gespeichert werden. Könnte leicht 5 Mal gepackt werden (~12 Bytes pro Tick).

 
Stanislav Korotky:

Es ist besser, das Herunterladen automatisch durchzuführen, wie bei CopyRates.

In diesem Fall ist der Zeitrahmen unbekannt. Der Download wird durch eine Periodensymbolanforderung eingeleitet.

Überlegen Sie, was getan werden kann

 
Nikolai Semko:

nicht bemerkt.

Sie müssen sich ansehen, was das Terminal verbraucht.

void OnStart()
  {
//   Print("используется памяти до закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти до закачки истории: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
   MqlTick items[];
   ulong t0=GetMicrosecondCount();
   uint    count=CopyTicks(Symbol(),items,COPY_TICKS_INFO,0,1 e7);
   t0=GetMicrosecondCount()-t0;
   Print ("Загружено за "+string(t0/1000)+" миллисекунд "+ (string)count+ " тиков");
//   Print("используется памяти после закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти после закачки истории: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
   ArrayFree(items);
//   Print("используется памяти после ArrayFree: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти после ArrayFree: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
  }


Das Ergebnis befindet sich auf einem Terminal, das schon lange in Betrieb ist. Es laufen keine EAs/Indikatoren. Zwei Diagramme, M1-Balken nur für das laufende Jahr.

используется памяти до закачки истории: 1043 Mb
Загружено за 11223 миллисекунд 10000000 тиков
используется памяти после закачки истории: 1675 Mb
используется памяти после ArrayFree: 1102 Mb

60Mb wurden noch nicht freigegeben. Ein leeres Terminal verbraucht mehr als ein Gigabyte. Die einzige Möglichkeit, den Verbrauch zu senken, besteht darin, das Terminal neu zu laden.

 
Sergey Dzyublik:

Guten Tag, ich danke Ihnen vielmals.
Ich habe den new-Operator bisher nicht verwendet, weil er logischerweise langsamer sein muss als ArrayResize mit reserviertem Speicher.
Aber ich bin beeindruckt von den erzielten Ergebnissen, es stellt sich heraus, dass es umgekehrt ist, die native Array über neue Operator ist schneller.

MT5 (Build 2363):

Freigegeben in beta 2364 (leider hat es einen Compilerfehler für new T() innerhalb der Vorlage)

Hier sind die Protokolle Ihres Skripts:

2020.03.19 10:39:45.784 Test (EURUSD,H1)        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
2020.03.19 10:39:46.765 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=984
2020.03.19 10:39:48.233 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:39:49.944 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:50.923 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=969
2020.03.19 10:39:52.392 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1484
2020.03.19 10:39:54.100 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:55.079 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=985
2020.03.19 10:39:56.548 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:39:58.258 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:59.237 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=984
2020.03.19 10:40:00.705 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:40:02.416 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
Sie können sehen, dass ArrayResize für Objekte nun schneller arbeitet.

Wieder einmal wurde die Komplexität eines Teils der ArrayResize-Funktion von einem Logarithmus auf Null reduziert
 
Ilyas:
Wir können sehen, dass ArrayResize für Objekte jetzt schneller ist.
Wieder einmal ist es uns gelungen, die Komplexität eines Teils der Funktion ArrayResize vom Logarithmus auf Null zu reduzieren.

Ich habe es geschafft, die Geschwindigkeit von ArrayResizeReserve und ArrayOnNew auf ein reales Projekt für den Datentyp zu vergleichen - Klasse mit einem einzigen int-Feld, Anzahl der Datensätze 20M.

In MT5 (Build 2363) war ArrayOnNew bei allen verglichenen Parametern außer einem schlechter als ArrayResizeReserve:

Lese-/Schreibzugriff (std::fill_n, std::copy, std::vector::clear): 2-2,5 mal langsamer
Alle Elemente auf einmal erstellen (std::vector::resize) für "kalten"/"heißen" Speicher - 1,1-1,2 mal langsamer
Alle Elemente einzeln erstellen (std::vector::push_back) für "heißen" Speicher - 1,2 mal schneller

 

diese Links in der Hilfe (Editor) führen zu einer nicht gefundenen Seite


 
MT5-Fehler (Build 2363) Nicht übereinstimmende Ausführungsprioritäten von Vorlagenfunktionen in MQL im Vergleich zu Vorlagenfunktionen in C++(online:https://onlinegdb.com/HkNqBDZ88).
Das Problem
tritt auf, wenn die erste "Test"-Funktion eine vollständigspezialisierte Template-Basisklasse als Argument enthält,
und die zweite "Test"-Funktion überlädt die erste, ist eine Template-Funktion und enthält eine nicht-spezialisierte Template-Basisklasse als Argument.

template<typename T>
struct B{
   T data;
};

template<typename T>
struct BB : public B<T>{};


template<typename T>                                             
struct A{
public:
   static void test(T& src){
      printf("1");
   }
   
   template<typename TT>
   static void test(B<TT>& src){
      printf("2");
   }
};
      

void OnStart(){
   BB<int> bb;
   A<B<int>>::test(bb);         //'test' - ambiguous call to overloaded function        
}
 
Hallo zusammen!!! Meine Frage ist: Ich benutze zwei Plattformen MT4 und MT5 auf meinem copyutera. MT4 verbunden, um das Signal ohne jedes Problem. Aber ich kann keine Verbindung zu einem anderen Signal von MT5 herstellen. Ich habe ein Konto und die Geldbewegung wird angezeigt, aber es gibt keine Kontonummer im Konto, ich habe keine Signaltaste im Dashboard des Terminals. Ich mietete einen Server, vps, schrieb ich, dass ich zu migrieren müssen, aber die Migration Taste funktioniert nicht. Bitte sagen Sie mir, warum.
 
Anna:
Hallo zusammen!!! Meine Frage ist: Ich benutze zwei Plattformen MT4 und MT5 auf meiner copyutera. Ich habe das Signal von MT4 ohne Probleme verbunden. Aber ich kann keine Verbindung zu einem anderen Signal von MT5 herstellen. Ich habe ein Konto und die Geldbewegung wird angezeigt, aber es gibt keine Kontonummer im Konto, ich habe keine Signaltaste im Dashboard des Terminals. Ich mietete einen Server, vps, schrieb ich, dass ich Migration brauchen, aber die Migration Taste funktioniert nicht. Bitte sagen Sie mir, warum.

MetaTrader 5 (für die im Terminal integrierte virtuelle Hosting-Lease) erfordert ein 64-Bit-Betriebssystem.

 

Kann jemand unter Win 10 lokale Agenten verbinden?

Ich habe versucht, 2 PCs zu verbinden, der entfernte Agent ist ständig bereit-verbinden-bereit-verbinden... keine Arbeitsplätze.

ich habe in der Firewall nachgeschaut, ich glaube es gibt ein Häkchen für Metatrader Agent, Export - Import Agent über Datei sieht auch Ports und Name des PCs

Ich vermute, ich muss die Ports woanders hinleiten?