Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 420

 
igrok333:
Existe alguma função que devolva o tipo de variável?

Por exemplo, você escreve.

int a=10;

então você escreve:

functia(a);

e diz: INT!

:)
Functia(int a) { devolver "INT!"; } // de repente
Functia(duplo a) { devolver "DABLE!"; } // também de forma inesperada
 
igrok333:
Existe alguma função que retorna um tipo variável?

Por exemplo, você escreve.

int a=10;

então você escreve:

functia(a);

e diz: INT!

:)

A partir da ajuda:

void OnStart() 
  { 
//---  
   CTrade trade;    
   double d_value=M_PI; 
   int i_value=INT_MAX; 
   Print("d_value: type=",GetTypeName(d_value), ",   value=", d_value); 
   Print("i_value: type=",GetTypeName(i_value), ",   value=", i_value); 
   Print("trade: type=",GetTypeName(trade)); 
//---  
  } 
//+------------------------------------------------------------------+ 
//| Возвращает в строковом виде тип                                  | 
//+------------------------------------------------------------------+ 
template<typename T> 
string GetTypeName(const T &t) 
  { 
//--- вернем тип в виде строки 
   return(typename(T)); 
//--- 
  }
 
WinProject:

É muito mais simples. Criar um botão de exibição (ou usar um dos botões existentes). Mais adiante - todos os objetos necessários são colocados com a bandeira de visibilidade em todas as TFs. Quando o botão é liberado, todos os objetos são definidos para exibir propriedades em todos os TFs (ou necessários, se necessário). Não há necessidade de apagar/rearranjar nada. A única coisa a fazer é redesenhar a tabela após esta operação.

Objeto propriedade OBJPROP_TIMEFRAMES.

 

Você pode me dizer como obter os dados do indicador em uma matriz? Isto é, é claro que eu preciso declarar uma matriz

duplo num_array[];

Não tenho bem a certeza do que fazer a seguir...

num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); // a matriz com o índice [0] é igual a MA, mas se mudarmos o índice para [1], então se verifica que num_array[1] é igual

os mesmos dados do indicador como num_array[0]. Este não deve ser o caso. A matriz deve ser preenchida sequencialmente. Tudo que consigo pensar é em dividir o dia em 24

horas, declarar uma matriz bidimensional e atribuir um índice a cada hora com sua própria seqüência etc....

Talvez haja uma maneira mais simples ou menos complicada?

 
Corvin85:

Você pode me dizer como obter os dados do indicador em uma matriz? Isto é, é claro que eu preciso declarar uma matriz

duplo num_array[];

Não tenho bem a certeza do que fazer a seguir...

num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); // a matriz com o índice [0] é igual a MA, mas se mudarmos o índice para [1], então se verifica que num_array[1] é igual

os mesmos dados do indicador como num_array[0]. Este não deve ser o caso. A matriz deve ser preenchida sequencialmente. Tudo que consigo pensar é em dividir o dia em 24

horas, declarar uma matriz bidimensional e atribuir um índice a cada hora com sua própria seqüência etc....

Talvez haja uma maneira mais simples ou menos complicada?


Eu vejo as coisas desta maneira:

double num_array[];  

ArrayResize(num_array,24);

for(int i=0;i<24;i++)

{

 num_array[i] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);

}
 
Vladislav Andruschenko:

Eu vejo as coisas desta maneira:

double num_array[];  

ArrayResize(num_array,24);

for(int i=0;i<24;i++)

{

 num_array[i] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);

}
Acontece que o número máximo de índices na matriz é definido através doArrayResize e os passa por um loop. Muito obrigado, mas então há uma pergunta, quando todos os índices são preenchidos com dados do indicador, eles devem ser limpos através doArrayFree, ou ele vai se reescrever? Ou depois de 24x tudo vai parar de vez? Desculpe a pergunta idiota, mas as matrizes são como que um cavalo escuro com funções desconhecidas.
 
Corvin85:
Oh, posso usar oArrayResize para definir o número máximo de índices no array e executá-los através do loop. Muito obrigado, mas então há uma pergunta, quando todos os índices estiverem preenchidos com dados do indicador, devo limpá-los através doArrayFree, ou ele se reescreverá? Ou depois do 24º, tudo parará? Desculpe a pergunta grosseira, mas as matrizes são como que um cavalo escuro com funções desconhecidas.
Bem, depende do propósito que você está perseguindo. Eu escrevi o código para preencher a matriz com dados mA das últimas 24 barras. Ele será atualizado continuamente.
 
Corvin85:
Oh, eu posso definir o número máximo de índices na matriz através doArrayResize e executá-los através do loop. Muito obrigado, mas então há uma pergunta, quando todos os índices estiverem preenchidos com dados do indicador, devo limpá-los através doArrayFree, ou ele se reescreverá? Ou depois do 24º, tudo parará? Desculpe a pergunta grosseira, mas as matrizes são como que um cavalo escuro com funções desconhecidas.

Array = um conjunto de variáveis simples alinhadas em uma linha para uma referência de índice conveniente. O índice é uma variável inteira para acessar itens de matriz por número, a fim de organizar um loop. Índice = contador de números. ArrayFree = destruição da matriz - como bulldozing sobre casas decrépitas. Mas pode ser restaurado novamente com o ArrayResize. Bem , oArrayResize é uma cerca em torno de um conjunto residencial. O nosso está aqui, mas estranhos estão atrás da cerca, e é proibido entrar ali. Você pode entrar em cada casa muitas vezes (atribuir um novo valor a um elemento de matriz). Uma matriz é muito simples e conveniente para muitos propósitos. E aqueles que têm medo de arrays - aqueles ... Por isso, é melhor começar a lidar com eles.

 
//+------------------------------------------------------------------+ 
//| Проверка массива                                                 | 
//+------------------------------------------------------------------+ 
#property strict
int m[10];
int n;

void OnStart() 
{ 
  ArrayInitialize(m,7);          Вывод();  // Заполнить семерками
  ArrayResize(m,7);              Вывод();  // Удалить 3 последних элемента
  ArrayResize(m,9);              Вывод();  // Увеличить размер
  m[1]=1;  m[7]=1;               Вывод();  // Изменить 2 элемента
  for(n=0; n<9; n++) m[n]=n*n;   Вывод();  // Заполнить квадратами номеров
  ArrayCopy(m,m,0,2,7);          Вывод();  // Копирование со сдвигом
  ArrayResize(m,ArraySize(m)-2); Вывод();  // Удалить 2 последних элемента
} 

void Вывод()
{
  string s="";
  for(n=0; n<ArraySize(m); n++)
  s+="  " + string(m[n]);
  Alert(ArraySize(m), ":", s);
}
Tente executar um roteiro como este - e pratique
 
Artyom Trishkin:

A partir da referência:

cp
Razão: