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

 
artmedia70:

Wie hoch ist die Wahrscheinlichkeit, dass ein neuer Tick eintrifft , bevor alle aktuellen EA-Berechnungen abgeschlossen sind? Meines Erachtens werden die Daten nur in diesem Fall alt und irrelevant.

Ich habe überprüft, wie lange Ihr Code zählt - ich auch, gerade vor kurzem hatte meine Zweifel, ist MT4 Berechnungsgeschwindigkeit genug für meine EA, es stellte sich heraus, es ist genug für jetzt, mein Code dauert etwa 18 ms, dh in 1 Sekunde werden Sie 55 Mal überprüft, Ticks kommen von 10 bis 70 pro Minute, wenn mehr als 50 Ticks pro Minute, es bedeutet, es ist eine Kerze

Versuchen Sie zu sehen, wie Ihr Code funktioniert, etwa so

int tik,barM1


int init(){
   barM1  = Bars;
   tik = 0;

return (0);
}


//_______________________________________________________
//  это добавить в start()
//_______________________________________________________
int start=GetTickCount();
 

 // некие серьёзные вычисления...


tik++;
Print("Время вычисления ", GetTickCount()-start, " миллисекунд.");

int counted  = Bars;
if (counted != barM1) {
print("за один бар было принято ",tik, "тиков" )
tik=0;
barM1=counted;
}

Hier ist der Indikator, der die Ticks zählt - für den Abgleich

Nun, wenn Sie einen Eröffnungspreis haben, tut es mir leid, dass ich ihn verpasst habe

OpnPrice =iOpen(NULL,PERIOD_M5,0); Sie können nur bei einem geschlossenen Balken wechseln - der obige Code mit der Bedingung if (counted != barM1) {

Dateien:
 

Wie kann man die Anzahl der Nachkommastellen des Indikators iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) bei der Berechnung im Expert Body ändern? Das Ergebnis wird mit 4 (d.h. 0,0001) angezeigt, während es für eine genaue Analyse mit 5 (z.B. 0,00012) angezeigt werden sollte. Und das MT4-Terminal zeigt 5-stellige Werte im Indikatorfenster auf dem Chart an.

 
Der Operator NormalizeDouble() wird Ihre Probleme lösen.
 
Roger:
Der Operator NormalizeDouble() wird Ihre Probleme lösen.


D.h. NormalizeDouble(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5) ergibt die gewünschten 0,00012 ?

P.S. Hinzugefügt und getestet - nichts. Die Ausgabe ist nur 0,00010, was denselben 4 Bits entspricht...

 

Nein, das stimmt nicht ganz, Roger.

IndicatorDigits() siehe Boris. Er muss jedoch in den Indikator selbst eingefügt werden, da er sich auf diesen und nicht auf den EA bezieht.

P.S. Noch etwas: Diese Funktion ist nur für den Indikator geeignet, für den Sie den Code haben. Dann wird es möglich sein, sie mit iCustom() aufzurufen.

Und für diejenigen, die "Standard" genannt werden, wie iMACD(), weiß ich keine richtige Lösung.

 
pathfinder1:

Das Ergebnis von NormalizeDouble(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5) ist also die gewünschte 0,00000 ?

Ja, das ist richtig. Der Schlüsselsatz war in der Berechnung im Hauptteil des EA? Und mit dem Standardindikator ist dies offenbar nicht möglich (((
 
pathfinder1:

Wie kann man die Anzahl der Nachkommastellen des Indikators iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) bei der Berechnung im Expert Body ändern? Das Ergebnis wird mit 4 (d.h. 0,0001) angezeigt, während es für eine genaue Analyse mit 5 (z.B. 0,00012) angezeigt werden sollte. Und das MT4-Terminal zeigt 5-stellige Werte im Indikatorfenster auf dem Chart an.

Sie sollten nichts ändern, die Genauigkeit in der Standard-Indikatoren ist auf maximale (bis zu 8 Ziffern), haben Sie eine falsche Schlussfolgerung über die Datenausgabe Genauigkeit, weil Print() Ausgaben bis zu 4 Ziffern standardmäßig, in Berechnungen (in den Bauch des Expert Advisors zum Beispiel) die maximale Genauigkeit verwendet wird, müssen Sie double durch DoubleToStr() als ein Beispiel auszugeben:

Print("iMACD ", DoubleToStr(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0), 8));

und wir erhalten diese Ausgabe:

 
ToLik_SRGV:

Sie brauchen nichts zu ändern, in Standard-Indikatoren ist die Genauigkeit auf Maximum (bis zu 8 Stellen) eingestellt, Sie haben eine falsche Schlussfolgerung über die Genauigkeit der Datenausgabe gemacht, weil Print() standardmäßig bis zu 4 Stellen ausgibt, in Berechnungen (im Bauch von Expert Advisors zum Beispiel) wird die maximale Genauigkeit verwendet, um dies zu sehen, müssen Sie Double über DoubleToStr() ausgeben, als Beispiel:

und wir erhalten eine solche Ausgabe:


Richtig, richtig, richtig! ! ! Anatoly - großes Lob, ich habe mich daran aufgehalten.

Die Wahrheit des Lebens ist "ein Kopf ist gut, aber zwei sind besser" (Zitat)

 
ToLik_SRGV:

Sie brauchen nichts zu ändern, die Standardanzeigen sind auf maximale Genauigkeit (bis zu 8 Stellen) eingestellt.


Stimmt, ich hatte den gleichen Verdacht :)
 
Wie schon so oft - die Wahrheit liegt an der Oberfläche)) gebe ich meine Schuld zu.
Grund der Beschwerde: