[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 118
Ich habe einen Code geschrieben, um zwei Pending Orders (BuyStop und SellStop) unter den Bedingungen a=true und b=true zu öffnen. Nach einiger Zeit schließt der EA beide Orders, bis ein neues Signal erscheint, aber manchmal öffnet der EA 2 Pending Orders in dieselbe Richtung. Warum passiert das und wie kann man diesen "Fehler" vermeiden?
if (a=true && b=true) { int OrderCount = OrdersTotal(); if (OrderCount>1) return(0); ticket1=OrderSend(Symbol(), OP_BUYSTOP, getLot(), PriceOpen_Buy, slippage, PriceOpen_Sell,0,0,Green); Sleep(1000);
for (int i=OrdersTotal()-1; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; if (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket()); if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket()); if (OrderType()==OP_SELL ) OrderClose(OrderTicket(),OrderLots(),Ask, Slippage); if (OrderType()==OP_BUY ) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage); }
zurück(0);
}
Können Sie mir einen Tipp geben?
Ich danke Ihnen im Voraus
Ich habe mir Ihren Code nicht angesehen, aber... um NICHT zwei oder mehr Aufträge auf EIN Signal zu platzieren, prüfen Sie VOR der Platzierung eines Auftrags: Gibt es bereits einen Auftrag auf dieses Signal? Wenn nicht - aufstellen, wenn doch - rauchen.
Hallo, können Sie mir sagen, warum im neuen Build 451 in MetaEditor beim Kompilieren die zweite ex 4-Datei nicht im Expertenordner neben der mq 4-Datei erscheint?
Hier können Sie deutlich sehen, dass der TP- und SL-Kurs unter bzw. über dem Ask- und Bid-Kurs liegen, d.h. alles ist korrekt. Aber aus irgendeinem Grund bekomme ich einen Änderungsfehler, weil die Haltestelle falsch ist. Wie das?
Hier können Sie deutlich sehen, dass der TP- und SL-Kurs unter bzw. über dem Ask- und Bid-Kurs liegen, d.h. alles ist korrekt. Aber aus irgendeinem Grund bekomme ich einen Änderungsfehler, weil die Haltestelle falsch ist. Wie das?
Lesen Sie überhaupt, was gescholten wird?
ERR_INVALID_FUNCTION_PARAMVALUE
4051
Ungültiger Funktionsparameterwert
Wenn Sie etwas nicht verstehen, werden wir es mit dem Rest der Welt klären...
Wenn Sie einen schwebenden Auftrag erteilen, sollte die Zeichenkette nicht ganz relevant sein. Es sollte geprüft werden, ob es mit dem in MarketInfo(Symbol(), MODE_STOPLEVEL) festgelegten Mindestabstand übereinstimmt. Das erste, was mir sofort ins Auge fiel.
Die zweite Möglichkeit besteht darin, den Preis zu drucken, zu dem der Auftrag erteilt wurde. Stop und Take sollten nicht in Bezug auf Ask und Bid gesetzt werden, sondern in Bezug auf den Preis, zu dem die Order gesetzt wird.
Sehen Sie sich die Parameter an, die an die aufzurufende Funktion übergeben werden, und wenn nichts klar ist, werden wir es mit der Welt klären...
ZS. Wenn Sie einen schwebenden Auftrag erteilen, wird die Zeile
if (price < Bid)
Dies ist nicht ganz angemessen. Sie sollten prüfen, ob der zulässige Mindestabstand mit dem in MarketInfo(Symbol(), MODE_STOPLEVEL) angegebenen Wert übereinstimmt. Das erste, was mir sofort ins Auge fiel.
Normalerweise treffe ich auf solche Kontrollen bei der Änderung von Aufträgen, aber nicht bei der Eröffnung. Ich habe es bereits gesehen. Wenn ich den ausstehenden Preis auf bystop setze, ist das ein Fehler. Und wenn ich einen Stop von 10 Pips setze, wird er sicherlich höher sein als der StopLoss-Wert. Ich handle nicht auf Ticks :)
Zweitens: Drucken Sie den Preis, zu dem der Auftrag erteilt wurde. Stop und Take sollten nicht in Bezug auf Ask und Bid platziert werden, sondern in Bezug auf den Kurs, zu dem die Order gesetzt wird
Ich gehe davon aus, dass es sich um eine Änderung handelt? Schließlich sind Bid und Ask für uns wichtig, wenn wir den Auftrag eröffnen. Ich habe mit dem obigen Beitrag alles in Ordnung gebracht.
Ich möchte einen EA auf mehreren Fenstern gleichzeitig arbeiten lassen. Für jedes Instrument kann jedoch nur ein Auftrag eröffnet werden. Deshalb gibt es jetzt eine Bedingung:
int total = OrdersTotal();
if (Summe<1) { Analyse und Positionsblock öffnen} sonst { Analyse und Positionsblock schließen }
Wenn ich nun zwei Symbole gleichzeitig öffne, wird die Arbeit an dem anderen Symbol blockiert, wenn ich eines der beiden öffne. Deshalb habe ich mir etwas Ähnliches ausgedacht:
Nachmittags.
Ich habe einen Code geschrieben, um zwei Pending Orders (BuyStop und SellStop) unter den Bedingungen a=true und b=true zu öffnen. Nach einiger Zeit schließt der EA beide Orders, bis ein neues Signal erscheint, aber manchmal öffnet der EA 2 Pending Orders in dieselbe Richtung. Warum passiert das und wie kann man diesen "Fehler" vermeiden?
if (a=true && b=true)
{
int OrderCount = OrdersTotal();
if (OrderCount>1) return(0);
ticket1=OrderSend(Symbol(), OP_BUYSTOP, getLot(), PriceOpen_Buy, slippage, PriceOpen_Sell,0,0,Green);
Sleep(1000);
ticket2=OrderSend(Symbol(), OP_SELLSTOP, getLot(), PriceOpen_Sell, slippage, PriceOpen_Buy,0,0,Green);
Sleep(1000*59*TimeFrame);
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket());
if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket());
if (OrderType()==OP_SELL ) OrderClose(OrderTicket(),OrderLots(),Ask, Slippage);
if (OrderType()==OP_BUY ) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage);
}
zurück(0);
}
Können Sie mir einen Tipp geben?
Ich danke Ihnen im Voraus
Hallo,
Ist es möglich, in den Einstellungen einen Zeitplan mit einer festen Gewichtung 1:1 einzugeben?
Sagen Sie mir, wie man das macht, wenn es möglich ist.
Vielen Dank im Voraus.
Diese Bibliothek kann.
Abschnitt "3.3 Funktion zum Setzen von Diagrammeigenschaften" Funktion ServiceSetScaleFix1To1().
Die Bibliothek funktioniert nur mit den russischen und englischen Lokalisierungen. Das kann auch bei Ihnen funktionieren.
Hier ist die Funktion der Auftragseröffnung:
Hier ist der Ausdruck der Parameter:
Hier können Sie deutlich sehen, dass der TP- und SL-Kurs unter bzw. über dem Ask- und Bid-Kurs liegen, d.h. alles ist korrekt. Aber aus irgendeinem Grund bekomme ich einen Änderungsfehler, weil die Haltestelle falsch ist. Wie das?
Hier ist die Funktion der Auftragseröffnung:
Hier ist der Ausdruck der Parameter:
Hier können Sie deutlich sehen, dass der TP- und SL-Kurs unter bzw. über dem Ask- und Bid-Kurs liegen, d.h. alles ist korrekt. Aber aus irgendeinem Grund bekomme ich einen Änderungsfehler, weil die Haltestelle falsch ist. Wie das?
Lesen Sie überhaupt, was gescholten wird?
Wenn Sie etwas nicht verstehen, werden wir es mit dem Rest der Welt klären...
ZZY. Wenn Sie einen schwebenden Auftrag erteilen, wird die Zeichenfolge
if (price < Bid)Wenn Sie einen schwebenden Auftrag erteilen, sollte die Zeichenkette nicht ganz relevant sein. Es sollte geprüft werden, ob es mit dem in MarketInfo(Symbol(), MODE_STOPLEVEL) festgelegten Mindestabstand übereinstimmt. Das erste, was mir sofort ins Auge fiel.
Die zweite Möglichkeit besteht darin, den Preis zu drucken, zu dem der Auftrag erteilt wurde. Stop und Take sollten nicht in Bezug auf Ask und Bid gesetzt werden, sondern in Bezug auf den Preis, zu dem die Order gesetzt wird.
Diese Bibliothek kann.
Abschnitt "3.3 Funktionen zum Einstellen von Grafikeigenschaften" Funktion ServiceSetScaleFix1To1().
Die Bibliothek arbeitet nur mit russischen und englischen Lokalisierungen. Das kann auch bei Ihnen funktionieren.
Lesen Sie überhaupt, was gescholten wird?
Schauen Sie sich die Parameter an, die an die aufgerufene Funktion übergeben werden. Wenn gar nichts mehr klar ist, werden wir das in Ruhe klären...
Natürlich lese ich es, deshalb bin ich ja neugierig. Ich habe alle Eingabeparameter entkoppelt.
Das habe ich bekommen:
bool OpenSell(double price) { int ticket = -1; double SL = OrderOpenPrice() + i_sl * pt; double TP = OrderOpenPrice() - i_tp * pt; if (price < Bid) ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(price), 3, 0, 0, NULL, i_magic, 0); if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true)) { if (i_sl > 0 && OrderStopLoss() == 0) { Print("ND(price) = ", DoubleToStr(ND(price),Digits)); Print("ND(SL) = ", DoubleToStr(ND(SL),Digits)); Print("ND(TP) = ", DoubleToStr(ND(TP),Digits)); Print("ND(OOP) = ", DoubleToStr(ND(OrderOpenPrice()),Digits)); if (!OrderModify(ticket, ND(OrderOpenPrice()), ND(SL), ND(TP), 0, Red)) { Print ("Ошибка установки первичного стопа для шортов ", OrderType(), " - ", GetLastError()); Print("pt = ", pt); Print("Ask = ", Ask); Print("Bid = ", Bid); Print("SL_s = ", OrderOpenPrice() + i_sl * pt); Print("TP_s = ", OrderOpenPrice() - i_tp * pt); } } } return (true); }Hier ist der Inhalt des Protokolls:
Einige der Aufträge werden geändert, andere nicht. Die Werte von ND(TP), ND(SL) zu Beginn wurden auf den Zufallswert zurückgesetzt. Warum?
Die Normalisierungsfunktion stammt übrigens von mir:
Lesen Sie überhaupt, was gescholten wird?
Sehen Sie sich die Parameter an, die an die aufzurufende Funktion übergeben werden, und wenn nichts klar ist, werden wir es mit der Welt klären...
ZS. Wenn Sie einen schwebenden Auftrag erteilen, wird die Zeile
if (price < Bid)Dies ist nicht ganz angemessen. Sie sollten prüfen, ob der zulässige Mindestabstand mit dem in MarketInfo(Symbol(), MODE_STOPLEVEL) angegebenen Wert übereinstimmt. Das erste, was mir sofort ins Auge fiel.
Normalerweise treffe ich auf solche Kontrollen bei der Änderung von Aufträgen, aber nicht bei der Eröffnung. Ich habe es bereits gesehen. Wenn ich den ausstehenden Preis auf bystop setze, ist das ein Fehler. Und wenn ich einen Stop von 10 Pips setze, wird er sicherlich höher sein als der StopLoss-Wert. Ich handle nicht auf Ticks :)
Zweitens: Drucken Sie den Preis, zu dem der Auftrag erteilt wurde. Stop und Take sollten nicht in Bezug auf Ask und Bid platziert werden, sondern in Bezug auf den Kurs, zu dem die Order gesetzt wird
Ich gehe davon aus, dass es sich um eine Änderung handelt? Schließlich sind Bid und Ask für uns wichtig, wenn wir den Auftrag eröffnen. Ich habe mit dem obigen Beitrag alles in Ordnung gebracht.
Guten Tag,
Ich möchte einen EA auf mehreren Fenstern gleichzeitig arbeiten lassen. Für jedes Instrument kann jedoch nur ein Auftrag eröffnet werden. Deshalb gibt es jetzt eine Bedingung:
int total = OrdersTotal();
if (Summe<1) { Analyse und Positionsblock öffnen} sonst { Analyse und Positionsblock schließen }
Wenn ich nun zwei Symbole gleichzeitig öffne, wird die Arbeit an dem anderen Symbol blockiert, wenn ich eines der beiden öffne. Deshalb habe ich mir etwas Ähnliches ausgedacht:
int total = OrdersTotal();
int cnt;
if(total>0)
{
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol())
{
Symbol_FLAG = true;
}
}
}
if(total<1 || total>0 && Symbol_FLAG == false) { Analyse und Öffnen des ptposition-Blocks}
aber auf dem Testgerät funktioniert es nicht...
Vielleicht können Sie mir sagen, ob ich etwas Unrealistisches vorhabe?