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

 
artmedia70:

Es funktioniert noch nicht... und genau AC

im Protokoll erwischen, ist die Neuberechnung vielleicht falsch und die Bedingung wird nie funktionieren, z. B. AC1 = 0 und AC2 = 0 und es wird nie 0 > 0 sein

print(AC1,AC2) ;
if (BB>0 && OsMA>0 && AC1>AC2) return(1);

 
IgorM:

im Protokoll erwischen, vielleicht ist die Neuberechnung falsch und die Bedingung wird nie erfüllt, wie AC1 = 0 und AC2 = 0 und nie 0 > 0

drucken(AC1,AC2) ;
if (BB>0 && OsMA>0 && AC1>AC2) return(1);

unten:

sonst return(0);

 

Vielen Dank, Igor. Ich glaube, dort ist der Hund begraben... :)

Ich habe Comment() die gleiche Ausgabe AC1 und AC2 = 0,01, obwohl sie im Datenfenster AC1=0,001008, AC2=0,001020 haben.
Wie kann ich die Ziffernkapazität erhöhen? Nun, abgesehen von einer trivialen Multiplikation mit 1000, oder einfach so?

 
IgorM:

Ja, also werde ich es versuchen, während - das ist bis zum ersten Spike und dann ........ - Ich kann es nicht herausfinden.


Erledigt. Hier ist das Ergebnis ihrer Arbeit.

Der Code ist nicht allzu kompliziert, so dass Sie keine Probleme haben sollten, ihn Ihren Bedürfnissen entsprechend umzustellen.

Das Skript ist dem Beitrag beigefügt.

Dateien:
0.mq4  4 kb
 

Ist ein solcher Eintrag korrekt:

double AC1=NormalizeDouble(iAC(sy,tf,1),8);
 
artmedia70:

Bis jetzt funktioniert es nicht... und das ist die AC.

Der einzige Ausweg besteht darin, genau herauszufinden, welche Werte in den Variablen enthalten sind - dies wird uns zeigen, warum die programmierte Bedingung nicht funktioniert.

Wenn automatisch auf 0,01 aufgerundet wird, ist der Test bei einem Instrument wie dem UsdJpy höchstwahrscheinlich erfolgreich. Dann gibt es die Möglichkeit, mit String-Variablen zu arbeiten (falls Sie wirklich eine so weit entfernte Nachkommastelle benötigen)

 
drknn:
Der einzige Ausweg besteht darin, genau herauszufinden, welche Werte in den Variablen enthalten sind - dies wird uns zeigen, warum die programmierte Bedingung nicht funktioniert.
Danke, Vladimir, ich habe den Grund gefunden. Die Frage über zwei Stellen...
 
drknn:


Erledigt. Hier ist das Ergebnis seiner Arbeit.


Danke, es ist OK - es funktioniert, ich konnte nur nicht herausfinden, wie man das Trend-Flag eingibt - ich dachte, es sei wie das Sortieren eines Arrays
 
artmedia70:

Ist ein solcher Eintrag korrekt:


Richtig, denn der erste Parameter gibt eine Zahl zurück und der zweite Parameter ist ein ganzzahliger Wert innerhalb akzeptabler Grenzen. Die Frage ist nur, was genau in die Variable einfließen wird. Versuchen Sie, das Dokument so zu drucken, wie es ist, und versuchen Sie diese Konstruktion:

double AC1=NormalizeDouble(iAC(sy,tf,1),8);
string str=AC1;
Print("str = ",str);
 
IgorM:

Danke, es ist OK - es funktioniert, ich konnte nur nicht herausfinden, wie man das Trend-Flag eingibt - ich dachte, ich müsste das Array sortieren


Das Problem bei der Arbeit mit Arrays besteht darin, dass die Funktion der Array-Aufzählung, wenn sie auf einen Wert stößt, der ihr gegeben wird, die Nummer der Zelle zurückgibt, die diesen Wert enthält. Und die Tatsache, dass dieser Wert auch in anderen Zellen des Feldes zu finden ist, ist genau der knifflige Teil. Wir müssen also weiter iterieren, die Werte durchgehen, bis wir das gesamte Array durchlaufen haben. Sobald wir den richtigen Wert gefunden haben, fügen wir den Zellindex in ein zuvor erstelltes Array ein, oder wir fügen die Zeilen zusammen.

Die Komplexität Ihres Problems besteht darin, dass Sie nach Spitzen/Tiefs suchen müssen. Um ihn zu finden, müssen Sie das Extremum überspringen, und erst dann wird der Code erkennen, dass er es tatsächlich übersprungen hat. Deshalb müssen wir einen Schritt zurückgehen, um uns an den Extrempunkt und die Zelle zu erinnern, in der er liegt.