Schaue mal bitte mit dem Debugger in diese beiden variablen request.order request.sl wenn er da durchläuft.
request.sl=NormalizeDouble(1.0,_Digits);request.order=Ticket;
und dann berichte mal
request.order=2
request.sl=1.0
Hier liegt dein Problem:
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { ulong Ticket=PositionGetTicket(0);
Du prüfst erst ob es eine BUY Position ist
Und dann wählst du blind mit PositionGetTicket(0) blind eine "andere" Position aus.
Aber der Fehler liegt weiter vorn.
Auf einem Hedge Konto kann es mehrer Positionen von einem Symbol geben
Deswegen funktioniert
PositionSelect
Im Netting Mode (ACCOUNT_MARGIN_MODE_RETAIL_NETTING und ACCOUNT_MARGIN_MODE_EXCHANGE) kann nur eine Position pro Symbol vorhanden sein, die das Ergebnis eines oder mehreren Trades darstellt. Man darf Positionen und aktuelle Pending Orders, die auch im Tab Handel in der Werkzeugleiste angezeigt werden, nicht verwechseln.
Bei einer unabhängigen Verrechnung von Positionen (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) können gleichzeitig mehrere Positionen pro Symbol vorhanden sein. In diesem Fall wählt PositionSelect die Funktion mit dem kleinsten Ticket.
Die Funktion PositionSelect() kopiert die Daten über Position ins Programmumfeld und weitere Aufrufe PositionGetDouble(), PositionGetInteger() und PositionGetString() geben die früher kopierten Daten zurück. Das bedeutet, dass die Position selbst nicht mehr sein kann (oder ihr Volumen, ihre Richtung usw. haben sich verändert), aber die Daten dieser Position können erhalten werden. Für bestimmte Erhaltung der frischen Daten über die Position ist es empfehlenswert, die Funktion PositionSelect() aufzurufen, bevor man frische Daten aufruft.
Ich wusste schon vorher, dass es am Hedging Modus liegt. Allerdings weiß ich nicht, was ich am Code dafür ändern muss.
Du müsstest wenn der Code für beide Konto Arten funktionieren soll (was eigentlich kaum Sinn macht) eine Abfrage am Anfang machen welches Konto aktiv ist.
Der EA wird ja eigentlich grundlegend anders da du ja viel mehr Positionen verwalten kannst und auch möchtest.
Lasse den erstmal so wenn er auf dem Netting Konto läuft und baue einen grundlegend neuen auf . Das ist sinnvoller.
Nicht zu viele Baustellen gleichzeitig ! ...
Guck dir mal die Reihe an
https://www.mql5.com/de/articles/2166
Sind 6 Teile wo auch der Hedge Modus erklärt und eingebaut wird.
Alles mal durcharbeiten.
Aber bitte frage mich nicht warum die Teile nicht miteinander verlinkt sind ..... MQL5 Geheimniss :-) immer fleißig suchen
- 2016.04.07
- Vasiliy Sokolov
- www.mql5.com
- 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.
Guten Tag,
ich arbeite schon seit längerer Zeit an einem EA, nun aber im Hedging Modus. Und nun habe ich das Problem, dass ich keinen StopLoss mehr für Positionen setzten kann (Fehlercode: Angeblich ist die Position nicht vorhanden) . Woran kann das liegen?
Des Weiteren ist erwähnenswert, das ich einen TrailingStop einbauen will und deswegen einen Umweg mache.