Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 899

 
lil_lil:
Grazie.

O semplicemente iHighest() - le ultime build lo hanno già.

 
Ihor Herasko:

In conti come il Netting, una posizione e un commercio sono concetti diversi. Ora avete mostrato la selezione di una posizione.

Comeselezionate il commercio incluso in quella posizione?

long ID=PositionGetInteger(POSITION_IDENTIFIER);

 
Sile Si:

E comeselezionare il commercio incluso in questa posizione



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


Grazie, ci sono diverse offerte, quindi ho deciso di usare HistoryDealGetTicket().

Ho commentato tutto, potete per favore dirmi dove sto sbagliando? Dove mi sbaglio?

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:

Grazie, ci sono diverse offerte, quindi ho deciso di usare HistoryDealGetTicket().

Ho commentato tutto, potete per favore dirmi dove sto sbagliando? Dove mi sbaglio?


Mi sbagliavo di grosso. Ho dato un riferimento sbagliato in fretta e furia. Stavo pensando a una cosa e ho scelto quella sbagliata.

Ecco il link giusto.

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

Mi sbagliavo di grosso. Ho dato il link sbagliato in fretta e furia. Stavo pensando a una cosa e ho scelto quella sbagliata.

Ecco il link giusto.

Grazie.

 
Come faccio a disegnare una linea su un indicatore, ad esempio iAO,iDem, per 2 punti e ottenere il valore della linea nel punto X?
 
Сергей:
Come disegnare una linea su un indicatore, ad esempio iAO,iDem, per 2 punti e ottenere il valore della linea nel punto X?

Ogni indicatore è disegnato nella finestra principale o in una sottofinestra. Quindi, passo 1: trovare il numero della sottofinestra in cui è disegnato l'indicatore. Guarda nella direzione delleOperazioni con i grafici.

Passo 2: quando c'è un numero di sottofinestra, è facile disegnare una linea. Vedere la guidaOBJ_TREND e i parametri della funzione"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:

O semplicemente iHighest() - le ultime build lo hanno già.

Oh, vedo che finalmente hanno aggiunto anche queste nuove-vecchie funzioni all'aiuto.

 

Senza dubbio, l'EA collegato a si modifica vtbr. Colloca le posizioni T/P sulle quotazioni del suo strumento "si".

llo

Se collego un EA a vtbr, non modifica il si, lavora solo sul suo strumento

ppv

Qualche spiegazione per questo?

Non c'è nessuna modifica nel codice, tranne questa:

   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);
                       }
                    }
                 }
              }
           }
        }
     }