Fehler, Irrtümer, Fragen - Seite 2574

 
Aleksei Beliakov:
Banal, wenn Sie die Ergebnisse dieser Funktionen in ontick drucken, dann ist es für die Zeit 1970.01.01 für den Preis 0
Früher war es Barzeit oder Preiszeit.
Jetzt ist es also so.

Vielleicht haben Sie einen Fehler in Ihrem Computer? Ich habe diesen Code in Build 1220.

 Print("iHigh ", iHigh(NULL, PERIOD_W1, 0));
 Print("iTime ", iTime(NULL, PERIOD_W1, 0));

druckt

2019.09.23 09:41:27.560 00 EURUSD,M5: iTime 2019.09.22 00:00:00
2019.09.23 09:41:27.560 00 EURUSD,M5: iHigh 1.10245
 
Aleksei Beliakov:
Wenn Sie die Ergebnisse dieser Funktionen in ontick ausdrucken, gilt dies für den Zeitpunkt 1970.01.01 zum Preis 0.
Früher war es Barzeit oder Preiszeit.
Jetzt sieht es also so aus

Wie lautetder Fehlercode?

Was sind die Testparameter?

Sind die Daten nach Wochen und Monaten geladen? Wie viele sind es insgesamt?

 
Slava:

Wie lautetder Fehlercode?

Was sind die Testparameter?

Werden die Daten nach Wochen und Monaten hochgeladen? Wie viele sind es insgesamt?

Ich habe es noch einmal überprüft, und jetzt funktioniert alles.

Ich habe die Geschichte heruntergeladen.

Ich danke Ihnen.

 
Ich bin sicher, dass dieses Thema bereits angesprochen wurde: Es sollte möglich sein, zwei verschiedene Versionen von MT5 auf einem Desktop zu koexistieren (Auto-Update und Rollback deaktivieren). Oder zumindest Beta und Release. Oder es ist möglich (ohne Virtualisierung).
 

Beobachtung aus dem Gedächtnis.

Ich habe CopyRates etwa tausendmal in meinem Code ausgeführt.

Dann wird das Array der Anführungszeichen irgendwie verarbeitet, und am Ende rufe ich auf:

ArrayRemove(ArrayQuotes,0,ArraySize);

ArrayFree(ArrayQuotes);

ArrayResize(ArrayQuotes,0);

ArrayFree(ArrayQuotes);

ZeroMemory(ArrayQuotes);

(gerade anders experimentiert)

Ergebnis - Speicher wächst immer noch geometrisch und wird verstopft, zusammen mit der Last auf den Prozessoren - i7-Prozessor wird um 80% insgesamt auf allen logischen Kernen verstopft, Speicher ist mehr als Giga.

Bisher ist es mir gelungen, den Ressourcenverbrauch mit einem Drittanbieterprogramm einzuschränken - CPU nicht mehr als 15% und Speicher nicht mehr als Giga.

Frage: Ist dies ein Fehler oder eine Funktion der Plattform?

 
Ist es möglich, die Quellkodierung starr zu wählen? Ich weiß, dass es sich um Einzelbytes handelt, wenn es sich nur um ASCII-Zeichen handelt, ansonsten um utf-16. Kann utf-8?
 

Übrigens, seltsames Verhalten des Meta-Editors, sollte korrigiert werden:

fn_call();/////////////////////

Ein Doppelklick auf die Schrägstriche hebt die Schrägstriche mit dem vorherigen Zeichen hervor (wenn es sich nicht um eine Zahl oder einen Buchstaben handelt).

Warum ungünstig? Ich habe den Code vorübergehend bearbeitet und die Leerzeichen auf diese Weise hervorgehoben, dann muss ich schnell einzelne Schrägstriche markieren und löschen.

 

Immer noch zurück zu der Frage der Übergabe von Strings aus dll, wchar_t* als Zeiger.
Von Renat'sArtikel über die Arbeit mit Strings in dll, ist es klar, dass mql Typ String einen Zeiger auf String wchar_t* von externen dll nimmt.
Mit anderen Worten, wir sendenwchar_t* an die DLL und empfangen es als String & in mql.
Aber die C-Funktion

wcscpy_s(wchar_t *dest, rsize_t  dest_size, const wchar_t *src);

funktioniert nicht korrekt, d.h. ein Zeiger auf die Zeichenkettewchar_t* dest wird in mql empfangen, schlägt aber fehl und geht ein und aus.
Manchmal stürzt das Terminal ab und das Programm wird beendet.

Mit der Funktion

wcscpy(wchar_t *dest,  const wchar_t *src);

Das Terminal stürzt nicht ab, aber die Strings kommen auch nur sporadisch an.
Bitte korrigieren Sie dies im nächsten Build.

ZS: Ich habe vergessen zu erwähnen, dass derwchar_t* Zeiger von einem anderen Thread übergeben wird.
D.h. die Funktion wcscpy_s oder wcscpy wird in einem separaten Thread aufgerufen.

 
Roman:

Immer noch zurück zu der Frage der Übergabe von Zeichenketten aus der DLL, wichar_t* als Zeiger.
Von Renat'sArtikel über die Arbeit mit Strings in dll, ist es klar, dass mql Typ String nimmt einen Zeiger auf String wichar_t* von externen dll.
Mit anderen Worten, wir senden wichar_t* an die DLL und empfangen es als String & in mql.
Aber die C-Funktion

funktioniert nicht korrekt, d.h. ein Zeiger auf die Zeichenkettewichar_t* dest wird in mql empfangen, schlägt aber fehl und geht ein und aus.
Manchmal stürzt das Terminal ab und das Programm wird beendet.

Mit der Funktion

Das Terminal stürzt nicht ab, aber die Strings kommen auch nur sporadisch an.
Bitte korrigieren Sie dies im nächsten Build.

ZS: Ich habe vergessen zu erwähnen, dass der wichar_t* Zeiger von einem anderen Thread übergeben wird.
D.h. die Funktion wcscpy_s oder wcscpy wird in einem separaten Thread aufgerufen.

Wer wird den Speicher für string dest zuweisen?
 
Vladimir Simakov:
Und wer wird den Speicher für string dest zuweisen?

Der Speicher wird im mql-Code wie folgt zugewiesen

#import "Dll.dll"
   void Func(string task, string & out);
#import 

string оut;
StringInit(out, 165, 32);

heraus und als Zeiger auf den zugewiesenen Speicher übergeben, da string in mql wchar_t* in dll ist

Func("Task", out);