Danke für die Hilfe @MA-EA.
Das "for(i=OrdersTotal()-1;i>=0;i--)" und das "for(i = 0; i < OrdersTotal(); i++)" macht genau das gleiche und bei beispielsweise 3 offenen Ordern, wird die For-Schleife auch 3 mal eine Schleife machen.
Und egal wie du den EA programmierst, dieser muss für die Ausführung immer erst auf ein Chart installiert sein. Init/Deinit muss für die korrekte Ausführung im Code generell nicht vorhanden sein.
@traderdoc, dein Beitrag konnte mir diesmal nicht helfen, doch natürlich danke trotzdem.
Hier ist nun der fertige EA, der genau das macht, so wie ich es möchte:
Code:
int Trailing = 20;
int Profit = 80;
int Step = 2;
int MN = 1000;
int i, r;
double pBid, pAsk, pp;
double cal;
int init() {
return(0);
}
int deinit() {
return(0);
}
int start() {
for(i = 0; i < OrdersTotal(); i++) {
r = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
pp = MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderMagicNumber() == MN) {
if (OrderType() == OP_BUY) {
pBid = MarketInfo(OrderSymbol(), MODE_BID);
if (pBid - OrderOpenPrice() > Profit * pp) {
if (OrderStopLoss() < pBid - (Trailing + Step) * pp) {
cal = pBid - (Trailing * pp);
if (cal > OrderStopLoss()) r = OrderModify(OrderTicket(),OrderOpenPrice(),cal,OrderTakeProfit(),0,0);
}
}
}
if (OrderType() == OP_SELL) {
pAsk = MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderOpenPrice() - pAsk > Profit * pp) {
if (OrderStopLoss() > pAsk + (Trailing + Step) * pp) {
cal = pAsk + (Trailing * pp);
if (cal < OrderStopLoss()) r = OrderModify(OrderTicket(),OrderOpenPrice(),cal,OrderTakeProfit(),0,0);
}
}
}
}
}
return(0);
}