[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 60

 
TheXpert >> :

Erinnert euch! Eine Besonderheit der String-Implementierung. Nachdem die Größe des Arrays geändert wurde, muss es durchlaufen und auf Null gesetzt werden:

Ich könnte mich irren, aber es sollte helfen.

Vielen Dank für die Antwort. Ich habe es versucht, aber leider hat es nicht geholfen. Die Nullsetzung erfolgt, bevor wir etwas mit dem Array anfangen. Und das Nullsetzen erfolgt durch explizite Zuweisung von String-WERT, während in dem von mir genannten Fall den Array-Elementen das Ergebnis der Funktion zugewiesen wird (die einen WERT vom Typ String zurückgeben sollte), aber tatsächlich einen VERWEIS auf die Adresse von String im Speicher zurückgibt, was meiner Meinung nach nicht korrekt ist. Und das Ergebnis mit identischen Werten liegt daran, dass die Funktion mehrmals hintereinander aufgerufen wird und nach jedem Aufruf der nächste tatsächlich denselben Speicher verwendet und dort neue Daten ablegt. Wenn wir zwischen den Aufrufen irgendwelche Manipulationen vornehmen (Aufrufe beliebiger Fionen, Deklaration von Variablen usw.), wird das Ergebnis höchstwahrscheinlich noch schlimmer sein, nämlich dass die Werte in den String-Array-Elementen auf Müll im Speicher verweisen.


Ich möchte die mql4-Entwickler bitten, sich zu dieser Situation zu äußern und die korrekte Arbeitsweise mit String-Arrays zu erklären, falls möglich.

 
xruss писал(а) >>
liegt eine Art Fehler vor?

Der letzte geschlossene Auftrag aus der Historie wird ausgewählt und sein Typ wird der Variablen ORDtype zugewiesen, bevor das Signal zum Öffnen erzeugt wird. Das heißt, wenn die Geschichte nicht leer ist, ist ORDtype natürlich nicht gleich -1. Daher ist die Bedingung für das Auftreten des Signals nicht erfüllt, da

if ((ORDtype==-1)&&(...))

 
Everlost >> :

Der letzte geschlossene Auftrag aus der Historie wird ausgewählt und sein Typ wird der Variablen ORDtype zugewiesen, bevor das Signal zum Öffnen erzeugt wird. Das heißt, wenn die Geschichte nicht leer ist, ist ORDtype natürlich nicht gleich -1. Daher ist die Bedingung des Auftretens des Signals nicht erfüllt, da

if ((ORDtype==-1)&&(...))

Und noch ein Problem - Positionen werden nicht geöffnet, auch wenn der Verlauf leer ist ((

 
Yug >> :

Vielen Dank für die Antwort. Ich habe es versucht, aber leider hat es nicht geholfen. Das Nullsetzen funktioniert, bevor wir irgendetwas mit dem Array anstellen. Und das Nullsetzen erfolgt durch explizite Zuweisung von String-WERT, während in dem von mir genannten Fall den Array-Elementen das Ergebnis der Funktion zugewiesen wird (die einen WERT vom Typ String zurückgeben sollte), aber tatsächlich einen VERWEIS auf die String-Adresse im Speicher zurückgibt, was meiner Meinung nach nicht korrekt ist. Und das Ergebnis mit identischen Werten liegt daran, dass die Funktion mehrmals hintereinander aufgerufen wird und nach jedem Aufruf der nächste tatsächlich denselben Speicher verwendet und dort neue Daten ablegt. Wenn Sie zwischen den Aufrufen irgendwelche Manipulationen vornehmen (Aufrufe jeglicher Art, Deklaration von Variablen usw.), wird das Ergebnis höchstwahrscheinlich noch schlimmer sein, nämlich dass die Werte in den String-Array-Elementen auf Müll im Speicher verweisen.


Ich bitte die mql4-Entwickler, sich zu dieser Situation zu äußern, wenn möglich, und zu erklären, wie man mit String-Arrays korrekt arbeitet.

Versuchen Sie es auf diese Weise:

string tmp = func();
array[0] = tmp;

Ein Gemüsegarten, natürlich, aber es sollte funktionieren...

 

Was bedeutet MT4 im Tester -Optimierung, wo muss ich ankreuzen? Was ist diese Funktion? Stellt er den EA auf bestimmte Einstellungen ein (Standard) oder zeigt er, in welchem Zeitraum (TF) er besser funktioniert?

 
rafex >> :

Was bedeutet MT4 im Tester -Optimierung, wo muss ich ankreuzen? Was ist diese Funktion? Stellt er den EA auf bestimmte Einstellungen ein (Standard) oder zeigt er, auf welchem Zeitrahmen (TF) er besser funktioniert?

Dieses Kontrollkästchen kann nur aktiviert werden, nachdem Sie F1 gedrückt und den Abschnitt "Autotrading" sorgfältig studiert haben.

 
komposter >> :

Versuchen Sie es auf diese Weise:

Ein Gemüsegarten, natürlich, aber es sollte funktionieren...

Ich habe es vorgestern ausprobiert. Das Ergebnis ist das gleiche. Tatsächlich wird der Verweis zuerst nach temp str kopiert, und dann wird derselbe Verweis in ein Array-Element kopiert :(

 
Yug >> :

Ich habe es vorgestern ausprobiert. Das Ergebnis ist das gleiche. Tatsächlich wird die Referenz zuerst in den temporären String und dann in das Array-Element kopiert :(

Deklarieren Sie den Rückgabestring als statisch in der Funktion, nur dann muss die Initialisierung nach der Deklaration erfolgen.

 
Liebe Experten, bitte ignorieren Sie meine Frage nicht.

Gibt es einen Indikator, der die Volatilität zählt, zum Beispiel täglich. Aber nicht die, die eine undefinierte Zahl wie 0,34 ergibt. Er sollte jedoch die Anzahl der Kerzen pro Tag berechnen und diese durch einen bestimmten Zeitraum (Anzahl der Tage) teilen, damit der Indikator den Durchschnittswert kennt. Beispiel: Eröffnung 100, Schluss 200; am zweiten Tag - Eröffnung 200, Schluss 250. Durchschnittliche Volatilität für diese 2 Tage = ((200-100)+(250-200))/2 Tage=(100+50)/2=75
Wo herunterladen, falls verfügbar.
 
TheXpert >> :

Deklarieren Sie den Rückgabestring als statisch in der Funktion, aber die Initialisierung muss nach der Deklaration erfolgen.

Ich habe diese Variante auch ausprobiert. Das Ergebnis ist das gleiche, d.h. es wird ein Speicherverweis anstelle eines Wertes zurückgegeben.