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

 
lil_lil:

Obrigado.

O que está errado agora?

Sugeri começar com HistorySelectByPosition e empurraste-o para um sítio bem fundo nos "se"...

Só pode haver uma posição por símbolo numa conta netting. Obtenha o ID da posição, obtenha a lista de comércios envolvidos na formação desta posição e conte-os por direcção de comércio e tipo de ordem.

 
Alexey Kozitsyn:

Artyom, vou repetir a pergunta, por favor responda-a:


Não vi a pergunta :)

Sinceramente - não me lembro, mas acho que funciona no MT5 - não é verdade?

Mas no testador estava a colocar as ordens pendentes... E eu trabalhei com o rato. Mas posso ter ficado confuso e estava a trabalhar com o rato num gráfico real e a usar botões no testador...

Não vou adivinhar - Desmontei toda a minha biblioteca para pequenos parafusos há cerca de meio ano, e já não vou poder verificar rapidamente. Adiei a sua reconstrução para cerca do Outono. Assim, é mais rápido apenas para verificar o trabalho do modelo de evento OnChartEvent() no testador. Mas ainda não tenho tempo para isso - desculpe :)

 
Artyom Trishkin:

Não vi a pergunta :)

Sinceramente - não me lembro, mas acho que funciona no MT5 - não é verdade?

Mas tenho colocado as ordens pendentes no testador. E eu trabalhei com o rato. Mas pode ser que eu tenha confundido a minha memória e estivesse a trabalhar com o rato num gráfico real e a usar botões no testador...

Não vou adivinhar - Desmontei toda a minha biblioteca para pequenos parafusos há cerca de meio ano, e já não vou poder verificar rapidamente. Adiei a sua reconstrução para cerca do Outono. Assim, é mais rápido apenas para verificar o trabalho do modelo de evento OnChartEvent() no testador. Mas ainda não tenho tempo para isso - desculpe :)

Há todo o código de teste:

switch( id )
{
default:
   Print( __FUNCTION__,": id = "+EnumToString( (ENUM_CHART_EVENT)id ) );
}

sem resposta, infelizmente, no testador. Na função OnChartEvent(). Chamado do Conselheiro Especialista.

 
Alexey Kozitsyn:

Todo o código de teste está lá:

sem resposta, infelizmente, no testador. Na função OnChartEvent().

E CHART_EVENT_MOUSE_MOVE=true está definido?
 
Alexey Viktorov:

Sugeri começar com HistorySelectByPosition, mas empurraste-o para um sítio bem fundo no ifs...

Numa conta netting só pode haver uma posição por símbolo. Obtenha o ID da posição, obtenha a lista de acordos que formam esta posição e conte-os por direcção do acordo e tipo de ordem.

Fi-lo porque quero fazer uma função de contagem universal, para a rede e a cobertura, ou é impossível?

 
Artyom Trishkin:
O CHART_EVENT_MOUSE_MOVE=true set?

Não, mas é pouco provável que isto resolva o problema, uma vez que as teclas ctrl, shift e outras foram premidas... não houve reacção.

 
lil_lil:

Preso porque quero fazer uma função de contagem universal, para a rede e cobertura, ou será isso impossível?

É possível. Mas as abordagens são diferentes e precisam de ser devidamente planeadas primeiro, em vez de despejar tudo numa linha de código...

 
Alexey Kozitsyn:

Não, mas é pouco provável que isto resolva o problema, uma vez que as teclas ctrl, shift e outras foram premidas... Não houve qualquer reacção.

De qualquer modo, não tenho tempo para experimentar agora - tenho as minhas próprias coisas à espera de serem feitas.

Talvez me tenha mesmo esquecido disso. Mas fixei os limites de tempo no testador. É bastante provável - apenas os mesmos botões. Também sei que os ponho com o rato. Mas talvez também numa carta ao vivo...

 
Artyom Trishkin:

Provavelmente. Mas as abordagens são diferentes, e precisam de ser planeadas correctamente em primeiro lugar, em vez de despejar tudo numa linha de código...

Portanto, fá-lo-ei separadamente, por agora.

O que é que perdi?

int GetNum(const string aSymbol)
  {
   int    count=0;
   if(PositionSelect(aSymbol))
     {
      long pos_id=long(PositionGetInteger(POSITION_IDENTIFIER));

      if(pos_id>0)
        {
         if(HistorySelectByPosition(ulong(pos_id)))
           {
            int deals=HistoryDealsTotal();

            for(int i=0; i<deals; i++)
              {
               ulong deal_ticket=HistoryDealGetTicket(i);
               ulong order_ticket=ulong(HistoryDealGetInteger(deal_ticket,DEAL_ORDER));

               if(order_ticket>0)
                 {
                  long deal_entry=long(HistoryDealGetInteger(deal_ticket,DEAL_ENTRY));

                  if(deal_entry==DEAL_ENTRY_IN)
                    {
                     if(m_position.PositionType()==POSITION_TYPE_SELL)
                       {
                        count++;
                       }
                    }
                 }
              }
            if( count > 0 ) return(count);
           }
         else
           {
            Print("Не возможно получить историю позиции по символу ",aSymbol);
           }
        }
      else
        {
         Print("Не возможно определить идентификатор позиции по символу ",aSymbol);
        }
     }
   return( 0 );
  }
////////////
 
Primeiro conta correctamente, depois, quando 5 limites de VENDA são activados, escreve 6 no comentário. de onde vem o sexto?
Razão: