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

 
Vitalii Ananev:
Depois basta tomar o valor de iHigh(Symbol(),PERÍODO_D1,0), após um certo período de tempo. Isto só faz sentido para a vela do dia actual, que ainda não está completamente formada. Mas se tomarmos os valores dos dias passados, eles serão os mesmos em qualquer altura.
Esse é o problema, preciso de olhar para ele retrospectivamente....
 
-Aleks-:
Esse é o problema, preciso de olhar para ele retrospectivamente....

Estou a ver. É necessário corrigir todos os extremos de preços intradiários. Não consigo pensar suficientemente depressa como fazer isso em dados históricos.

A primeira coisa que me vem à mente é analisar os fractais formados em prazos intradiários.

 

Não sei como dizê-lo mais claramente, em geral, como definir o nome da matriz como uma variável?

Por exemplo, existem 2 matrizes Massa1 e Massa2, é necessário fazer funcionar a mesma função, mas por condição com duas matrizes diferentes:

if(условие==true)

	И мя_массива=Mass1

else 

	 Имя_массива=Mass2

e tipo de função:

A=Имя_массива[123];
 
VANDER:

Não sei como dizê-lo mais claramente, em geral, como definir o nome da matriz como uma variável?

Por exemplo, existem 2 matrizes Massa1 e Massa2, é necessário fazer funcionar a mesma função, mas por condição com duas matrizes diferentes:

e tipo de função:

E basta declarar duas matrizes, que crenças estão a impedir?
 
VANDER:

Não sei como dizê-lo mais claramente, em geral, como definir o nome da matriz como uma variável?

Por exemplo, existem 2 matrizes Massa1 e Massa2, é necessário fazer funcionar a mesma função, mas por condição com duas matrizes diferentes:

Função de poço e tipo:

Nem pensar. Porqueuma matriz é um conjunto de variáveis numeradas.

 
VANDER:

Não sei como dizê-lo mais claramente, em geral, como definir o nome da matriz como uma variável?

Por exemplo, existem 2 matrizes Massa1 e Massa2, é necessário fazer funcionar a mesma função, mas por condição com duas matrizes diferentes:

Poço e digite uma função:

Fazer uma função dentro da qual se realizam operações na matriz. E, por condição, passar diferentes matrizes para a função:

//+------------------------------------------------------------------+
double massive_a[];
int a, massive_b[];
//+------------------------------------------------------------------+
void OnTick() {
   if(a==1) WorkWithMassive(massive_a);
   else WorkWithMassive(massive_b);
}
//+------------------------------------------------------------------+
void WorkWithMassive(double &massive[]) {
   // работаем с массивом а
   }
//+------------------------------------------------------------------+
void WorkWithMassive(int &massive[]) {
   // работаем с массивом b
   }
//+------------------------------------------------------------------+
 
Vitalie Postolache:
E a simples declaração de duas matrizes impede que crenças?
ambos são declarados, é que a função é grande e a mesma para todas as matrizes, por isso é necessário escolher
 
Artyom Trishkin:

Fazer uma função dentro da qual se realizam operações numa matriz. E passar diferentes matrizes para a função por condição:

oops, mas dentro da funçãoWorkWithMassive, como se refere a esta matriz?
 
VANDER:
oops, mas dentro da funçãoWorkWithMassive, como se refere a esta matriz?

Uma matriz é passada por referência e refere-se à matriz exacta que se passa para a função através dos parâmetros de entrada. Por exemplo (puramente hipotético)

//+------------------------------------------------------------------+
void WorkWithMassive(double &massive[]) {
   int a=20;
   ArrayResize(massive,a);
   for(int i=a-1; i>=0; i--) {
      massive[i]=iOpen(Symbol(),Period(),a);
      }
   }
//+------------------------------------------------------------------+

É melhor, é claro, passar todos os parâmetros necessários à função:

//+------------------------------------------------------------------+
void WorkWithMassive(string symbol, int timeframe, double &massive[]) {
   int a=20;
   ArrayResize(massive,a);
   for(int i=a; i>=0; i--) {
      massive[i]=iOpen(symbol,timeframe,a);
      }
   }
//+------------------------------------------------------------------+

bem e pode utilizar sobrecarga de funções - uma função com o mesmo nome faz coisas diferentes dependendo dos parâmetros de entrada e do tipo:

//+------------------------------------------------------------------+
void WorkWithMassive(string symbol, int timeframe, double &massive[]) {
   int a=20;
   ArrayResize(massive,a);
   for(int i=a; i>=0; i--) massive[i]=iOpen(symbol,timeframe,a);
   }
//+------------------------------------------------------------------+
int WorkWithMassive(int inp_value, int array_size, int &massive[]) {
   ArrayResize(massive,array_size);
   massive[array_size-1]=inp_value*2;
   return(massive[array_size-1]+massive[0]);
   }
//+------------------------------------------------------------------+
 
-Aleks-:
Certo.

1. determinar a hora de abertura da vela diária;

Determine o número de barras numéricas na TF que pretende (se quiser verificar o extremo do dia de 15 em 15 minutos - barras M15);

3. Receber os dados em altura para as barras numéricas;

3. No laço, comparar todos os valores de barras altas com a variável dayHigh para a vela do dia desejado (inicialmente dayHigh = 0);

4. Se elevado > dayHigh, armazena o novo valor na variável dayHigh;