Ich glaube, Deine OrderSend Funktion ist nicht ganz richtig.
int OrderSend( string symbol, // symbol int cmd, // operation double volume, // volume double price, // price int slippage, // slippage double stoploss, // stop loss double takeprofit, // take profit string comment=NULL, // comment int magic=0, // magic number datetime expiration=0, // pending order expiration color arrow_color=clrNONE // color );
https://docs.mql4.com/trading/ordersend
- docs.mql4.com
Hallo zusammen,
mein EA soll maximal eine Position gleichzeitig offen haben dürfen. Wenn Ausgestoppt wird oder bei einem Gegensignal geschlossen wird, darf eine Neue geöffnet werden - mehr nicht.
Das funktioniert auch im Strategietester. Im Live-Betrieb kommt es jedoch vor, dass nach dem Öffnen einer Position manchmal und scheinbar zufällig eine Zweite geöffnet wird - nicht direkt, sondern viele Minuten oder gar Stunden später. Allerdings auch nicht immer. Das System schein manchmal einfach zu vergessen, dass schon eine Position offen ist und schaltet meine boolische Prüfvariable "OffeneOrder" kurz auf false und schon ist eine zweite Position offen...
Was stimmt nicht mit der Handelsmechanik, bzw. warum verliert die "trans.order" aus der "void OnTradeTransaction" manchmal
scheinbar die Nummer der noch offenen Position?
Grüße und vielen Dank vorab
Du musst die Bedingungen für den Kauf einer Position ins Log schreiben und überprüfen, so kommst Du auf den Fehler.
Hallo zusammen und Danke für Eure Antworten!
ich habe die Sache jetzt mit der Funktion gelöst, die kannte ich darvor nicht:
bool OffeneOrder = false; if (PositionsTotal() == 1){ OffeneOrder = true; }
Es funktioniert damit jetzt zuverlässig.
PS: Die Ordernummer (nicht die Ticketnummer, so hab ich das nur genannt) habe ich aus der OnTradeTransaction gezogen. MT5 verknüpft Ordernummer und die vom Broker zugeweisene Ticketnummer normaerweise sowieso, auch wenn sie unterschiedlich sind.
Eine Frage habe ich aber noch:
PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL
Die hier benutze ich zwischen offenen Buy oder Sell-Positionen zu selektieren. In der Praxis dringt das System bei einer offenen Buy-Position aber auch in eine if-Bedigunge ein, die mit der == von oben eigentlich gesichert ist und macht mir die dann blöderweise zu, da eine close-Methode dahinter steht. Auch hier gilt - nur im Life-Betrieb, nicht im Tester.
Beispiel:
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL){ trade.PositionClose(TicketNr); }
Habe das jetzt zwar mit Strings gelöst, aber das kann es ja auch nicht sein... ist auch nicht so gut bei Verbindungsabbrüchen, keine Ahnung ob er dass dann noch blickt...
Was stimmt hier nicht?
Um weiteren Verwirrungen vorzubeugen: Ja, ich nutze MQL5
Mal eine grundsätzliche frage die du dir stellen solltest, handelst du im netting mode oder im hedge mode.
dementsprechend musst du deine positionen selektieren
wenn du bei der selektion auf das symbol vergisst, bzw auf die magic number, dann wird der ea im livebetrieb mehrere positionen nicht handeln können sofern du im hedge mode bist
Auf fragst du nach der zahl der positions, die geht über alle symbole.
deine eigene musst du dir mit position select raussuchen
Hallo amando,
der Handel läuft im hedge-mode.
Kannst du mir einen frei zugänglichen EA (oder eienn Artikel) empfehlen in dem das gut umgesetzt ist bei dem ich mir das beispielshaft abschauen kann?
Grüße
- 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,
mein EA soll maximal eine Position gleichzeitig offen haben dürfen. Wenn Ausgestoppt wird oder bei einem Gegensignal geschlossen wird, darf eine Neue geöffnet werden - mehr nicht.
Das funktioniert auch im Strategietester. Im Live-Betrieb kommt es jedoch vor, dass nach dem Öffnen einer Position manchmal und scheinbar zufällig eine Zweite geöffnet wird - nicht direkt, sondern viele Minuten oder gar Stunden später. Allerdings auch nicht immer. Das System schein manchmal einfach zu vergessen, dass schon eine Position offen ist und schaltet meine boolische Prüfvariable "OffeneOrder" kurz auf false und schon ist eine zweite Position offen...
Was stimmt nicht mit der Handelsmechanik, bzw. warum verliert die "trans.order" aus der "void OnTradeTransaction" manchmal scheinbar die Nummer der noch offenen Position?
Grüße und vielen Dank vorab
Tobse24