Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 897

 
Scheint klar zu sein, ist es wohl auch. Nochmals vielen Dank!
 
Alexey Viktorov:
Sie können.

Wie?

 
Andy:

Wie?

Der kleine Kerl hat mir schon alles erzählt.

 
Alexey Kozitsyn:

Der Positionsbezeichner wird nicht geändert. Verwenden Sie es, um nach Transaktionen zu suchen.

Ich danke Ihnen. Nach dem Clearing gibt die Funktion nicht wie vorgesehen den Durchschnittspreis der Geschäfte zurück, sondern den Preis der wiedereröffneten Position. Wo liegt der Fehler, bitte sagen Sie es mir.

double Aver_Pr_sell_nett()
  {
   double total_price_multiply_volume_sell   = 0.0;
   double total_volume_sell                  = 0.0;
   double net_price_sell_=0.0;
   string symb=_Symbol;
   int    total       =0;  // 

   for(int i=0; i<PositionsTotal(); i++)
     {
      ulong pt=PositionGetTicket(i);
      long ID=PositionGetInteger(POSITION_IDENTIFIER);
      if(PositionGetString(POSITION_SYMBOL)==symb && HistorySelect(PositionGetInteger(POSITION_TIME),TimeCurrent()+60))
        {
         //--- Получим количество сделок в полученном списке
         total=HistoryDealsTotal();
         //--- Пройдем по всем сделкам в полученном списке
         for(int i=0; i<total; i++)
           {
            ulong dt = HistoryDealGetTicket(i);
            long did = HistoryDealGetInteger(dt, DEAL_POSITION_ID);
            ENUM_DEAL_ENTRY in_out=HistoryDealGetInteger(dt,DEAL_ENTRY);
            if(did==pt && in_out==DEAL_ENTRY_IN)
              {
               if(m_position.PositionType()==POSITION_TYPE_SELL)
                 {
                  total_price_multiply_volume_sell+=PositionGetDouble(POSITION_PRICE_OPEN)*PositionGetDouble(POSITION_VOLUME);
                  total_volume_sell+=PositionGetDouble(POSITION_VOLUME);
                  if(total_price_multiply_volume_sell!=0 && total_volume_sell!=0)
                    {
                     net_price_sell_=total_price_multiply_volume_sell/total_volume_sell;
                     
                    };
                 }
              }
           }
        }
     }
//---
   return(net_price_sell_);
  }
 
Sile Si:

Ich danke Ihnen. Nach dem Clearing gibt die Funktion nicht wie vorgesehen den Durchschnittspreis der Geschäfte zurück, sondern den Preis der wiedereröffneten Position. Wo liegt der Fehler, bitte sagen Sie es mir.

Wenn Sie mit einer Position arbeiten, arbeiten Sie mit der Position. Wenn Sie an einem Geschäft arbeiten, arbeiten Sie an dem Geschäft. Das Geschäft ist der Preis des Geschäfts, nicht der Preis der Position.

 
Alexey Kozitsyn:

Wenn Sie mit einer Position arbeiten, arbeiten Sie mit einer Position. Wenn Sie an einem Geschäft arbeiten, arbeiten Sie an dem Geschäft. Das Geschäft zeigt den Preis des Handels, nicht den Preis der Position.

Habe ich die an der Eröffnung der Position beteiligten Geschäfte nicht ausgewählt?

 
Sile Si:

Habe ich die an der Eröffnung der Position beteiligten Geschäfte nicht ausgewählt?

Der Algorithmus ist einfach: Sie wählen eine Position nach Positions-ID und alle ihre Geschäfte aus. Sie wählen nur die Geschäfte zur Bearbeitung aus, die das Volumen der Position bilden, d.h. Sie schließen Verrechnungsgeschäfte aus.

Nachdem Sie eine Position ausgewählt haben, erhalten Sie deren Angebote und können dann einen Preis für die Position anfordern! Und Sie benötigen den Preis für jede einzelne Transaktion.

 
Alexey Kozitsyn:

Und Sie benötigen den Preis für jede einzelne Transaktion.

Entschuldigung, ich verstehe nicht, wie man einen Handel anstelle einer Position auswählt, zeigen Sie es mir)

 
Sile Si:

Entschuldigung, ich verstehe nicht, wie man einen Handel anstelle einer Position auswählt, zeigen Sie es mir)

ulong dt = HistoryDealGetTicket(i);
 
Alexey Kozitsyn:

Okay, so mache ich das.

ulong dt = HistoryDealGetTicket(i);
long did = HistoryDealGetInteger(dt, DEAL_POSITION_ID);

Dann vergleiche ich die Transaktions-ID mit dem Positions-Ticker, und ich denke, dass ich die Transaktion ausgewählt habe,

aber er gibt den Preis der Position zurück. Und warum?

Grund der Beschwerde: