Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 374

 
Vitalii Ananev:
Allora devi solo prendere il valore di iHigh(Symbol(),PERIOD_D1,0), dopo un certo periodo di tempo. Questo ha senso solo per la candela del giorno corrente, che non è ancora completamente formata. Ma se si prendono i valori dei giorni passati, saranno gli stessi in qualsiasi momento.
Questo è il problema, ho bisogno di guardarlo retrospettivamente....
 
-Aleks-:
Questo è il problema, ho bisogno di guardarlo retrospettivamente....

Capisco. È necessario fissare tutti gli estremi di prezzo intraday. Non riesco a pensare abbastanza velocemente a come farlo sui dati storici.

La prima cosa che mi viene in mente è analizzare i frattali formati sui timeframe intraday.

 

Non so come dirlo più chiaramente, in generale, come impostare il nome dell'array come variabile?

Per esempio, ci sono 2 matrici Mass1 e Mass2, bisogna fargli eseguire la stessa funzione, ma per condizione con due matrici diverse:

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

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

else 

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

e il tipo di funzione:

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

Non so come dirlo più chiaramente, in generale, come impostare il nome dell'array come variabile?

Per esempio, ci sono 2 matrici Mass1 e Mass2, bisogna fargli eseguire la stessa funzione, ma per condizione con due matrici diverse:

e il tipo di funzione:

E basta dichiarare due array, quali credenze impediscono?
 
VANDER:

Non so come dirlo più chiaramente, in generale, come impostare il nome dell'array come variabile?

Per esempio, ci sono 2 matrici Mass1 e Mass2, bisogna fargli eseguire la stessa funzione, ma per condizione con due matrici diverse:

Bene e funzione di tipo:

Assolutamente no. Perchéun array è un insieme numerato di variabili.

 
VANDER:

Non so come dirlo più chiaramente, in generale, come impostare il nome dell'array come variabile?

Per esempio, ci sono 2 matrici Mass1 e Mass2, bisogna fargli eseguire la stessa funzione, ma per condizione con due matrici diverse:

Pozzo e tipo di funzione:

Create una funzione all'interno della quale eseguite operazioni sull'array. E per condizione, passate diversi array alla funzione:

//+------------------------------------------------------------------+
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 dichiarare semplicemente due array impedisce quali credenze?
sono entrambi dichiarati, è solo che la funzione è grande e la stessa per tutti gli array quindi c'è bisogno di scegliere
 
Artyom Trishkin:

Create una funzione all'interno della quale eseguite operazioni su una matrice. E passare diversi array nella funzione per condizione:

ops, ma all'interno della funzioneWorkWithMassive, come si fa riferimento a questo array?
 
VANDER:
ops, ma all'interno della funzioneWorkWithMassive, come si fa riferimento a questo array?

Un array viene passato per riferimento e voi vi riferite all'esatto array che passate alla funzione tramite i parametri di input. Per esempio (puramente ipotetico)

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

È meglio, naturalmente, passare tutti i parametri necessari alla funzione:

//+------------------------------------------------------------------+
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);
      }
   }
//+------------------------------------------------------------------+

bene e si può usare l'overloading delle funzioni - una funzione con lo stesso nome fa cose diverse a seconda dei parametri di input e del 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-:
Giusto.

1. Determinare il tempo di apertura della candela giornaliera;

Determinate il numero di barre num sul TF che volete (se volete controllare l'estremo del giorno ogni 15 minuti - M15 barre);

3. Ricevere i dati alti per num bar;

3. Nel ciclo, confronta tutti i valori delle barre alte con la variabile dayHigh per la candela del giorno desiderato (inizialmente dayHigh = 0);

4. Se high > dayHigh, si memorizza il nuovo valore nella variabile dayHigh;