Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 899

 
lil_lil:
Obrigado.

Ou apenas iHighest() - as últimas construções já o têm.

 
Ihor Herasko:

Em contas como a Netting, uma posição e um comércio são conceitos diferentes. Agora já mostrou a selecção de uma posição.

Como seselecciona o comércio incluído nessa posição?

long ID=PositionGetInteger(POSITION_IDENTIFIER);

 
Sile Si:

E comoseleccionar o comércio incluído nesta posição



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


Obrigado, existem vários acordos, por isso decidi usar HistoryDealGetTicket().

Comentei tudo, pode por favor dizer-me onde é que eu estou a ir mal. Onde é que estou errado?

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:

Obrigado, existem vários acordos, por isso decidi usar HistoryDealGetTicket().

Comentei tudo, pode por favor dizer-me onde é que eu estou a ir mal. Onde é que estou errado?


Eu estava muito enganado. Fiz uma referência errada à pressa. Eu estava a pensar numa coisa e escolhi a errada.

Aqui está o link certo.

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

Eu estava muito enganado. Dei o elo errado à pressa. Estava a pensar numa coisa e escolhi a errada.

Aqui está o link certo.

Obrigado. (risos)

 
Como desenhar uma linha num indicador, por exemplo iAO,iDem, por 2 pontos e obter o valor da linha no ponto X ?
 
Сергей:
Como desenhar uma linha num indicador, por exemplo iAO,iDem, por 2 pontos e obter o valor da linha no ponto X ?

Cada indicador é desenhado ou na janela principal ou numa sub-janela. Assim, passo 1: descobrir o número da subjanela em que o indicador é desenhado. Olhe na direcção dasOperações com gráficos.

Passo 2: quando há um número de subjanela, é fácil desenhar uma linha. Ver ajudaOBJ_TREND, e parâmetros da função"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:

Ou apenas iHighest() - as últimas construções já o têm.

Oh, vejo que finalmente adicionaram também estas novas funções antigas à ajuda.

 

Sem dúvida, a EA anexada ao si modifica o vtbr. Coloca as posições T/P nas aspas do seu instrumento "si".

llo

Se eu anexar uma EA à vtbr, ela não modifica si, ela funciona apenas no seu instrumento

ppv

Alguma explicação para isto?

Não há nenhuma modificação no código, excepto esta:

   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);
                       }
                    }
                 }
              }
           }
        }
     }
Razão: