Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 400

 
khorosh:


Vielen Dank, Juri.
Ich werde versuchen, Ihren Code zu verwenden, aber später, wie es braucht, um zerlegt werden und verstehen das Prinzip der Arbeit.
Oben beschriebene Schritt ist nicht schwer, dann werde ich haben, um jede benutzerdefinierte Funktion von Herrn "N" zu zerlegen, und dies hat den höchsten Grad der Komplexität, bzw. wird eine lange Zeit dauern, von 3 bis 10 Stunden (wie sie sagen: - Ein Tag. -).

Ich werde meinen Code fertigstellen, es ist "mein Lebensraum" und es gibt darin nichts zu lernen.

Nochmals vielen Dank, Juri.




borilunad:
1 - Er kann nichts tun! 2 - Möchte nur angeschrieben werden! 3 - Es ist müßig zu erklären! 4 - Überhaupt keine Logik! 5 - Ein unverbesserlicher Verlierer!

1 - Relativ gesehen, ja.
2 - Er hat mir geholfen, die Situation zu verstehen.
3 - Überhaupt nicht nutzlos.
4 - Aufgrund der Tatsache, dass Sie antworten - ja.
5 - Beendete das Semester mit fünf B's, alle anderen Noten - A's.

Sie haben gegen die Regeln des Forums verstoßen, ebenso wie ich.
Ihr Konto ist eine Verwarnung wert, mein Konto ist eine Sperre wert.

Bitte entschuldigen Sie die irrationalen Handlungen (als Reaktion auf die Kritik).
 
Link_x:

Vielen Dank, Juri.
Ich werde versuchen, Ihren Code zu verwenden, aber später, da ich ihn auseinandernehmen und das Funktionsprinzip verstehen muss.
Der oben beschriebene Schritt ist nicht schwierig, dann muss ich jede benutzerdefinierte Funktion von Herrn "N" auseinandernehmen, und dies hat den höchsten Grad an Komplexität, bzw. wird viel Zeit in Anspruch nehmen, von 3 bis 10 Stunden (wie sie sagen: - Ein Tag. -).

Ich werde meinen Code fertigstellen, es ist "mein Lebensraum" und es gibt darin nichts zu lernen.

Nochmals vielen Dank, Juri.






Sie müssen sich nicht erst in den Code jeder Funktion einarbeiten. Es genügt, die in der Funktion verwendeten Parameter, ihren Zweck und ihre Verwendung zu verstehen. Ich habe mich nicht selbst mit den einzelnen Funktionen befasst. Ich habe mich nur damit befasst, wenn ich sie in irgendeiner Weise ändern musste. Ich meine, Sie benutzen erfolgreich Mobiltelefone, Computer und Fernsehgeräte, ohne deren genaue Funktionsweise zu kennen, aber das hindert Sie nicht daran, sie für Ihre eigenen Zwecke zu nutzen. In diesem Fall kommt es vor allem darauf an, dass Sie wissen, wie Sie diese Funktionen nutzen können. Hier werden alle Funktionen und ihre Funktionen beschrieben. In den Tests, die zu jeder Funktion angeboten werden, lernen Sie, wie man sie benutzt. Sie werden schneller zum Programmierer, wenn Sie diesen Weg gehen. Aber sein eigenes Fahrrad neu zu erfinden, ist ein langer und unproduktiver Weg. Der Aufbau eines Sachverständigen - nach Ihrer Version - ist wie der Bau eines Hauses ohne Baumaterial. Man muss alles selbst erfinden. Es geht viel schneller, ein Haus zu bauen, wenn es Bausteine (Funktionen) gibt.
 

Guten Tag!

Könnten Sie mir bitte sagen, ob die Funktion AccountEquity() eine Anfrage an das Terminal oder an den Broker stellt?

Die Frage wird durch die Annahme ausgelöst, dass der Aufruf dieser Funktion bei jedem Tick den Broker irritieren könnte (insbesondere wenn der EA auf mehreren Charts gleichzeitig läuft) und folglich das Konto blockiert?

 
yan720:

Guten Tag!

Können Sie mir sagen, ob die Funktion AccountEquity() eine Anfrage an das Terminal oder an den Broker stellt?

Die Frage beruht auf der Annahme, dass der Aufruf dieser Funktion bei jedem Tick den Broker irritieren könnte (insbesondere wenn der EA auf mehreren Charts gleichzeitig läuft) und folglich das Konto blockiert?


Ja zum Makler, natürlich)))

Das Terminal kümmert sich nicht.... Gibt Ihnen die letzten bekannten Daten...

 
vadynik:
Die Frage ist, ob wir Magic in die Funktion aufnehmen sollenoder nicht.

Das kann man verstehen, wenn man weiß, wozu der Assistent dient. Sie wird benötigt, damit der EA seine eigenen Aufträge von den Aufträgen eines anderen EA oder von manuell eröffneten Aufträgen unterscheiden kann. Wenn Sie mehrere Kauf-Stopp-Aufträge haben und sich darunter verschiedene Magier oder manuelle Aufträge (ohne Magier) befinden, wird der Magier für die Funktion benötigt. Im Allgemeinen wäre es besser, eine Magie als Parameter für eine Funktion festzulegen, um ihre Funktionen zu universalisieren. Zum Beispiel sollte sie standardmäßig auf -1 gesetzt werden.

double BuystopPrice(int Magic = -1)
{
double Price=0;
  for (int i=OrdersTotal()-1; i>=0; i--) 
     {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
          if(OrderMagicNumber()==Magic && OrderType()==OP_BUYSTOP)
          {
           Price = OrderOpenPrice();
          break;
          }
        }
     }
    return(Price);
}

Da der Code Ihrer Funktion den Einstellungspreis der ersten Order in der Schleife für einen Kaufstopp bestimmt, ist die Schleife selbst im Prinzip nicht erforderlich.

 
khorosh:
Es ist nicht notwendig, den Code jeder Funktion zu Beginn zu erläutern. Es genügt, die in der Funktion verwendeten Parameter, ihren Zweck und ihre Verwendung zu verstehen. Ich habe mich nicht selbst mit den einzelnen Funktionen befasst. Ich habe mich nur damit befasst, wenn ich sie in irgendeiner Weise ändern musste. Ich glaube, dass Sie Mobiltelefone, Computer und Fernseher erfolgreich nutzen, ohne deren genaue Funktionsweise zu kennen, was Sie aber nicht daran hindert, sie für Ihre eigenen Zwecke zu nutzen. In diesem Fall kommt es vor allem darauf an, dass Sie wissen, wie Sie diese Funktionen nutzen können. Hier werden alle Funktionen und ihre Funktionen beschrieben. In den Tests, die zu jeder Funktion angeboten werden, lernen Sie, wie man sie benutzt. Sie werden schneller zum Programmierer, wenn Sie diesen Weg gehen. Aber sein eigenes Fahrrad neu zu erfinden, ist ein langer und unproduktiver Weg. Der Aufbau eines Sachverständigen - nach Ihrer Version - ist wie der Bau eines Hauses ohne Baumaterial. Man muss alles selbst erfinden. Es geht viel schneller, ein Haus zu bauen, wenn es Bausteine (Funktionen) gibt.


Sie sind ein weiser Mann, der in der Lage ist, zu erklären und seine Meinung zu ändern, wenn es nötig ist. :)
In diesem Sinne möchte ich Ihnen nochmals danken.

In diesem Fall verlasse ich den Bau eines Hauses aus eukaryotischen Zellorganoiden und verwende gewöhnliche Baumaterialien für dessen Konstruktion.
 

Überprüfen Sie bitte zwei Funktionen auf Fehler in ihnen.

Die Essenz der ersten: sollte ein Lot berechnen, das erforderlich ist, um den Drawdown nach dem Schließen eines Rasters von Aufträgen (offen auf Marge) zu beenden, wenn der Preis eine bestimmte Anzahl von Punkten (TP-Punkte) in die richtige Richtung passiert.

Das Wesentliche der zweiten: Sie sollte die Hälfte der Aufträge des Gitters schließen, beginnend mit dem ältesten.

double FindRightLot (int otype) // функция поиска лота, необходимого для выхода из просадки после 
                               //закрытия сетки ордеров
{
  double Lot=0; double TotalLot=0;
  for (int i = OrdersTotal()-1; i>0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
       {
         if (otype == OP_BUY)
         {
           Lot = NormalizeDouble ((OrderOpenPrice()-Bid)*OrderLots()/TP,2); 
           if (Lot>0)
           {
              TotalLot= NormalizeDouble (TotalLot+Lot,2);
           }
         }
           
       
         else if (otype == OP_SELL)
         {
           Lot = NormalizeDouble ((Ask-OrderOpenPrice())*OrderLots()/TP,2);
           if (Lot>0)
           {
            TotalLot= NormalizeDouble (TotalLot+Lot,2);
           }
           
         }
       }
     }
   }
   return (TotalLot);
   
 }
//+------------------------------------------------------------------+

void CloseHalfOrders (int otype)// ф-ция закрытия половины ордеров сетки
{
  int count = 0;
  for (int i = 0; i<= OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
       {
         if (otype == OP_BUY)
         { 
           if (count<CountTrades(OP_BUY)/2 && CountTrades(OP_BUY)>3 )
           
             OrderClose(OrderTicket(),OrderLots(),Bid,0,Black);
             count++;
           
         }
       
       
         else if (otype == OP_SELL)
         {
           if (count<CountTrades(OP_SELL)/2 && CountTrades(OP_SELL)>3)
           
           OrderClose(OrderTicket(),OrderLots(),Ask,0,Black);
           count++;
           
         }
       }
     }
   }
   
 }
 
Leute, das könnt ihr nicht... Ihr könnt direkt zu MQL5 wechseln, aber die gesamte POSITION ist dort geöffnet....
 
yan720:


Können Sie mir sagen, ob AccountEquity() das Terminal oder den Broker abfragt?

zum Terminal
 
vadynik:


Ich frage vielleicht nicht genau, ich meine, ob die Funktion eine Magie sieht, die in einer globalen Variablen gesetzt ist

oder sollte sie an eine Funktion übergeben werden, obwohl ich vermute, dass sie das nicht sollte, da sie global ist

Wenn es sich um eine globale Variable handelt, ja, dann schon. Aber die Funktion sollte vielseitig sein und mit mehr als einem Assistenten arbeiten, und dafür ist es besser, ihn als Funktionsparameter zu übergeben.