Gemeinschaft des Fachwissens - Seite 3

 
komposter<br / translate="no">
Ich habe kurz nachgeschaut (ich habe noch nicht nachgeforscht) und den Punkt gefunden, den Sie berechnen.
Versuchen Sie, es "wegzuwerfen" und einen dummen Punkt zu setzen. Vielleicht ist das das Problem (die Punkte in MarketInfo werden nicht immer so angezeigt, wie Sie es wünschen).

Das sollte immer so sein...
obwohl man auch versuchen kann, sie zu normalisieren =)

und das ist nicht immer akzeptabel - ein Experte kann mit mehreren Paaren handeln, und der Punkt kann unterschiedlich sein...
 
Das Problem ist so alt wie der erste Computerchip -
das ist natürlich traurig... aber es muss doch eine Möglichkeit geben, das zu umgehen, oder? Ich hoffe, Renat wird etwas sagen...
 
if ( orderstoploss == 0.0 || (  orderstoploss < ( bid - TrailingStop * point ) ) )


Nehmen wir an, orderstoploss = 1.29211 (5 Stellen nach dem Komma)
bid=1.29716 (ebenfalls 5 Stellen )
TrailingStop = 50
point =0.001
dann (bid - TrailingStop * point)=1.29216>1.29211
Richtig, dies setzt voraus, dass aus den Stellen plötzlich 5 werden
Und auch

if ( orderstoploss == 0.0 || (  orderstoploss < ( bid - TrailingStop * point ) ) )


kann schmerzlos durch
ersetzt werden.

if ( orderstoploss < ( bid - TrailingStop * point )) )


Ich denke, dass es nicht notwendig ist, das Fehlen des Stop-Loss-Niveaus beim Trailing zu überprüfen.
Eigentlich schon, ich korrigiere mich. Wenn wir einen Stop-Loss nur dann setzen, wenn ein Gewinn erzielt wird, und wenn nicht, sind wir bereit, auf einen Margin Call zu warten.
Ich habe nichts anderes gefunden. Bei welchem Paar hat Ihr Trailing-Stop nicht richtig funktioniert und gab es eine starke Bewegung?

 
Hallo.
Ich konvertiere alles zu Vergleichszwecken in Ganzzahlwerte. Ich speichere und verwende die angegebenen Werte, wo immer ich kann (im Array).
die angegebenen Werte verwenden (in Arrays, Variablen usw.)
D.h. Variablen vom Typ int können Werte von -2147483648 bis 2147483647 annehmen.
Diese Dimensionalität ist für Kreuze gut geeignet.
Dementsprechend können 1,2999 und 1,3000 in 12999 und 13000 umgewandelt werden, und dann können sie sicher verglichen werden,
ohne sich Gedanken über periodische Fehler zu machen.

Ich habe hier ein Beispiel skizziert :)
int Normalize(double double_value, int digits) - приводит double в int  (1.2999 в 12999)
double Restore(int int_value, int digits) - приводит полученный ранее int в double (12999 в 1.2999)


hier

//+------------------------------------------------------------------+
//|                                                   ShiftPoint.mq4 |
//|                                                            Begun |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   return(0);
}
//+------------------------------------------------------------------+
int Normalize(double double_value, int digits)
{
	return (NormalizeDouble(double_value,digits)*MathPow(10,digits));
}
double Restore(int int_value, int digits)
{
	return (NormalizeDouble((int_value/MathPow(10,digits)),digits));
}
//+------------------------------------------------------------------+
int start()
{
	double	Test_Value =  1.29999999;
	int	Test_int;
	double	Test_double;

	Test_int         = Normalize(Test_Value,Digits);
	Test_double   = Restore(Test_int,Digits);
	Print("-----------------------------");
	Print("Restored value    = ",DoubleToStr(Test_double,Digits));
	Print("Shift Point Value = ",Test_int);
	Print("Real Double Value = ",DoubleToStr(Test_Value,8));
}
//+------------------------------------------------------------------+



Ausgabe:
Umschaltpunkt EURUSD,H1: Realer Doppelwert = 1.29999999
Verschiebepunkt EURUSD,H1: Wert des Verschiebepunkts = 13000
Umschaltpunkt EURUSD,H1: Wiederhergestellter Wert = 1.3000

 
Im Allgemeinen ersetzen Sie dies durch
if ( orderstoploss < ( bid - TrailingStop * point )) )


unter

if ( TrailingStop < ( bid -orderstoploss)/ point  )


Alternativ dazu.

 
Ich danke Ihnen allen für Ihre Teilnahme!
Rosh 17.04.05 22:29 <br / translate="no"> Es scheint mir, dass die Überprüfung auf das Nichtvorhandensein eines Stop-Loss-Niveaus für Trailing nicht notwendig ist
Ich stimme nicht zu, das Nachziehen sollte eindeutig sein - wenn es eingeschaltet ist, bedeutet es, dass SL ausgesetzt ist.

Bei welchem Paar hat Ihr Trailing nicht richtig funktioniert und gab es keine starke Bewegung?
jetzt läuft der Experte auf eu - gelegentliche Fehler... im Laufe des Tages... Ich glaube nicht, dass das der Fall ist...

Im Allgemeinen sollten Sie sie ersetzen.
jetzt werde ich es ausprobieren, vielleicht hilft es ja ;) ich erzähle es dir morgen...

Angefangen 17.04.05 22:46
Hallo.
Ich bringe alles auf ganze Zahlen zum Vergleich
Hallo =) das ist sicherlich eine Option... aber ich hätte nicht gedacht, dass ich mir all diese Mühe machen muss... Ich wünschte, ich hätte von den Entwicklern gehört, sie wissen es besser als ich...
 
Entschuldigung, ich war an der Diskussion nicht beteiligt.

2dev:
Das Problem ist so alt wie der erste Computerchip:

Sie haben recht - das ist ein grundlegendes Problem, es ist gefährlich, Fließkommazahlen zu vergleichen.
Bringen Sie Zahlen an wichtigen Stellen immer mit Normalize() auf eine bestimmte Genauigkeit.

Welche Implementierung der Arithmetik verwenden Sie?

Standardisierung auf den Typ double (8 Bytes).

Übrigens, wir erzwingen die Normalisierung aller weitergegebenen Preise in Handelsabfragen, um Fehler zu vermeiden.
Sie können einen Stop-Loss bei 1,2932461 anfordern, aber er wird auf 1,2932 gesetzt.
Bitte prüfen Sie, ob dies der Fehler ist, wenn Sie versuchen, den Stopp zum gleichen Preis neu zu setzen.
 
Bitte prüfen Sie, ob dies der Fehler ist, wenn Sie versuchen, den Stopp zum gleichen Preis neu zu setzen?

3 Leute haben zugeschaut =)) Renat kam und hat einfach mit dem Finger auf den Fehler gezeigt =)))
Ich werde das jetzt natürlich überprüfen, aber höchstwahrscheinlich ist das der Fall... Ich habe "bid - TrailingStop * point" nicht normalisiert, und genau diese Konstruktion ist an der Auftragsänderung beteiligt...
wir sind nicht aufmerksam, meine Herren ;)
 
Bringen Sie die Zahlen an wichtigen Stellen immer mit Normalize() auf eine gewisse Genauigkeit.

Meinen Sie die Normalize(), die Begun vorgeschlagen hat?
 
В важных местах постоянно приводите числа к определенной точности через Normalize().

Meinen Sie die Normalize(), die Begun vorgeschlagen hat?

Entschuldigung, ich meinte den Standard NormalizeDouble.