Brauche Hilfe bei Fehler #130 ungültiger Stoploss

 
Liebes Forum,

Ich habe gesehen, dass viele im Forum mit diesem Fehler zu kämpfen haben.
So wie ich die anderen Threads verstanden habe, kann der Fehler verursacht werden durch
a: Einstellung eines Stoploss-Wertes, der zu nahe am aktuellen Kurs liegt
b: eine falsche Anzahl von Ziffern nach 0

In Bezug auf a:
So wie ich es verstanden habe. MarketInfo(Symbol(), MODE_STOPLEVEL)) sollte mir den Mindestabstand liefern, den der Stoploss haben muss.
Hier also ein Beispiel für einen fehlgeschlagenen Handel:

Marekt Info:
Datum: 2011/9/15 16:31
Symbol: #ESU1
Stop Level: 75.00000000
Punkt: 0.01000000
Tick-Größe: 0.25000000
Tick-Wert: 12.50000000
Ziffern: 2.00000000

Der Mindestabstand sollte also Stop Level * Point sein, richtig? also 0.75
Hier ist also meine fehlgeschlagene Order:
2011.09.15 16:32:07 '393930': order sell 18.00 #ESU1 opening at 1201.00 sl: 1202.35 tp: 0.00 failed [Invalid S/L or T/P]
Fehler ist: 130 / ungültige Stops

Stoploss ist 1,35 von der Eröffnung entfernt. Es sollte also in Ordnung sein. Auch die Ziffern (b) stimmen überein.
Warum bekomme ich also diesen Fehler?

Außerdem ist dieser Fehler schwer zu reproduzieren. Manchmal tritt er auf. Manchmal auch nicht.
Manchmal erscheint er mehrere Male hintereinander.

Irgendwelche Ideen?
Vielen Dank im Voraus!

Shinobi
 
Wie hoch war der Spread zu dem Zeitpunkt, als der Fehler auftrat?
 

Sie können einen Fehlerfall in Ihrem Code machen und RefreshRates() verwenden.

Ich weiß nicht, wie man das aus dem Stegreif macht, aber vielleicht kann man so etwas machen.

if(Handel==Fall)

{

int ErrorCode= GetLastError();

if (FehlerCode=130)

{

RefreshRates();

}

}

auch dieser Code könnte nicht richtig sein, also sollten Sie googeln, wie man es macht.

auch, wenn u havent bereits tun, die NormalizeDouble-Funktion, um die Zahlen zu runden.

 
35806:

Sie können einen Fehlerfall in Ihrem Code erzeugen und RefreshRates() verwenden.

Wie wird das helfen?
 
RaptorUK:
Wie soll das helfen?

Es könnte ein vorübergehendes Problem sein. Er sagte, es sei abhängig von der Groß- und Kleinschreibung, so dass eine Aktualisierung der Preise das Problem beheben könnte.
 
35806:

Es könnte ein vorübergehendes Problem sein. Er sagte, es sei abhängig von der Groß- und Kleinschreibung, so dass eine Aktualisierung der Tarife das Problem beheben könnte.
Wir haben keinen Code gesehen. . wenn er keine vordefinierten Variablen verwendet, wird keine Menge an RefreshRates helfen.
 

wahr.

 
danke für Ihre Gedanken.

Raptor, ich weiß nicht, den Spread für den Handel oben. Ich habe eine Log-Ausgabe in den Code eingefügt, wenn der Fehler das nächste Mal auftritt, kann ich Ihnen den Spread mitteilen.
Aber können Sie mir sagen, warum der Spread wichtig ist? Inwiefern muss ich den Spread berücksichtigen, wenn ich den Stoploss festlege?

Ich sende eine Order zum Beispiel mit:
int ticket = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, Green);

Die einzige vordefinierte Variable, die ich beim Senden von Orders verwende, ist also: Ask
SLIPPAGE und TAKEPROFIT sind beide 0.
EXPERT_ID ist eine eindeutige magische Zahl
position_size ist eine ganze Zahl, z.B. 3
initial_stop ist mein Stoploss, der (im Falle des obigen Beispiels) Bid - Risk ist.
Das Risiko ist ein Wert, der größer ist als (MODE_STOPLEVEL * Point), im Falle des Handels im ersten Beitrag. Das Risiko war: 1.35
 
shinobi:
Danke für Ihre Gedanken.

Raptor, ich kenne den Spread für den obigen Handel nicht. Ich habe eine Log-Ausgabe in den Code eingefügt, wenn der Fehler das nächste Mal auftritt, werde ich in der Lage sein, Ihnen den Spread zu nennen.
Aber können Sie mir sagen, warum der Spread wichtig ist? Inwiefern muss ich den Spread berücksichtigen, wenn ich den Stoploss festlege?


Gut gemacht, dass Sie den Druck für die Zukunft in das Protokoll aufgenommen haben :-)

Ich muss immer lange darüber nachdenken, wo Spread berücksichtigt werden muss und wo nicht ... ich scheine eine mentale Blockade zu haben, wenn es darum geht ... aber ich denke, ich habe das richtig gemacht.

Bei einem Buy sollte es keine Rolle spielen, Buy at Ask, SL will happen at Bid, also ist der Spread bereits in Ihrem OpenPrice berücksichtigt. Bei einem Sell ist es eine andere Sache ... Sie verkaufen zum Bid und Ihr SL wird vom Ask-Kurs übernommen ... wo ist der Ask-Kurs ? nun, das hängt vom Spread zu der Zeit ab ... Ich denke, das ist richtig, bitte denken Sie darüber nach und sehen Sie, ob es Sinn macht... Ich lasse mich gerne korrigieren, wenn ich falsch liege... :-)

 
int ticket = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, Green);
EAs müssen für 4/5-stellige Broker, TP, SL, UND Slippage anpassen. Bei ECN-Brokern müssen Sie öffnen und DANN Stops setzen.
//++++ These are adjusted for 5 digit brokers.
int     pips2points;    // slippage  3 pips    3=points    30=points
double  pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int     Digits.pips;    // DoubleToStr(dbl/pips2dbl, Digits.pips)
int     init(){
     if (Digits % 2 == 1){      // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262
                pips2dbl    = Point*10; pips2points = 10;   Digits.pips = 1;
    } else {    pips2dbl    = Point;    pips2points =  1;   Digits.pips = 0; }
    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
//---- These are adjusted for 5 digit brokers.
    /* On ECN brokers you must open first and THEN set stops
    int ticket = OrderSend(...)
    if (ticket < 0)
       Alert("OrderSend failed: ", GetLastError());
    else if (!OrderSelect(ticket, SELECT_BY_POS))
       Alert("OrderSelect failed: ", GetLastError());
    else if (!OrderModify(OrderTicket()...)
       Alert("OrderModify failed: ", GetLastError());
     */
 
35806:

Es könnte ein vorübergehendes Problem sein. Er sagte, es sei abhängig von der Groß- und Kleinschreibung, so dass eine Aktualisierung der Tarife das Problem beheben könnte.
AFAIK RefreshRates() hat nichts mit dem Fehler 130 zu tun.