Fehler, Irrtümer, Fragen - Seite 2570

 
Nikolai Semko:

ist die Zeichenkette leer, als ob sie nicht existieren würde, d.h. es wird nicht einmal Speicher zugewiesen.

Dies gilt auch für andere Arten. Wenn Sie eine Variable deklarieren, bedeutet dies, dass der Speicher bereits zugewiesen ist.
Tatsächlich ist eine Zeichenkette aber kein primitiver Typ, sondern ein Referenztyp.

Wie könnte es anders sein? Der Speicher für das String-Objekt wird im Heap zugewiesen und die Speicheradresse, an der der Text beginnt, ist 0x00
 
Igor Makanu:

Ich kann nicht herausfinden, wie ichPrintFormat überprüfen kann.

Hinweis

PrintFormat() wird im Strategie-Tester im Optimierungsmodus nicht ausgeführt.

Haben Sie eine Idee?

Wie wäre es mitStringFormat und der daraus resultierenden Zeichenkette in einer Datei? (für jeden Durchlauf wird eine eigene Datei im gemeinsamen Ordner erstellt, damit der Prüfer sie nicht überschreibt).

 
Vladimir Simakov:
Wie könnte es anders sein? Der Speicher für das String-Objekt wird auf dem Heap zugewiesen, während die Speicheradresse, an der der Text beginnt, 0x00 ist

Es wird nur Speicher für den Namen und den Verweis zugewiesen, nicht aber für das Objekt selbst, da es noch nicht existiert. Dies ist bei primitiven Typen nicht der Fall, dort wird der Speicher in dem Moment zugewiesen, in dem die Variable erstellt wird, auch ohne Initialisierung.
Ich möchte mich nicht mit der Terminologie herumschlagen. Jeder versteht den anderen sowieso.
All dies ist offensichtlich.

 
Vladimir Karputov:

Wie wäre es mitStringFormat und der daraus resultierenden Zeichenkette in einer Datei? (erstellen Sie für jeden Durchgang eine andere Datei im gemeinsamen Ordner, damit der Prüfer sie nicht überschreibt).

gute Option, wird getestet

ZS: Code erneut umgeschrieben, um im Optimierer schneller zu arbeiten (die Ergebnisse waren 5h, jetzt 1,5h !!!)

jetzt stieß ich auf printf() in der Hilfe und beschloss, alle meine Drucke zu überprüfen, wo ich.... ersetzen muss, ersetzte ich es und die Optimierung wurde 22h .... ich fand, wo ich durcheinander, aber natürlich dachte ich sofort, es war alles in printf() !!!

)))


Ich habe versucht, printf() im Optimierer zu überprüfen:

int xx=10;
void OnTick()
{  printf("1/x = %f",1/(xx--));
....

Bisher habe ich auf Anhieb das bekommen, was ich erwartet habe:

2019.09.20 11:29:16.611 Core 1 genetic pass (0, 607) tested with error "critical runtime error 503 in OnTick function (zero divide, module experts\)" at 0:00:00.048


Ich habe erwartet, dass wenn es heißt"PrintFormat() wird nicht ausgeführt.", dann sollte es das bekommen.

 
Ich habe die Erfahrung gemacht, dass die Code-Optimierung die Ausführung um den Faktor 450 beschleunigt :).
 
Igor Makanu:

gute Option, wird getestet

SZY: Code noch einmal umgeschrieben, um im Optimierer schneller zu arbeiten (die Ergebnisse waren 5h, jetzt 1,5 h!!!)

Jetzt stieß ich auf printf() in der Hilfe, und beschlossen, alle meine Drucke zu überprüfen, wo ich brauche, um zu ersetzen.... Ich ersetzte es und die Optimierung wurde 22 Stunden .... Ich fand, wo ich durcheinander, aber natürlich, sofort dachte, dass die Ursache für alle in printf() !!!

)))


Ich habe versucht, printf() im Optimierer zu überprüfen:

Bisher habe ich auf Anhieb das bekommen, was ich erwartet habe:

2019.09.20 11:29:16.611 Core 1 genetic pass (0, 607) tested with error "critical runtime error 503 in OnTick function (zero divide, module experts\)" at 0:00:00.048


Ich habe erwartet, dass wenn es heißt"PrintFormat() wird nicht ausgeführt.", dann sollte er sie bekommen.

Aha. Und ich erhalte unterschiedliche Werte für die Variable xx im Einzeltest und in der Optimierung.

Nur der printf-Funktionsaufruf wird nicht ausgeführt.

 
Slava:

Aha. Und ich erhalte unterschiedliche Werte für die Variable xx im Einzeltest und in der Optimierung.

Nur der Aufruf der printf-Funktion wird nicht ausgeführt.

Ja, es ist klar, dass der Benutzer dies auch auf diese Weise tun kann.

aber wie kann man printf() überprüfen?

HH: Obwohl, wenn der Entwickler sagt, dass es nicht gedruckt ist, dann müssen wir es nicht überprüfen.

 
Igor Makanu:


aber wie überprüfen Sie printf()?

Vergleichen Sie die Zeit eines einzelnen Durchgangs aus der Optimierung und die Zeit eines einzelnen Durchgangs

 
Slava:

Ich werde sie vervielfältigen:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

Alexey Kozitsyn, 2019.09.18 09:34

Ein paar Fragen zur Plattform:

1. Wird ein zulässiger Handelsbereich für VP über MOEX hinzugefügt (z.B. EURRUB_TOM)? Im Moment ist es nicht möglich, mit Sicherheit zu wissen, ob ein Limit ausgeschrieben wird, da es keinen Zugriff auf die Spanne (maximal und minimal mögliche Preise) gibt. Bitte hinzufügen.

2. Ist es möglich, dem Terminal und dem Meta-Editor einen automatischen Speicherstatus alle N Minuten hinzuzufügen? Sehr mangelhaft, da man bei einer plötzlichen Unterbrechung der Verbindung wieder in den Zustand beim Start des Programms zurückfällt und alle Änderungen verloren gehen! Sehr anstrengend!

Zum ersten Punkt: Verstehen Sie, dass es unmöglich ist, normal zu handeln, wenn Sie die Grenzen nicht kennen! Warum ist es möglich, diese Einschränkungen für einige Instrumente zu erhalten und für andere nicht?

 

Hilfe ist wieder falsch, ich lese:https://www.mql5.com/ru/docs/math/mathmax

Функция возвращает максимальное из двух числовых значений.

double  MathMax(
   double  value1,     // первое число
   double  value2      // второе число
   );

Ich sehe, dass es keine Optionen gibt, Funktionstyp fmax() double, ich suche, wo ich einen Nachkommawert verloren haben könnte, nachdem ich nach allem und jedem gesucht habe, führe ich den Test durch:

void OnStart()
{
   long slvl = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL);
   int sl = 300;
   Print(typename(fmax(slvl,sl)));
}

2019.09.20 18:06:34.194 tst (EURUSD,H1) long

ZS: Ich antworte sofort, ich lese die Hilfe bis zum Ende und sehe den Satz: "Der Rückgabetyp entspricht dem Seniorentyp." ...imho ist es nicht schlimm, dass es in 99% der Fälle reicht, in der Hilfe nach der Beschreibung der Funktion zu suchen, als zwischen den Zeilen nach der versteckten Bedeutung zu suchen - es steht ja Ergebnis-Typ fmin() --> double - es gibt also keine Varianten, als ob