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

 
Roman:

Se tiver sido introduzido, então há uma diferença.
A leitura de uma variável rubricada é sempre mais rápida do que a leitura de uma função.

Não há diferença. Não consigo encontrar a ligação agora - mas a resposta foi dada há muito tempo atrás.

 
Vladimir Karputov:

Não há diferença. Não consigo encontrar a ligação agora - mas a resposta foi dada há muito tempo atrás.

Para Juan e os avisos do compilador, não há diferença ))

 
Vladimir Karputov:

Não há diferença. Quando se compila tudo, tudo se reúne numa única chamada. É por isso que é melhor fazer tudo através de funções.

E comecemos também um fio à parte sobre o assunto e discutamos sobre ele como sobre os pips e os pontos... Isso vai dar às pessoas algo para fazer...

Vocês adoram impor as vossas opiniões a toda a gente.

 

Há um Mestrado com algum turno. Que MA_shift = 5;

Porque é possível obter o valor certo de MA a partir da barra zero do gráfico apenas se o duplo deslocamento negativo for passado para CopyBuffer?
CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);

MA_Buf[0] tem agora o valor correcto.

 
RickD:

Há um Mestrado com algum turno. Que MA_shift = 5;

Porque é possível tirar o valor correcto de MA da barra zero do gráfico, apenas se passar um turno duplo negativo para CopyBuffer?
CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);

MA_Buf[0] tem agora o valor correcto.

Desenhe primeiro uma imagem e especifique o que é "barra zero" para o seu indicador com o parâmetro shift.

 
Roman:

Leitura de uma variável, mais rápida do que uma função.

Nem por isso, verifiquei qual é mais rápido que _Symbol ou Symbol()https://www.mql5.com/ru/forum/160683/page933#comment_12780905.

o tempo de acesso é o mesmo, a optimização do código em MQL é muito fixe, por isso use o que for conveniente.

de acordo com os meus testes, o tempo de acesso pode ser diferente, dependendo de onde a variável é descrita e com que modificadores, mas existe uma velocidade de 2-5%, que em princípio pode ser reduzida à implementação numa determinada construção, depende do número da construção

 
Pode dizer-me a forma mais fácil e rápida de obter o resultado da última transacção para o símbolo actual? Porque a partir da documentação tudo é tão complicado. Para obter o resultado primeiro precisa de encontrar o bilhete do negócio exigido, para encontrar o bilhete precisa de encontrar o negócio no histórico pelo seu índice, o índice deve ser pesquisado no histórico, para não mencionar que também precisa de filtrar pelo símbolo.
 
WinZip:
Poderia aconselhar como obter fácil e rapidamente o resultado da última troca com o símbolo actual? Porque a documentação é muito complexa. Para obter o resultado, é necessário encontrar primeiro o bilhete do comércio exigido, para encontrar o bilhete é necessário encontrar o comércio na história pelo seu índice, o índice deve ser procurado na história, para não mencionar que devemos filtrar pelo símbolo.

Para evitar ir sempre ao histórico de negociação - basta apanhar o negócio naOnTradeTransaction com o tipo

TRADE_TRANSACTION_DEAL_ADD - adicionar transacção ao histórico


//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_ticket       =0;
      long     deal_order        =0;
      long     deal_time         =0;
      long     deal_time_msc     =0;
      long     deal_type         =-1;
      long     deal_entry        =-1;
      long     deal_magic        =0;
      long     deal_reason       =-1;
      long     deal_position_id  =0;
      double   deal_volume       =0.0;
      double   deal_price        =0.0;
      double   deal_commission   =0.0;
      double   deal_swap         =0.0;
      double   deal_profit       =0.0;
      string   deal_symbol       ="";
      string   deal_comment      ="";
      string   deal_external_id  ="";
      if(HistoryDealSelect(trans.deal))
        {
         deal_ticket       =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
         deal_order        =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
         deal_time         =HistoryDealGetInteger(trans.deal,DEAL_TIME);
         deal_time_msc     =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
         deal_type         =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_entry        =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_magic        =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason       =HistoryDealGetInteger(trans.deal,DEAL_REASON);
         deal_position_id  =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);

         deal_volume       =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_price        =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
         deal_commission   =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
         deal_swap         =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
         deal_profit       =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);

         deal_symbol       =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_comment      =HistoryDealGetString(trans.deal,DEAL_COMMENT);
         deal_external_id  =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
        }
      else
         return;
      ENUM_DEAL_ENTRY enum_deal_entry=(ENUM_DEAL_ENTRY)deal_entry;
      if(deal_symbol==m_symbol.Name() && deal_magic==InpMagic)
        {
         if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
           {
            
...
           }
        }
     }
  }

m_symbol.Name() - símbolo actual, InpMagic - identificador único do Expert Advisor

 
Olá, registei-me no site e no facebook e não consigo entrar no meta trader 5-4 por favor, ajude e reabasteça a minha conta
 
Igor Makanu:

não é um facto, verifiquei qual é mais rápido que _Símbolo ou Símbolo()https://www.mql5.com/ru/forum/160683/page933#comment_12780905

Ou seja, o tempo de acesso é o mesmo, a optimização do código no MQL é muito fixe, por isso o que for conveniente, utilize-o.

de acordo com os meus testes, o tempo de acesso pode ser diferente, dependendo de onde a variável é descrita e com que modificadores, mas com uma velocidade de 2-5%, que em princípio pode ser reduzida à implementação numa determinada construção, depende do número da construção

Concordo que o optimizador funciona bem, mas confiar sempre no optimizador do compilador está errado.
É preciso pensar antecipadamente em como o código é executado no nível de memória, inicialização e retorno de valor.
Ou seja, calcular o número de acções executadas por operação e, se houver menos acções, o código é mais rápido. E tomar como prática escrever um código óptimo de uma só vez.
Em códigos curtos talvez não haja diferença, mas quando há um projecto com centenas de ficheiros, é quando aparecerão atrasos,
e só haverá um profiler e reescreverá o código. Cada um escolhe o seu ancinho )).

Também google para palavras-chave

__inline 
__forceinline
Por estranho que pareça, estão em mql como indocumentados.