Könnten Sie mich bitte beraten, ist es möglich, ein Update des Builds in MT4 zu erzwingen? Es wird nicht aktualisiert, wenn ich das Terminal neu starte.
Meine Herren Fachleute, ich brauche wieder Ihre Hilfe!
Unten ist ein Codeschnipsel, der für das Schließen von Geschäften verantwortlich ist, aber die Sache ist die, dass wenn schwebende Aufträge nicht ausgeführt werden, sie nicht gelöscht werden, ich kann nicht herausfinden, warum. Aber wenn ich einen schwebenden Auftrag, der bereits ausgeführt wurde, schließen muss, läuft alles korrekt, und wenn der Auftrag nicht ausgeführt wurde, bleibt er einfach hängen, bis er ausgeführt wird...
Nachfolgend finden Sie einen Codeschnipsel, der für das Schließen von Geschäften verantwortlich ist, aber die Sache ist die, dass, wenn schwebende Aufträge nicht ausgeführt werden, sie nicht gelöscht werden, ich kann nicht verstehen, warum.
Ich habe eine Funktion in meinem EA, um 1/3 des offenen Lots zu schließen, wenn Stoploss bei Breakeven ausgelöst wird, aber aus irgendeinem Grund funktioniert es nicht.
Können Sie mir sagen, was los ist?
//======================================================================================= void BuyCloseOneThird(string sy="", int op=-1, int mn=-1) {
double pr=0;
int i, k=OrdersTotal(), np=-1;
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && OrderType()==OP_BUY) {
if (mn<0 || OrderMagicNumber()==mn) {
if (Bid>OrderOpenPrice() && Bid==OrderStopLoss()) {
if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES)) {
ClosePosBySelect();}
}
}
}
}
}
}
//======================================================================================= void SellCloseOneThird(string sy="", int op=-1, int mn=-1) {
double pr=0;
int i, k=OrdersTotal(), np=-1;
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && OrderType()==OP_BUY) {
if (mn<0 || OrderMagicNumber()==mn) {
if (Ask<OrderOpenPrice() && Ask==OrderStopLoss()) {
if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES)) {
ClosePosBySelect();}
}
}
}
}
}
}
//+------------------------------------------------------------------+void ClosePosBySelect() {
bool fc;
color clClose;
double pa, pb, pp;
int err, it;
double ll = MathCeil(OrderLots() / 3.0 * 10.0) / 10.0;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
for (it=1; it<=5; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if (OrderType()==OP_BUY) {
pp=pb; clClose=Red;
} else {
pp=pa; clClose=Blue;
}
ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
if (fc) {
PlaySound("wave"); break;
} else {
err=GetLastError();
if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
Print(OrderTicket()," Ask=",pa," Bid=",pb," pp=",pp);
Print("sy=",OrderSymbol()," ll=",ll," sl=",OrderStopLoss(),
" tp=",OrderTakeProfit()," mn=",OrderMagicNumber());
Sleep(1000*5);
}
}
}
}
Ich habe eine Funktion in meinem EA, um 1/3 des offenen Lots zu schließen, wenn Stoploss bei Breakeven ausgelöst wird, aber aus irgendeinem Grund funktioniert es nicht.
Können Sie mir sagen, was los ist?
Wahrscheinlich, weil Sie zuerst das Los berechnen und dann
Verwenden Sie die Funktion NormalizeDouble(lot,2)
Ich danke Ihnen. Ich vermute, das ist es, wonach ich gesucht habe.
Vielen Dank für die Diskussion. Auch Ihre Informationen werden sich als nützlich erweisen.
Wo versteckt sich hier der Fehler ')'? - falsche Parameter zählen 4 mal? Vielleicht sollte es nicht so geschrieben werden?
Wo versteckt sich hier der Fehler ')'? - falsche Parameter zählen 4 mal? Vielleicht ist dies nicht der richtige Weg, es zu schreiben?
Meine Herren Fachleute, ich brauche wieder Ihre Hilfe!
Unten ist ein Codeschnipsel, der für das Schließen von Geschäften verantwortlich ist, aber die Sache ist die, dass wenn schwebende Aufträge nicht ausgeführt werden, sie nicht gelöscht werden, ich kann nicht herausfinden, warum. Aber wenn ich einen schwebenden Auftrag, der bereits ausgeführt wurde, schließen muss, läuft alles korrekt, und wenn der Auftrag nicht ausgeführt wurde, bleibt er einfach hängen, bis er ausgeführt wird...
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
Magic = OrderMagicNumber();
orderticket = OrderTicket();
if (OrdersTotal() == 1 && Magic == 111 && OrderType( ) == 0)
{
if (H1_BUY_5 == 0 || H1_BUY_1 == 0)
{
OrderClose(orderticket, lots, Bid, 5, Yellow);
if (OrdersTotal() == 1) OrderDelete(orderticket, Brown);
}
}
Xaoss1990:
Nachfolgend finden Sie einen Codeschnipsel, der für das Schließen von Geschäften verantwortlich ist, aber die Sache ist die, dass, wenn schwebende Aufträge nicht ausgeführt werden, sie nicht gelöscht werden, ich kann nicht verstehen, warum.
if (OrdersTotal() == 1 && Magic == 111 && OrderType( ) == 0)
das stört
Ich habe eine Funktion in meinem EA, um 1/3 des offenen Lots zu schließen, wenn Stoploss bei Breakeven ausgelöst wird, aber aus irgendeinem Grund funktioniert es nicht.
Können Sie mir sagen, was los ist?
Ich habe eine Funktion in meinem EA, um 1/3 des offenen Lots zu schließen, wenn Stoploss bei Breakeven ausgelöst wird, aber aus irgendeinem Grund funktioniert es nicht.
Können Sie mir sagen, was los ist?
Wahrscheinlich, weil Sie zuerst das Los berechnen und dann