Zitat:
Zitat von TogoTiger
Wenn du eine Order erstellst, codierst du doch etwa sowas:
Ticketnummer = OrderSend(Symbol,OP_BUY, Lots,Ask, SlipPips,0,0, "Kauf-Order", MagicNumber,0,Green);
Wenn's geklappt hast, dann hast du die Nummer der Order in Ticketnummer
Diese gibst du beim Schliessen der Order wieder an. Die MagicNumber spielt beim Close keine Rolle.
Etwa so:
Geschlossen = OrderClose(Ticketnummer, Lots, Ausstiegspreis, SlipPips, Red);
Gruss
Erwin
|
Das funktioniert nur, wenn nur eine Order offen ist. Sobald eine weitere dieses Währungspaares offen ist oder zusätzlich eine andere Order eines anderen Währungspaares, dann funktioniert das nicht mehr.
Eine Möglichkeit wäre (hängt immer von den Erfordernissen ab!)
Code:
int BuyTicketNumber = 0, SellTicketNumber = 0;
double BuyLot, SellLot;
void CheckOrders() {
for (int i = 0; i < OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_Number) {
if (OrderType() == OP_BUY) {
BuyTicketNumber = OrderTicket();
BuyLot = OrderLots();
}
if (OrderType() == OP_SELL) {
SellTicketNumber = OrderTicket();
SellLot = OrderLots();
}
}
}
}
}
Bei diesem Code wird schon mal nach dem Währungpaarsymbol selektiert und zusätzlich nach der MagicNumber, d.h. es werden wirklich nur die Orders selektiert, die auch mit dem EA auf dem Chart dieses Währungspaares geöffnet wurden.
Aber auch dieser Code wird nur zuverlässig funktionieren, wenn maximal eine BuyOrder und/oder eine SellOrder dieses Währungspaares existiert, weil die weiteren Orders die Werte überschreiben würden.
Die erhaltene TicketNumber wird dann eingesetzt in die Close-Funktion. Die Slippage ist ein Wert in Pips, der die tolerierbare Abweichung des tatsächlichen Ausführungskurses von den CloseKursen Bid bzw. Ask angibt. Als erstes einfach mal z.B. eine 2 einsetzen. Bei einem 5-Digit-Broker entsprechend eine 20. Red ist die Farbe des grafischen Close-Dreiecks im Chart.
Code:
if (BuyTicketNumber > 0) OrderClose(BuyTicketNumber, BuyLot, Bid, Slippage, Red);
if (SellTicketNumber > 0) OrderClose(SellTicketNumber, SellLot, Ask, Slippage, Red);
Ansonsten, einfach fertige Programme anschauen, wie diese programmiert wurden.
traderdoc