Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 420

 
igrok333:
C'è una funzione che restituisce il tipo di variabile?

Per esempio, lei scrive.

int a=10;

poi scrivi:

functia(a);

e dice: INT!

:)
string functia(int a) { return "INT!"; } // improvvisamente
string functia(double a) { return "DABLE!"; } // anche inaspettatamente
 
igrok333:
C'è una funzione che restituisce un tipo di variabile?

Per esempio, lei scrive.

int a=10;

poi scrivi:

functia(a);

e dice: INT!

:)

Dalla guida:

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:

È molto più semplice. Crea un pulsante di visualizzazione (o usa uno dei pulsanti esistenti). Continuando a premere - tutti gli oggetti necessari sono impostati bandiera di visibilità su tutti i TF. Quando il pulsante viene rilasciato, tutti gli oggetti sono impostati per visualizzare la proprietà su tutti i TF (o necessario se necessario). Non c'è bisogno di cancellare/riorganizzare nulla. L'unica cosa da fare è ridisegnare il grafico dopo questa operazione.

Proprietà dell'oggetto OBJPROP_TIMEFRAMES.

 

Puoi dirmi come ottenere i dati dall'indicatore in un array? Cioè è chiaro che ho bisogno di dichiarare un array

doppio num_array[];

Non so bene cosa fare dopo...

num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); // l'array con l'indice [0] è uguale a MA, ma se cambiamo l'indice in [1], allora risulta che num_array[1] è uguale

gli stessi dati dell'indicatore come num_array[0]. Questo non dovrebbe essere il caso. L'array dovrebbe essere riempito in modo sequenziale. L'unica cosa che mi viene in mente è di dividere il giorno in 24

ore, dichiarare un array bidimensionale e assegnare un indice a ogni ora con la sua stringa ecc....

Forse c'è un modo più semplice o meno disordinato?

 
Corvin85:

Puoi dirmi come ottenere i dati dall'indicatore in un array? Cioè è chiaro che ho bisogno di dichiarare un array

doppio num_array[];

Non so bene cosa fare dopo...

num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); // l'array con l'indice [0] è uguale a MA, ma se cambiamo l'indice in [1], allora risulta che num_array[1] è uguale

gli stessi dati dell'indicatore come num_array[0]. Questo non dovrebbe essere il caso. L'array dovrebbe essere riempito in modo sequenziale. L'unica cosa che mi viene in mente è di dividere il giorno in 24

ore, dichiarare un array bidimensionale e assegnare un indice a ogni ora con la sua stringa ecc....

Forse c'è un modo più semplice o meno disordinato?


Io la vedo così:

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:

Io la vedo così:

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);

}
Ah, si scopre che bisogna impostare il numero massimo di indici nell'array tramiteArrayResize ed eseguirli attraverso un ciclo. Grazie mille, ma poi c'è una domanda, quando tutti gli indici sono riempiti con i dati dell'indicatore, devono essere cancellati tramiteArrayFree, o si riscrive da solo? O dopo 24x tutto si ferma del tutto? Scusate la domanda stupida, ma gli array sono una specie di cavallo nero con funzioni sconosciute.
 
Corvin85:
Oh, posso impostare il numero massimo di indici nell'array tramiteArrayResize ed eseguirli nel ciclo. Grazie mille, ma poi c'è una domanda, quando tutti gli indici sono riempiti con i dati dell'indicatore, devo cancellarli attraversoArrayFree, o si riscriverà da solo? O dopo il 24 tutto si fermerà? Scusa per la domanda schietta, ma gli array sono una specie di cavallo nero con funzioni sconosciute.
Beh, dipende da quale scopo si sta perseguendo. Ho scritto il codice per riempire l'array con i dati mA delle ultime 24 barre. Sarà aggiornato continuamente.
 
Corvin85:
Oh, posso usareArrayResize per impostare il numero massimo di indici nell'array ed eseguirli nel ciclo. Grazie mille, ma poi c'è una domanda, quando tutti gli indici sono riempiti con i dati dell'indicatore, devo cancellarli attraversoArrayFree, o si riscriverà da solo? O dopo il 24 tutto si fermerà? Scusate la domanda schietta, ma gli array sono una specie di cavallo nero con funzioni sconosciute.

Array = un insieme di semplici variabili allineate in una fila per un facile riferimento al loro indice. L'indice è una variabile intera per accedere agli elementi dell'array per numero al fine di organizzare un ciclo. Indice = contatore di numeri. ArrayFree = distruzione di array - come un bulldozer su case sgangherate. Ma può essere ripristinato di nuovo con ArrayResize. Bene ,ArrayResize è un recinto intorno a un array residenziale. Il nostro è qui, ma gli estranei sono dietro il recinto, ed è vietato entrarci. Potete inserire ogni casa molte volte (assegnare un nuovo valore a un elemento dell'array). Un array è molto semplice e conveniente per molti scopi. E quelli che hanno paura degli array - quelli ... Perciò, è meglio prenderci la mano con loro.

 
//+------------------------------------------------------------------+ 
//| Проверка массива                                                 | 
//+------------------------------------------------------------------+ 
#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);
}
Prova ad eseguire uno script come questo - e fai pratica
 
Artyom Trishkin:

Dal riferimento:

cp
Motivazione: