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

 
MrBrooklin #:

Muito obrigado, Alexander. Sua correção fez o código funcionar. Para ser sincero, percebi que eu mesmo estava confuso em três pinheiros. Preciso estudar novamente a passagem de argumentos para uma função. Aparentemente, estou totalmente equivocado aqui.

Saudações, Vladimir.

A saída de variáveis para a área global não é a passagem de argumentos para uma função...

//+------------------------------------------------------------------+
//|                                              Count_Pos (v.2).mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Calculate positions Buy and Sell                                 |
//+------------------------------------------------------------------+
void Calc_Pos(uint & pos_buy,uint & pos_sell)
  {
   for(int i=0; i<PositionsTotal(); i++)
     {
      PositionGetSymbol(i);
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
         pos_buy++;
      if(
         PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
         pos_sell++;
     }
   Print("pos_buy ",pos_buy);
   Print("pos_sell ",pos_sell);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   uint count_buy=0, count_sell=0;
   Calc_Pos(count_buy,count_sell);
   Print("По символу ",_Symbol," открыто: ",count_buy," длинных позиций");
   Print("По символу ",_Symbol," открыто: ",count_sell," коротких позиций");
  }
//+------------------------------------------------------------------+

Coloque & antes dos nomes das variáveis na entrada da função e todos os problemas serão resolvidos.

 
Alexey Viktorov #:

A saída de variáveis para o escopo global não está passando argumentos para uma função...

Coloque & antes dos nomes das variáveis na entrada da função e todos os problemas serão resolvidos.

Oi Alexey, então esse é o problema!!! Muito obrigado, querido! Minha cabeça estava toda quebrada, achei que faltava mais alguma coisa! Acontece que os cérebros não são suficientes!!!! ))

Abraços, Vladimir.

 
Alexey Viktorov #:
Coloque & na frente dos nomes das variáveis na entrada da função e todos os problemas serão resolvidos

Encontrei e assisti ao vídeo sobre funções com referências. A partir dessa videoaula, percebi que não precisava apenas de uma aula de MQL5 para inici antes, mas de uma aula de MQL5 para iniciantes especialmente dotados de estupidez. Em resumo, eu não entendi nada. Em geral, você precisa digerir todas as informações que recebeu e assistir novamente a este vídeo cinco ou até seis vezes. Mas haverá algo para fazer em meu tempo livre! ))

Saudações, Vladimir.

 
MrBrooklin #:

Encontrei e assisti a um vídeo sobre funções com links. A partir dessa videoaula, percebi que não precisava apenas de uma aula de MQL5 para iniciantes, mas de uma aula de MQL5 para iniciantes que são especialmente dotados de estupidez. Em resumo, eu não entendi nada. Em geral, você precisa digerir todas as informações que recebeu e assistir novamente a este vídeo cinco ou até seis vezes. Mas terei algo para fazer em meu tempo livre! ))

Saudações, Vladimir.

Não perca tempo, mesmo que você não tenha onde gastá-lo. O nome do "professor" fala por si só, um diletante é um diletante.

Esse vídeo só é útil para você por 3 minutos. E o resto é apenas distração e você perde informações úteis.

É melhor ler a documentação com atenção, fazer experiências com exemplos e você entenderá tudo.

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Передача параметров - Функции - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:

Não perca tempo, mesmo que não haja lugar para desperdiçá-lo. O nome do "professor" por si só já fala por si só: um amador é um amador.

Há apenas 3 minutos de informações úteis nesse vídeo. O resto é apenas uma distração e você perde informações úteis.

É melhor ler a documentação com atenção, fazer experiências com exemplos e você entenderá tudo.

Obrigado, Alexey, pensei que a videoaula seria mais informativa e útil para mim, mas acabou sendo exatamente o oposto. Quanto ao Manual de Referência MQL5, a seção de Transmissão de Parâmetros, eu o li da mesma forma, mas acabou sendo como o famoso ditado: "Eu olho no livro, vejo a figura!". Não entendi nada. Em resumo, é claro que vou reler e experimentar mais algumas vezes, não tenho muita escolha. ))

Saudações, Vladimir.

 

Depois de assistir ao vídeo tutorial e ler sobre a passagem de argumentos por referência no Manual de Referência da MQL5, parece estar mais ou menos claro. No entanto, depois de analisar o código apresentado no Manual de Referência, um fragmento ainda causou perplexidade, embora, na minha opinião, não tenha nada a ver com a passagem de argumentos por referência:

//+------------------------------------------------------------------+
//| передача параметров по ссылке                                    |
//+------------------------------------------------------------------+
double SecondMethod(int &i,int &j)
  {
   double res;
//---
   i*=2;
   j/=2;
   res=i+j;
//---
   return(res);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---.
   int a=14,b=8;
   Print("a и b перед вызовом:",a," ",b);
   double d= SecondMethod(a,b);
   Print("a и b после вызова:",a," ",b);
  }
//+------------------------------------------------------------------+
//--- результат выполнения скрипта
//  a и b перед вызовом: 14 8
//  a и b после вызова: 28 4

A esse respeito, tenho uma pergunta para os especialistas em programação MQL5 - por que diabos eles "enfiaram" a função SecondMethod(a,b ) na variável d em OnStart( )? Isso é um pré-requisito para a operação correta do script ou há algo que eu não entendi bem novamente?

Atenciosamente, Vladimir.

 

Por favor, me ajude.

Há muitas matrizes com tempo, e o tempo de alguns elementos nessas matrizes pode coincidir.

Preciso reuni-los em uma única matriz sem repetir os valores de tempo.

Fiz isso desta forma:

struct str1
  {
   int               time[];// в массиве порядка 10 тыс элементов
  };

struct str2
  {
   str1              arr[];// в массиве порядка 1 тыс элементов
  };

str2 m_name[]; // в массиве порядка 100 элементов

int ArrFull[]; // массив в который нужно собрать отсортированное время без повторений
//+------------------------------------------------------------------+
void OnStart()
  {
// считаем что m_name[] ранее уже заполнили


   int tempArr[];// объявляю дополнительный массив

   int size1 = ArraySize(m_name);
   for(int i = 0; i < size1; i++)
     {
      int size2 = ArraySize(m_name[i].arr);
      for(int j = 0; j < size2; j++)
        {
         // копирую в дополнительный массив все массивы времени из структур
         ArrayInsert(tempArr, m_name[i].arr[j].time, ArraySize(tempArr));
        }
     }
// сортирую дополнительный массив
   ArraySort(tempArr);

   int size = ArraySize(tempArr);
   ArrayResize(ArrFull, size);
   ArrFull[0] = tempArr[0];
   int j = 1;

// копирую не повторяющиеся элементы из дополнительного массива в массив с которым в дальнейшем буду работать
   for(int i = 1; i < size; i++)
      if(ArrFull[j - 1] != tempArr[i])
        {
         ArrFull[j] = tempArr[i];
         j++;
        }

   size = ArrayResize(ArrFull, j);

// дальше продолжение. много много букв
  }
//+------------------------------------------------------------------+


Mas o código acabou ficando muito lento. Ele precisa ser mais rápido. Como fazer ????

 
MrBrooklin argumentos por referência no Manual de Referência da MQL5, parece estar mais ou menos claro. No entanto, depois de analisar o código apresentado no Manual de Referência, um fragmento ainda causou alguma confusão, embora, na minha opinião, não tenha nada a ver com a passagem de argumentos por referência:

A esse respeito, tenho uma pergunta para os especialistas em programação MQL5 - por que diabos eles "enfiaram" a função SecondMethod(a,b ) na variável d em OnStart( )? Isso é um pré-requisito para a operação correta do script e eu entendi algo errado novamente?

Atenciosamente, Vladimir.

A variável d recebe o resultado da execução da função
 
Artyom Trishkin #:
A variável d recebe o resultado da execução da função

Obrigado, Artyom, por sua resposta! Éimpossível usar apenas a função SecondMethod(a,b) sem atribuição?

Atenciosamente, Vladimir.

 
MrBrooklin #:

Obrigado, Artyom, por sua resposta! Éimpossível usar apenas a função SecondMethod(a,b) sem atribuição?

Atenciosamente, Vladimir.

Sim, é possível. Nesse caso, dois valores serão recebidos - somente nas variáveis passadas por referência. Ou seja, a função retorna três valores
Razão: