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

 
lil_lil:
Ich danke Ihnen.

Oder einfach iHighest() - die neuesten Builds haben es bereits.

 
Ihor Herasko:

In Konten wie dem Netting sind eine Position und ein Handel unterschiedliche Konzepte. Sie haben nun die Auswahl einer Position angezeigt.

Wiewählen Sie den Handel aus, der in dieser Position enthalten ist?

long ID=PositionGetInteger(POSITION_IDENTIFIER);

 
Sile Si:

Und wieman den in dieser Position enthaltenenHandel auswählt



bool  HistoryDealSelect(
   ulong  ticket     // тикет сделки
   );
Документация по MQL5: Торговые функции / HistoryDealSelect
Документация по MQL5: Торговые функции / HistoryDealSelect
  • www.mql5.com
Выбирает в истории сделку для дальнейших обращений к ней  через соответствующие функции. Возвращает true при успешном завершении функции. Возвращает false при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Не следует путать между собой ордера, сделки и позиции. Каждая сделка...
 
Alexey Viktorov:


Danke, es gibt mehrere Angebote, also habe ich beschlossen , HistoryDealGetTicket() zu verwenden.

Ich habe alles auskommentiert, können Sie mir bitte sagen, was ich falsch mache? Wo liege ich falsch?

double Aver_Pr_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);//id позиции
      if(PositionGetString(POSITION_SYMBOL)==symb && //символ позиции
      HistorySelect(PositionGetInteger(POSITION_TIME),TimeCurrent()+60))//промежуток времени для поиска сделок
        {
         total=HistoryDealsTotal();//количество сделок
         
         for(int i=0; i<total; i++)// цикл по всем сделкам
           {
            ulong dt = HistoryDealGetTicket(i);//тикет сделки, возможно нужно использовать HistoryDealSelect()
            long did = HistoryDealGetInteger(dt, DEAL_POSITION_ID);//id сделки
            ENUM_DEAL_ENTRY in_out=HistoryDealGetInteger(dt,DEAL_ENTRY);//
            if(did==pt &&          //id сделки равно тикету позиции
            in_out==DEAL_ENTRY_IN) //сделка открыла позицию либо добавила объём
              {
               if(HistoryDealGetString(dt,DEAL_SYMBOL)==symb)//символ сделки равен текущему графику
                 {//дальше нахожу среднюю цену сделок
                  total_price_multiply_volume_sell+=HistoryDealGetDouble(dt,DEAL_PRICE)*HistoryDealGetDouble(dt,DEAL_VOLUME);
                  total_volume_sell+=HistoryDealGetDouble(dt,DEAL_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:

Danke, es gibt mehrere Angebote, also habe ich beschlossen , HistoryDealGetTicket() zu verwenden.

Ich habe alles auskommentiert, können Sie mir bitte sagen, was ich falsch mache? Wo liege ich falsch?


Ich habe mich sehr geirrt. Ich habe in der Eile einen falschen Hinweis gegeben. Ich habe nur an eine Sache gedacht und mich für die falsche entschieden.

Hier ist der richtige Link.

Документация по MQL5: Торговые функции / HistorySelectByPosition
Документация по MQL5: Торговые функции / HistorySelectByPosition
  • www.mql5.com
Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть  в закладке "История" на панели "Инструменты" клиентского терминала. Функция...
 
Alexey Viktorov:

Ich habe mich sehr geirrt. Ich habe in der Eile den falschen Link angegeben. Ich habe nur an eine Sache gedacht und die falsche gewählt.

Hier ist der richtige Link.

Danke. (lacht)

 
Wie ziehe ich eine Linie auf einem Indikator, z. B. iAO, iDem, durch 2 Punkte und erhalte den Wert der Linie am Punkt X?
 
Сергей:
Wie zeichnet man eine Linie auf einem Indikator, z.B. iAO,iDem, durch 2 Punkte und erhält den Linienwert am Punkt X ?

Jeder Indikator wird entweder im Hauptfenster oder in einem Unterfenster gezeichnet. Schritt 1: Ermitteln Sie die Nummer des Unterfensters, in dem der Indikator gezeichnet wird. Schauen Siemit Hilfe von Diagrammen in die Richtung vonOperations.

Schritt 2: Wenn es eine Teilfensternummer gibt, ist es einfach, eine Linie zu zeichnen. Siehe Hilfe zuOBJ_TREND und Parameter der Funktion"TrendCreate".

//+------------------------------------------------------------------+ 
//| Создает линию тренда по заданным координатам                     | 
//+------------------------------------------------------------------+ 
bool TrendCreate(const long            chart_ID=0,        // ID графика 
                 const string          name="TrendLine",  // имя линии 
                 const int             sub_window=0,      // номер подокна 
                 datetime              time1=0,           // время первой точки 
                 double                price1=0,          // цена первой точки 
                 datetime              time2=0,           // время второй точки 
                 double                price2=0,          // цена второй точки 
                 const color           clr=clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии 
                 const int             width=1,           // толщина линии 
                 const bool            back=false,        // на заднем плане 
                 const bool            selection=true,    // выделить для перемещений 
                 const bool            ray_left=false,    // продолжение линии влево 
                 const bool            ray_right=false,   // продолжение линии вправо 
                 const bool            hidden=true,       // скрыт в списке объектов 
                 const long            z_order=0)         // приоритет на нажатие мышью 
  { 
 
Artyom Trishkin:

Oder einfach iHighest() - die neuesten Builds haben es bereits.

Oh, wie ich sehe, haben sie endlich auch diese neuen alten Funktionen in die Hilfe aufgenommen.

 

Es besteht kein Zweifel, dass der EA, der mit si verbunden ist, vtbr verändert. Platziert T/P-Positionen auf den Kursen seines Instruments "si".

llo

Wenn ich einen EA an vtbr anhänge, ändert er si nicht, sondern arbeitet nur an seinem Instrument

ppv

Gibt es dafür eine Erklärung?

Es gibt keine Änderung im Code außer dieser einen:

   if(TakeProfit>0)
     {
     if(!RefreshRates())
            return;
      int total=PositionsTotal();
      for(int i=total-1;i>=0;i--)
        {
         if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
           {
            if(m_position.Symbol()==Symbol())
              {
               //if(m_position.PositionType()==POSITION_TYPE_BUY)
               if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
                 {
                  if(m_symbol.NormalizePrice(Aver_Pr_sell_nett()+ExtTakeProfit)!=m_position.TakeProfit())
                    {
                     m_trade.PositionModify(m_position.Ticket(),
                                            m_position.StopLoss(),
                                            m_symbol.NormalizePrice(Aver_Pr_sell_nett()+ExtTakeProfit)
                                            );
                     Sleep(300);

                    }
                 }
               //==//
               //if(m_position.PositionType()==POSITION_TYPE_SELL)
               else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
                 {
                  if(m_symbol.NormalizePrice(Aver_Pr_sell_nett()-ExtTakeProfit)!=m_position.TakeProfit())
                    {
                       {
                        m_trade.PositionModify(m_position.Ticket(),
                                               m_position.StopLoss(),
                                               m_symbol.NormalizePrice(Aver_Pr_sell_nett()-ExtTakeProfit)
                                               );
                        Sleep(300);
                       }
                    }
                 }
              }
           }
        }
     }
Grund der Beschwerde: