[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 434

 
Ist es möglich, das Mindestkapital anhand historischer Auftragsdaten zu berechnen?
 
forexnew:
Ist es möglich, das Mindesteigenkapital anhand historischer Daten über Aufträge zu berechnen?
.


Verstehen Sie eines - was ist unter "historischen Auftragsdaten " zu verstehen? Sie interessieren sich für den Schlusskurs, ob es sich um einen Gewinn oder Verlust für den ausgewählten Auftrag handelt...? Und was ist damit? Die Auftragshistorie zeigt nicht die Höhe des Kontoverlusts (den aktuellen Verlust), wenn der Auftrag im Markt war, d.h. der Verlust bei Abschluss kann z.B. 500 Währungseinheiten betragen, wird aber in der Auftragshistorie angezeigt, während das Eigenkapital auf -1000 Währungseinheiten gesunken sein könnte, als der Auftrag im Markt war. Bitte beachten Sie: Der Strategietester berechnet die Verluste auf dem Eigenkapital.

Die Antwort auf Ihre Frage: Sie können es nicht.

 
LOA:

Guten Tag!

Professionelle Hilfe - ohne Sie gehe ich nirgendwo hin!

Ich habe mich bereits mit diesem Thema befasst, aber den Fehler nicht gefunden, ich wollte es wirklich selbst verstehen, ich habe mir ein paar Tage lang den Kopf zerbrochen, aber bis jetzt nicht viel Erfahrung.

Die vorangegangene Diskussion endete mit der Idee, dass der Grund vielleicht im Code der Indikatoren liegt, die ich zu verwenden versuche.

Ich habe einen Indikator geschrieben (es ist meine ersten Schritte), die Aufschlüsselung der ME_Proboy_F5 zeigt

Das Problem ist..... Der Indikator wird nicht neu gezeichnet, wenn neue Balken gebildet werden, und er wird beim letzten Balken nach Erhalt eines Ticks auf Null zurückgesetzt. Es wird neu gezeichnet, wenn Sie das tf ändern oder die Eigenschaften anzeigen.

Der Indikator fordert Daten von anderen Indikatoren, alle außer einem ME_Proboy_F_5 (ich platziere seinen Code zu) funktioniert gut. Auch im zweiten Indikator kann ich keinen Fehler finden. Der Indikator wird neu gezeichnet, ist aber langsam, d.h. er wird beim zweiten Neustart korrekt angezeigt (ändern Sie die FF- oder Anzeigeeigenschaften).

Für Hilfe wäre ich sehr dankbar.

Proboy_Order_F5 - dies ist der Hauptindikator, nach dem ich frage

ME_Proboy_F5 - die zweite, die zweifelhaft ist


Es tut mir leid, dass ich Sie immer wieder mit meiner Frage belästige, aber ich möchte der Sache wirklich auf den Grund gehen.

Die Anwendung der Funktion limit=MathMin(Bars-1, Bars-counterd_bars-1) hat das Problem nicht gelöst, aber ich habe die Empfehlungen befolgt, am Programmierstil gearbeitet, ich hoffe, es hat funktioniert, unnötige Variablen losgeworden.

Zum Kern des Problems siehe oben

 
Roman.:


Eine Sache sollten Sie verstehen - was ist in "historischen Auftragsdaten" angegeben? Interessieren Sie sich für den Schlusskurs, den Gewinn oder den Verlust für den ausgewählten Auftrag...? Und was ist damit? Die Auftragshistorie zeigt nicht die Höhe des Kontoverlustes (aktueller Verlust), wenn der Auftrag auf dem Markt war, d.h. der Verlust bei Abschluss kann z.B. 500 Währungseinheiten betragen, wird aber in der Auftragshistorie angezeigt, während das Eigenkapital auf -1000 Währungseinheiten gesunken sein kann, wenn der Auftrag auf dem Markt war. Bitte beachten Sie: Der Strategietester berechnet den Verlust auf dem Eigenkapital.

Die Antwort auf Ihre Frage: Sie können es nicht.

Es gibt jedoch einen Indikator https://c.mql5.com/mql4/forum/2010/11/Equity_v7.zip, bei dem das Eigenkapital irgendwie auf der Grundlage historischer Daten berechnet wird. Ich habe noch nicht herausgefunden, wie man das macht. Vielleicht kann das Eigenkapital auf der Grundlage von Eckpunkten (Auftragsabschlüsse) berechnet werden, aber wie sieht es in Form einer einzigen Formel aus?

 

Hier ist der Code mit der Bedingung, dass Aufträge nach Ablauf der Zeit gelöscht werden sollen, dies ist die Bedingung

MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber

Wenn wir also diese Bedingung in den ersten if-Operator einfügen, warum berücksichtigt dann der andere Operator, der sich darin befindet, diese Bedingung nicht?

Das heißt, dieser Code funktioniert nicht und löscht alle ausstehenden Aufträge auf einmal.

  for(int counter=0;counter<OrdersTotal();counter++)
    {
    if(OrderSelect(counter,SELECT_BY_POS,MODE_TRADES) == false) break;

    if(MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
      if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
        {
        OrderDelete(OrderTicket());
        }
        
      }
    }

Und dieser Code funktioniert und löscht die Aufträge nicht auf einmal.

  for(int counter=0;counter<OrdersTotal();counter++)
    {
    if(OrderSelect(counter,SELECT_BY_POS,MODE_TRADES) == false) break;

    if(MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
      if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP && MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber)
        {
        OrderDelete(OrderTicket());
        }
        
      }
    }
 
sss2019:

Hier ist der Code mit der Bedingung, dass Aufträge nach Ablauf der Zeit gelöscht werden sollen, dies ist die Bedingung

Wenn wir also diese Bedingung in den ersten if-Operator einfügen, warum berücksichtigt dann der andere Operator, der sich darin befindet, diese Bedingung nicht?

Das heißt, dieser Code funktioniert nicht und löscht alle ausstehenden Aufträge auf einmal.

Und dieser Code funktioniert und löscht die Aufträge nicht auf einmal.

Beide Codes sind nicht korrekt, also analysiere ich Ihren Code und weiß nicht, was richtig/falsch ist.

Nehmen wir das einfachste Beispiel. Sie haben 2 Aufträge, die entfernt werden müssen.

1) for(int counter=0;counter<OrdersTotal();counter++)

der Beginn einer guten 0 ist weniger als zwei und die erste Ordnung ist sicher entfernt, aber dann

2)

 for(int counter=0;counter<OrdersTotal();counter++)

Zähler = 1, aber es gibt nur noch einen Auftrag! Das bedeutet, dass die Bedingung (1<1) nicht erfüllt ist, und die Schleife bricht ab...

 
ilunga:

Beachten Sie, dass beide Codes unkorrigiert sind, so dass ich nicht weiß, was bei Ihnen richtig/falsch funktioniert.

Nehmen wir das einfachste Beispiel. Sie haben 2 Aufträge, die beide gelöscht werden müssen.

1) for(int counter=0;counter<OrdersTotal();counter++)

Die gute 0 ist weniger als zwei und der erste Auftrag wurde erfolgreich gelöscht, aber dann

2)

Zähler = 1, aber es gibt nur noch einen Auftrag, d.h. die Bedingung (1<1) ist nicht erfüllt und die Schleife bricht ab...


Nein, aber genau das ist der Punkt: Zu diesem Zeitpunkt werden ALLE Aufträge sauber gelöscht. Das Problem ist, dass sie sofort gelöscht werden.
 
LOA:

Guten Tag!

Ich habe einen Indikator geschrieben (dies sind meine ersten Schritte), der die Aufschlüsselung von ME_Proboy_F5 deutlich zeigt


Gute erste Schritte, Olga Alexandrowna. 330 Zeilen Code

 
forexnew:

Es gibt jedoch einen Indikator https://c.mql5.com/mql4/forum/2010/11/Equity_v7.zip, bei dem das Eigenkapital irgendwie auf der Grundlage historischer Daten berechnet wird. Ich habe die Methode noch nicht verstanden. Vielleicht kann das Eigenkapital auf der Grundlage der Schlüsselmomente (Auftragsabschlüsse) berechnet werden, aber wie sieht das in Form einer Formel aus?




Machen Sie sich mit den Begriffen EQUITY und BALANCE vertraut und machen Sie sich mit dem Unterschied zwischen ihnen vertraut.

Dieser Indikator zeigt die Equity-Linie in Echtzeit an, da die Equity-Linie der aktuelle Gewinn/Verlust auf nicht geschlossenen Positionen ist. "Es ist möglich, die Equity wirklich durch Schlüsselpunkte (Orderschließungen) zu bestimmen" - nicht möglich, also würden Sie die Veränderung der Equity-Linie auf geschlossenen Positionen zählen.

"Das Eigenkapital wird irgendwie auf der Grundlage historischer Daten berechnet" - nein. Dieser Indikator berechnet die Equity-Linie für den aktuellen Moment - durch offene Positionen auf dem Markt.

 

Guten Abend, ich habe dies im Tutorial von S. Kovalev gefunden. Kowaljow, aber im MT4-Terminal gibt es nur "Wuff! Wer weiß, wo ich mir eine Reihe von Tonsignalen für verschiedene Operationen ausleihen kann, so dass ich nicht ständig auf den Computer schauen muss? Danke für einen möglichen Hinweis!

   switch(Mess_Number)                 // Elegir texto del mensaje segun el numero 
     {
      case 1:
         Graf_Text="Closed order Buy "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 2:
         Graf_Text="Closed order Sell "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 3:
         Graf_Text="Deleted pending order "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 4:
         Graf_Text="Opened order Buy "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 5:
         Graf_Text="Opened order Sell "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 6:
         Graf_Text="Placed pending order "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 7:
         Graf_Text="Order "+Number+" modified into the market one";
         PlaySound("Transform.wav");                                break;
      case 8:
         Graf_Text="Reopened order "+ Number;
         PlaySound("Bulk.wav");                                     break;
      case 9:
         Graf_Text="Partly closed order "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 10:
         Graf_Text="New minimum distance: "+ Number;
         PlaySound("Inform.wav");                                   break;
      case 11:
         Graf_Text=" Not enough money for "+
         DoubleToStr(Value,2) + " lots";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      case 12:
         Graf_Text="Trying to close order "+ Number;
         PlaySound("expert.wav");                                   break;
      case 13:
         if (Number>0)
            Graf_Text="Trying to open order Sell..";
         else
            Graf_Text="Trying to open order Buy..";
         PlaySound("expert.wav");                                   break;
      case 14:
         Graf_Text="Invalid password. EA doesn't function.";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      case 15:
         switch(Number)                 // Elegir texto del mensaje segun el numero del error 
           {
            case 2:   Graf_Text="Common error.";                    break;
            case 129: Graf_Text="Wrong price. ";                    break;
            case 135: Graf_Text="Price changed. ";                  break;
            case 136: Graf_Text="No prices. Awaiting a new tick.."; break;
            case 146: Graf_Text="Trading subsystem is busy";        break;
            case 5 :  Graf_Text="Old version of the terminal.";     break;
            case 64:  Graf_Text="Account is blocked.";              break;
            case 133: Graf_Text="Trading is prohibited";            break;
            default:  Graf_Text="Occurred error " + Number;//otros errores 
           }
         Color_GT=Red;
         PlaySound("Error.wav");                                    break;
      case 16:
         Graf_Text="Expert Advisor works only for EURUSD";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      default:
         Graf_Text="default "+ Mess_Number;
         Color_GT=Red;
         PlaySound("Bzrrr.wav");                    
     }
Grund der Beschwerde: