Gemeinschaft des Fachwissens - Seite 2

 
Für Haltestellen wäre es besser, eine "Abkühlphase" (ich weiß nicht, wie man das richtig nennt) einzuführen.

Wenn Sie einen Stopp mit einer Genauigkeit von einem Pip verfolgen, wird der Broker aufheulen und die Expert Advisors abschalten :)

Ich denke, das ist besser:
   if (MathAbs(CurrentStopLoss - NewStopLoss) > (Ask - Bid)*Koef) { // Ändern Sie den Stop Loss ................ }


D.h. wir ändern den Auftrag, wenn der neue Stopp um eine bestimmte Anzahl von Spreads (1 - 2) vom alten abweicht.
Ihr Problem ist hier automatisch gelöst.

 
Mak, danke für den Rat. Wird gemacht.
Nur hier ist das Problem anders - es wird versucht, _den_ gleichen Wert zu setzen... D.h. eine solche Prüfung schützt nicht vor Fehlern, sondern verringert nur deren Wahrscheinlichkeit =)
 
Nur hier ist das Problem anders - es wird versucht, _den_ gleichen Wert zu setzen... d.h. eine solche Prüfung schützt nicht vor Fehlern, sondern verringert nur deren Wahrscheinlichkeit =)

Höchstwahrscheinlich handelt es sich um einen Fehler im Text des EA.
Ich hatte ein ähnliches Problem, aber ich weiß nicht mehr, wie es behoben wurde.

Das obige Beispiel stellt jedoch sicher, dass alle Fehler im Skript
werden keine Versuche unternommen, denselben Wert einzustellen.
 
Только тут проблема в другом - оно пытается установить _на_то_же_значение_... т.е. такая проверка не спасёт от ошибки, а просто уменьшит её вероятность =)

Wahrscheinlich handelt es sich um einen Fehler im Text des Sachverständigen. Ich hatte ein ähnliches Problem, wie es behoben wurde, weiß ich nicht mehr. Das obige Beispiel stellt jedoch sicher, dass bei Fehlern im Skript nicht versucht wird, denselben Wert zu setzen.





Mak, dort befindet sich 1 Textzeile =
)_TrailingStop( orderticket, 50 );



Ich habe die Funktion genau so geschrieben, um solche Fehler zu vermeiden, und die Prüfung ist die gleiche, mit dem Unterschied, dass jeder Pip ausgearbeitet wird.
Wenn der Wert gleich ist (der Abstand zwischen dem Preis und dem Stopp ist in diesem Fall gleich 50), sollten Trailing Stops nicht funktionieren.
Außerdem funktioniert es in den meisten Fällen nicht =)))), und manchmal rutscht es aus irgendeinem Grund durch....

 
Vielleicht funktioniert NormalizeDouble manchmal anders?
Wird abgerundet oder verworfen?

Im Allgemeinen ist es besser, niemals fließende Typen auf Gleichheit zu vergleichen.
Die einzige Ausnahme:
double A,B; .......... A = .......; ............. B = A; ........... if (B == A) ........



Und über eine Zeile ...
In _TrailingStop gibt es eine Menge Zeilen,
und wenn es sogar 2 sind, gibt es schon einen Grund für Fehler :)

 
Was macht es, wegwerfen oder abrunden?
Ich bin auch neugierig ;)

Ich habe es hier bereits teilweise korrigiert: stattdessen
( orderstoploss == 0.0 ........ )


gemacht

wenn ( Auftragsstoppverlust <= 0 ......... )

und der Rest schien in Ordnung zu sein:

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





Renat, ich setze generell meine Hoffnungen auf dich =) es ist wahrscheinlich etwas so einfaches wie ein Winkel - und ich merke es einfach nicht...

 
Ich werde sehen, ob ich am Wochenende helfen kann.
 
Ich werde versuchen, an diesem Wochenende einen Blick darauf zu werfen und zu sehen, ob ich helfen kann.
Ich muss es richtig machen...
 
Es ist wahrscheinlich etwas so Einfaches wie ein Winkel - und ich merke es einfach nicht...

komposter, du irrst dich :) Wie das löffelbiegende Mädchen sagte: "Die Dinge sind nicht so, wie sie scheinen".
Die folgende Schleife gibt zum Beispiel 5 Zahlen aus:
for (double d = 0.1; d <= 0.5; d += 0.1) Print(d);


Wie viel wird im nächsten Zyklus gedruckt, wenn die Grenzen um 1,0 erhöht werden?

for (double d = 1.1; d <= 1.5; d += 0.1) Print(d);



Man würde erwarten, dass auch 5 Zahlen gedruckt werden, aber es werden nur 4 (vier) gedruckt. Ist das nicht großartig?
Wenn nach der Schleife eine weitere Zeile hinzugefügt wird:

Print("d=" + d + "(d <= 1,5)=" + (d <= 1,5));


erhalten wir:

d=1.50000000 (d <= 1.5)=0



Fast wie bei Ihnen mit einem Anschlag, aber grundlegender :). Das Problem ist so alt wie der erste Computerchip:
Computer verwenden die binäre Arithmetik und Menschen die dezimale Arithmetik. Beim Abrunden treten Artefakte auf.

Das von Mak vorgeschlagene "Aufrunden" hilft, wenn Sie ein grundsätzliches Problem mit dem Runden haben, nicht einen trivialen Fehler.

Viele Leute denken, dass Finanzberechnungen spezielle Dezimalarithmetik-Bibliotheken verwenden MÜSSEN, aber auch diese können Fehler enthalten, manchmal
was manchmal schwerwiegende Folgen haben kann. Übrigens, Renat, welche Implementierung der Arithmetik verwenden Sie?

 
komposter

Ich habe kurz nachgeschaut (ich habe noch nicht nachgeforscht) und den Punkt gefunden, den Sie berechnen.
Versuchen Sie, es zu "entsorgen" und setzen Sie Point. Wahrscheinlich ist das das Problem (der Punkt in MarketInfo wird nicht immer so angezeigt, wie Sie es wünschen).