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

 
Vovo4ka:

Warum wird der Gewinn genommen, nicht derjenige, der..... sein sollte, wenn das Lot geschlossen wird, aber wenn der Gewinn 30pp im Gewinn sein sollte, wird auf eine völlig andere Weise geschrieben....


Was ist das für ein Unsinn: "berechnet im Wesentlichen die Differenz zwischen dem Öffnen und dem Schließen eines Auftrags) und summarise?????? ...

Und in welchen Mengen? Müssen Sie das nicht wissen? Der Preis eines Punktes wird unterschiedlich sein...

Der Gewinn wird nicht in Punkten, sondern in Währungen berechnet, abhängig vom Volumen der gehandelten Positionen.

 
Vovo4ka:

Aus irgendeinem Grund wird der Gewinn genommen, nicht der, der sein sollte....., wenn das Los geschlossen wird, umgekehrt, wenn der Gewinn 30pp im Gewinn sein sollte, wird es völlig anders geschrieben....


Der Gewinn des Auftrags wird nicht in Punkten, sondern in der Einzahlungswährung ausgewiesen.

 

Richtig - hier wird der Gesamtverlust (Verlust) aus der Historie der geschlossenen LOCAL-Aufträge mit Verlust berechnet.

Das ist für Sie ein wenig anders, aber das Prinzip ist dasselbe.

//---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям
  datetime 
  Time_at_History_Current = 0,
  Time_at_History_Previos = 0;      
  if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;              
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0) 
                  break;
               }
            }
         }
      }
   }
 
PapaYozh:


Der Gewinn des Auftrags wird nicht in Pips, sondern in der Währung des Depots angegeben.


Ich brauche es in Pips, das Lot ist auf 1.... festgelegt, aber der Gewinn oder Verlust entspricht nicht der realen ein..... und ich möchte die Anzahl der Pips in Gewinn und Drawdown einfacher zu berechnen und summieren Sie es und erhalten das Ergebnis=)
 
Roman.:

Richtig - hier wird der Gesamtverlust (Verlust) aus der Historie der geschlossenen LOCAL-Aufträge mit Verlust berechnet.

Dies ist für Sie ein wenig anders, aber das Prinzip ist dasselbe.


Danke, ich werde mich jetzt darum kümmern=)
 
Vovo4ka:

Ich brauche es in Pips, das Lot ist auf 1.... festgelegt, aber der Gewinn oder Verlust entspricht nicht der realen ein..... und ich möchte die Anzahl der Pips in Gewinn und Drawdown einfacher zu berechnen und summieren Sie es und erhalten das Ergebnis=)


Noch einmal:

Der Gewinn des Auftrags wird nicht in Pips, sondern in der Währung der Einlage angegeben.

 
Vovo4ka:

Ich brauche es in Punkten, das Los ist konstant 1.... aber aus irgendeinem Grund der Gewinn oder Verlust entspricht nicht der realen ein.....zu mir möchte ich die Anzahl der Punkte von Gewinn und Drawdown leichter zu summieren und das Ergebnis zu berechnen =)

Nun, wenn das Los konstant ist, teilen Sie den Gewinn des Testers durch den Punkt. Sie erhalten den Gewinn in Pips.
 

Die von Kim zuletzt veröffentlichte Funktion GetPotentialLossInCurrency (https://forum.mql4.com/ru/11287/page107) zählt nur offene Aufträge:

if (OrderType()==OP_BUY) {
                pl+=(OrderOpenPrice()-OrderStopLoss())/po*OrderLots()*tv;
              }
if (OrderType()==OP_SELL) {
                pl+=(OrderStopLoss()-OrderOpenPrice())/po*OrderLots()*tv;
              }
Ich habe versucht, sie ein wenig zu erweitern, um schwebende Aufträge einzubeziehen (indem ich einfach andere Typen hinzugefügt habe):
if (OrderType()==OP_BUY || OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP) {
                     pl+=(OrderOpenPrice()-OrderStopLoss())/po*OrderLots()*tv;
                     }
if (OrderType()==OP_SELL || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP) {
                     pl+=(OrderStopLoss()-OrderOpenPrice())/po*OrderLots()*tv;
                  }
aber schwebende Aufträge werden nicht berücksichtigt. Werden sie unterschiedlich gezählt? Die Dokumentation sagt nichts darüber aus....
 
artmedia70:
Zeigen Sie alle Flaggen auf dem Chart mit "Comment" an und Sie werden sehen, warum der Handel eröffnet wird.

ein, jetzt öffnen sich die Geschäfte überhaupt nicht mehr.
Dateien:
1_1.mq4  21 kb
 
Ivn:

Ich habe es eingebaut, jetzt macht es überhaupt keine Sdeks mehr.

Warum sollten Sie das tun? Zeigt alle Flaggen in einem Kommentar auf einmal an.

Hier:

int start()
  {
//----


 RefreshRates();                        // Обновление данных
 Symb=Symbol();
 int cnt, ticket, total;
 int ABuy=0;                               // флаг на покупку /продажу   
 int ASell=0;   
 
   Comment(".....Вот сюда и пишите вывод всех флагов......");

 if (NewBar() == true)
{        
     x=x0; //передаем данные 
    x1=x01;
    x2=x02;