double bidP=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
double Averab=((askP+bidP)*1)/2.0;
Print("askP="+askP+" bidP="+bidP+" Averab="+Averab+" MathFloor((int)Averab)="+MathFloor((int)Averab));
bei Spanne=2
askP=105143 bidP=105141 Averab=105142 MathFloor((int)Averab)=105142
bei Spanne=3
askP=105144 bidP=105141 Averab=105142.5 MathFloor((int)Averab)=105142
unter 4!!!! spread
askP=105545 bidP=105141 Averab=105143 MathFloor((int)Averab)=105142
Warum?
Hallo zusammen, ich bin die Genauigkeit der Zitate langsam leid. Normalisierungen und so weiter.
Sie sollten irgendwie in der Lage sein zu verstehen, was double und int sind. Wie die Schriftumwandlung funktioniert.
Ich habe MathMod und MathFloor noch nie benutzt. Ihr Code schreit förmlich danach, dass Sie überhaupt nicht verstehen, was hinter dem steht, was Sie geschrieben haben.
Der Ausdruck der Doppelnummer ist nicht von Bedeutung. Wenn Sie den wahren Wert von double ausdrucken wollen, müssen Sie sich die Bytes ansehen.
nur, um zu vermeiden, dass er manuell geschrieben werden muss,
Die Variable selbst liefert nicht das Ergebnis, das ich von ihr erwarte.
Type Casting, int Normalisierung und Synchronisierung habe ich ohne Hilfe gemacht.
Im Moment bin ich verzweifelt, da ich alle Optionen ausprobiert habe und einen 1:1000-Code erstellt habe, der nicht so funktioniert, wie er sollte.
Aber danke für die Hilfe.
Versuchen Sie, das zu tun, was ich will: Zeigen Sie mir hinterher nicht den Code, sondern sagen Sie mir nur, ob er funktioniert oder nicht.
Nehmen Sie Ask und Bid.
und berechnen den Durchschnittspreis.
Wenn die Spanne ungerade ist (3,5,7,9, etc.), dann wird der Durchschnittspreis näher an Bid gesetzt.
Zum Beispiel:
Bid=1.55555 Ask=1.55557 Durchschnittspreis=1.55556 Spread=2
Bid=1.5555 Ask=1.55558 Durchschnittspreis=1.55556 Spread=3
und Sie werden es richtig machen.
Aber wenn die Spanne 4,5,6,7 beträgt, haben Sie diese Genauigkeit, wenn Sie ins Ungewisse gehen. Und die Zahlen werden in die falsche Richtung schwimmen.
double bidP=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
double Averab=((askP+bidP)*1)/2.0;
Print("askP="+askP+" bidP="+bidP+" Averab="+Averab+" MathFloor((int)Averab)="+MathFloor((int)Averab));
bei Spanne=2
askP=105143 bidP=105141 Averab=105142 MathFloor((int)Averab)=105142
bei Spanne=3
askP=105144 bidP=105141 Averab=105142.5 MathFloor((int)Averab)=105142
unter 4!!!! spread
askP=105545 bidP=105141 Averab=105143 MathFloor((int)Averab)=105142
Warum?
Ich hatte einmal eine ähnliche Situation - damals kochte mein Geist vor Empörung. Das Ersetzen von double durch float hat geholfen , aber ich weiß immer noch nicht, warum.
Danke, ich werde es ausprobieren........ Ich bin auch schon ganz aus dem Häuschen.
YES!!! Genau so funktioniert es! Das ist in Ordnung.
float bidP=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
float Averab=((askP+bidP))/2.0;
Danke!!! Ich wüsste nicht, was ich noch tun würde........
int askP = (int)(Ask / Point + ALPHA);
int bidP = (int)(Bid / Point + ALPHA);
So funktioniert MathFloor
{
return((int)((Num > 0) ? Num : Num - 1));
}
für verschiedene Spreads? einschließlich 2,3,4,5,6,7 ?
Ich habe es nämlich schon mal versucht (ohne+ ALPHA). 2,3 Spreizung ist ok, aber 4,5 ist schon ein Glitch
Normalisierung, dies ist das erste, was ich in der Funktion getan habe, aber leider bei bestimmten Spreads, beginnt es zu glitch
Die Normalisierung ist das erste, was ich in der Funktion gemacht habe, aber leider fängt sie bei bestimmten Spreads an zu stören
nehmen Sie den Ask und Bid.
und berechnen den Durchschnittspreis.
Wenn die Spanne ungerade ist (3, 5, 7, 9 usw.), wird der Durchschnittspreis näher am Geldkurs angesetzt.
int DoubleToInt( const double Num )
{
return((int)(Num + ALPHA));
}
void OnStart()
{
double NewPrice = DoubleToInt((Ask + Bid) / (2 * Point)) * Point;
Print(NewPrice);
}
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo zusammen, ich bin die Genauigkeit der Zitate langsam leid. Normalisierungen und so weiter.
float askP=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits);
float bidP=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
float Averab=((askP+bidP))/2.0;
AUTOPRICE=MathFloor(Averab)*Point;
Print("FLOAT "+" askP="+askP+" bidP="+bidP+" Averab="+DoubleToString(Averab,10)+" AUTOPRICE="+DoubleToString(AUTOPRICE,10));
double AUTOPRICE2;
double askP2=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits);
double bidP2=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
double Averab2=((askP2+bidP2))/2.0;
AUTOPRICE2=MathFloor(Averab2)*Point;
Print("DOUBLE "+" askP2="+askP2+" bidP2="+bidP2+" Averab2="+DoubleToString(Averab2,10)+" AUTOPRICE="+DoubleToString(AUTOPRICE2,10));
Ausbreitung:2
2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105143 bidP2=105141 Averab2=105142.000000 AUTOPRICE=1.0514200000
2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105143 bidP=105141 Averab=105142.0000000000 AUTOPRICE=1.0514199734
Verbreitung:3
2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105144 bidP2=105141 Averab2=105142.5000000000 AUTOPRICE=1.0514200000
2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105144 bidP=105141 Averab=105142.5000000000 AUTOPRICE=1.0514199734
Verbreitung:4
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105145 bidP2=105141 Averab2=105143.000000 AUTOPRICE=1.0514200000
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105145 bidP=105141 Averab=105143.0000000000 AUTOPRICE=1.0514299870
Verbreitung:5
2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105146 bidP2=105141 Averab2=105143.5000000000 AUTOPRICE=1.0514300000
2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOATaskP=105146 bidP=105141 Averab=105143.5000000000 AUTOPRICE=1.0514299870
Diese zusätzlichen Zeichen befinden sich irgendwo am Ende des Tunnels..........