[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 56

 
Sergstuddek:


(Die Klasse ist gut, aber es gibt immer noch ein Problem)))

Ich verstehe es theoretisch, aber in der Praxis funktioniert es nicht, können Sie sich meinen Code ansehen und mir sagen, was falsch ist

Ich verstehe, dass dies eine sehr einfache EA ist, aber ich bin gerade erst meine Reise)))) und ich habe bereits ein Problem

// Das Wesen des Expert Advisors besteht darin, dass er zuerst die erste Kauforder eröffnet
// setzt dann Anschläge in zwei Richtungen
// auf einer Seite als Fortsetzung eines offenen Auftrags
// auf der anderen Seite zweimal mehr im Falle einer Chartumkehr
// Stops werden in Bezug auf den letzten vom Berater eröffneten Auftrag gesetzt
// bei jeder neuen Eröffnung eines neuen schwebenden Auftrags werden alle vorherigen gelöscht
// und neue Pending Stops sind bereits relativ zu einer neuen offenen Order geöffnet.


Unter Stops kann man zwei Dinge verstehen: Stop-Orders (Take Profit und Stop Loss) und Stop-Orders (Bystop und Sell Stop). Was hier mit "Haltestellen" gemeint ist, verstehen wahrscheinlich nur Sie selbst. Bitte geben Sie die Begriffe genau an. Dem Computer müssen genaue Anweisungen gegeben werden. Die Beschreibung muss außerdem so präzise wie möglich sein
 
drknn:
Unter Stops kann man zwei Dinge verstehen: Stop-Orders (Take Profit und Stop Loss) und Stop-Orders (Bystop und Sell Stop). Was hier mit "Haltestellen" gemeint ist, verstehen wahrscheinlich nur Sie selbst. Bitte geben Sie die Begriffe genau an. Sie müssen dem Computer genaue Anweisungen geben. Die Beschreibung muss außerdem so präzise wie möglich sein

Entschuldigen Sie bitte die Ungenauigkeit, aber die Stop-Aufträge sind Stop-Aufträge (Buy Stop und Sell Stop)
 
Sergstuddek:

Ich entschuldige mich für die Ungenauigkeit: Ich meinte Stop-Orders (Buy Stop und Sell Stop).
void DeleteStopOrders()
{
  int res;
  for(int i=0;i<OrdersTotal();i++)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
    {
      if(OrderType()==OP_SELLSTOP)
        res=OrderDelete(OrderTicket());
      if(OrderType()==OP_BUYSTOP)
        res=OrderDelete(OrderTicket());
     }
  }
}


Diese Funktion ist nicht korrekt geschrieben. Die Aufträge sollten in der Auftragsliste von hinten nach vorne gesucht werden. Ihre Methode führt dazu, dass 1 Auftrag übersprungen wird, da sich die Auftragsliste nach dem Löschen um seine Positionen verschiebt. Die Schleife sollte wie folgt aufgebaut sein:

for (int i=OrdersTotal()-1;i>=0;i--){

Wenn der Auftrag nicht ausgewählt wird, brauchen Sie nicht zu brechen oder den Zyklus zu beenden, sondern Sie müssen den Grund für die Nichtauswahl des Auftrags herausfinden. Dies ist wie folgt:

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
  Print("При выборе ордера № ",i," произошла ошибка № ",GetLastError());

res=OrderDelete(OrderTicket()); - auch dies ist nicht korrekt genug. Die Funktion OrderDelete() hat einen booleschen Typ. Und neben dem Auftrag zur Löschung des Auftrags müssen wir auch die Situation behandeln, wenn der Auftrag nicht gelöscht werden kann. Mit anderen Worten: Es geht so:

res=OrderDelete(OrderTicket());
if(!res){
  Print("Ордер № ",OrderTicket()," удалить не получилось - ошибка № ",GetLastError());
}

Den Rest werde ich mir später ansehen.

 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  if (CalculateCurrentOrders1(Symbol())==0)
   OpenBuy();
  if (CalculateCurrentOrders2(Symbol())<=1)
  DeleteStopOrders();
  if (CalculateCurrentOrders2(Symbol())<=1)
   OpenStops();
//----
   return(0);
}

Der Code der Startfunktion ist nicht korrekt geschrieben.

Mit der ersten Funktion addieren Sie Kauf- und Verkaufsaufträge. Sie müssen die Kauf- und Verkaufsaufträge getrennt zählen. Hier ist der Punkt. Wenn 1 Kaufauftrag auf dem Markt ist, dann sollte der Kaufstopp mit einem größeren Lot gesetzt werden. Oder? Und wenn ein Verkaufsauftrag auf dem Markt ist, dann sollte der Kaufstopp mit einem normalen Lot und der Verkaufsstopp mit einem größeren Lot gesetzt werden. Wie können Sie feststellen, welcher Auftrag auf dem Markt offen ist, wenn Sie Kauf- und Verkaufsaufträge in einer Funktion zusammenfassen? Versuchen Sie, den Code im Lichte dieser Tatsachen zu überarbeiten.

 

Können Sie mir sagen, wie ich den Verlauf automatisch vom Broker herunterladen kann? Es ist ein bisschen lästig, eine Stunde lang nach Hause zu drücken.

 
_dude_:

Können Sie mir bitte sagen, wie ich den Verlauf automatisch vom Broker herunterladen kann? Es ist ein bisschen unbequem, eine Stunde lang nach Hause zu drücken.

Vadim Junko hat sich für Sie darum gekümmert. Skript zum Laden der Historie. Es gibt noch ein paar weitere in der Basis (Abschnitt Skripte).
 
gince:

Frage zum Indikator.

Der Indikator ist ein Kreuzindikator. Es zieht viele Pfeile auf die eine Seite, dann wieder viele auf die andere. So werden nur die ersten gezogen. Ich habe es auf die im Code beschriebene Weise versucht, aber die Pfeile ändern sich, wenn ich die Frames wechsle.

Bitte beraten Sie mich, wie ich es richtig mache.


Ich müsste mir den Indikator ansehen. Vielleicht gibt es eine Lösung
 
nemo811:
Bitte helfen Sie mir, meinen Expert Advisor zu korrigieren. Sie müssen dafür sorgen, dass es mit (eigenen und vom Benutzer eröffneten) Aufträgen des Währungspaares auf dem Chart funktioniert, auf dem es installiert ist. Wir meinen den Zeitpunkt der Festsetzung des Gewinns oder Verlusts. In der aktuellen Version wird beim Eintreten einer Bedingung (Erfassen des Einzahlungsprozentsatzes) versucht, alle Positionen (mit MAGIC=0) für alle Währungspaare zu schließen, was ich nicht benötige. Es ist notwendig, alle Währungspaare vollständig abzugrenzen. Ich danke Ihnen im Voraus.

Dasselbe müssen Sie auch in anderen Foren tun - das ist Spam, und Sie können eine Sperre bekommen.
 
Vinin:

Und dasselbe in verschiedenen Threads zu schreiben - das ist Spam und kann eine Sperre nach sich ziehen.

Ich entschuldige mich - wie immer will ich alles auf einmal machen))
 

Vielen Dank für Ihre Aufmerksamkeit und Ihr Verständnis ))

Ich konnte das Problem selbst lösen:

Eine knifflige Zeile eingefügt if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC) continue;

an einen ebenso heiklen Ort. Danach funktionierte alles wie vorgesehen.

Danke für den Tipp mit dem Magier. Ich bin kein Programmierer, so manchmal und nicht denken, etwas für den Mangel an Wissen.

Grund der Beschwerde: