Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 1083

 
E se avete bisogno di trovare il valore più alto in un dato numero di barre recenti ?
 

Quindi è un array statico

//--- создадим массив 
   double array[]; 
   int size=772; 
   ArrayResize(array,size); 
   //---  заполним его значениями индикатора 
   for(int i=0;i<size;i++) 
     { 
      array[i]=iATR(NULL,0,14,i);
     }
   //--- найдем позицию максимального элемента в массиве 
   int max_position=ArrayMaximum(array,772,0); 
   //--- теперь получим само максимальное значение в массиве 
   double max=array[max_position];
 

Così, infatti scrivo direttamente - autodidatta, non lontano nella comprensione delle sottigliezze della percezione dell'essere del programmatore (E il tema si chiama: Qualsiasi domanda di un principiante...). Do un esempio, che non sarà rimproverato che tutti vogliono ottenere gratuitamente, senza sforzo, e d'altra parte cercando di definire chiaramente il compito (per non dire che non possiamo leggere le menti degli altri).

Ancora una volta, come ottenere il valore massimo dell'indicatore per la quantità data di ultime barre dal codice dato o forse per grazia di comprensione nella dichiarazione personale di codifica?

Con sincero rispetto, rispetto e comprensione che i programmatori sono persone di un altro mondo e una spiegazione così delicata non è il fatto che tutto quanto sopra dovrà essere delineato di nuovo, forse più di una volta per ottenere il risultato desiderato.

//--- creare array doppio array[]; int size=772; ArrayResize(array,size); //---riempirlo con i valori dell'indicatore for(int i=0;i<size;i++) { array[i]=iATR(NULL,0,14,i);
} //--- trovare la posizione dell'elemento massimo nell'array int max_position=ArrayMaximum(array,772,0); //--- ora otteniamo il valore massimo nell'array stesso double max=array[max_position];
 

Ho cercato tutto quello che potevo ma non ho trovato nessuna soluzione, ultima speranza su di voi ragazzi :)

Il compito generale era quello di fare un indicatore che, quando viene lanciato su un grafico, cioè sta già lavorando, premiamo il tasto specificato e la linea di tendenza (data1=data2, prezzo1=prezzo2) appare sotto la posizione corrente del cursore

Il problema è sorto quando non riesco a far sì cheif(id==CHARTEVENT_MOUSE_MOVE) passi le coordinate del puntatore aif(id==CHARTEVENT_KEYDOWN), e anche il codice sottostante non vuole passarle. Non so come fare, ma c'è anche un altro modo per risolvere questo problema. Forse qualcuno sa, quando si lancia l'indicatore sul grafico, appare il menu iniziale.

#property strict
#define  VK_D             0x44 


int OnInit()
  {
//---
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);

   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{    
 
if(id==CHARTEVENT_MOUSE_MOVE)

{     int      x     =(int)lparam;
      int      y     =(int)dparam; 
      datetime dt    =0; 
      double   price =0; 
      int      window=0;
      ChartXYToTimePrice(0,x,y,window,dt,price); 


  if(id==CHARTEVENT_KEYDOWN)
{ 
  switch(int(lparam)) 
{ case VK_D:
   
   ObjectCreate("Trend Line",OBJ_TREND,0,dt,price,dt,price);
   ObjectSetInteger(0,"Trend Line",OBJPROP_SELECTED,true); 
}   
} 
}    
}
 
Craft:

Così, infatti scrivo direttamente - autodidatta, non lontano nella comprensione delle sottigliezze della percezione dell'essere del programmatore (E il tema si chiama: Qualsiasi domanda di un principiante...). Do un esempio, che non sarà rimproverato che tutti vogliono ottenere gratuitamente, senza sforzo, e d'altra parte cercando di definire chiaramente il compito (per non dire che non possiamo leggere le menti degli altri).

Ancora una volta, come ottenere il valore massimo dell'indicatore per la quantità data di ultime barre dal codice dato o forse per grazia di comprensione nella dichiarazione personale di codifica?

Con sincero rispetto, riverenza e comprensione che i programmatori sono persone di un altro mondo e una spiegazione così delicata non è il fatto che tutto quanto sopra dovrà essere delineato di nuovo, forse più di una volta per ottenere il risultato desiderato.


Quindi invertire il ciclo ed ecco fatto.

Da rates_total-1 a rates_total meno il_numero_di_palle_desiderato. Se in EA, da Bars()-1 a Bars() meno...

 
K_i_r_i_t_o:

Ho cercato tutto quello che potevo ma non ho trovato nessuna soluzione. Non ho speranze per voi ragazzi :)

Il compito generale era quello di fare un indicatore che, quando viene lanciato su un grafico, cioè sta già lavorando, premiamo il tasto specificato e la linea di tendenza (data1=data2, prezzo1=prezzo2) appare sotto la posizione corrente del cursore

Il problema è sorto quando non riesco a far sì cheif(id==CHARTEVENT_MOUSE_MOVE) passi le coordinate del puntatore aif(id==CHARTEVENT_KEYDOWN), e anche il codice sottostante non vuole passarle, non so come implementarlo, c'è un'altra opzione, ma è anche un problema, se qualcuno lo sa, quando si lancia l'indicatore sul grafico appare il menu iniziale, quindi posso bloccarlo in qualche modo, in modo che l'indicatore appaia immediatamente sul grafico?

Fate attenzione alla visibilità variabile.

Non ho approfondito, ma ho notato che le variabili sono dichiarate all'interno della condizione. Questo non dovrebbe essere il caso.

 
AlexeyVik:

Fate attenzione alla visibilità delle variabili.

Non ho approfondito troppo, ma ho notato che le variabili sono dichiarate all'interno della condizione. Questo non dovrebbe essere il caso.

Quindi questo è il problema, come far passare le variabili da un if all'altro, provato molte varianti, non vuole funzionare...
 
K_i_r_i_t_o:
Quindi questo è il problema, come far passare le variabili da un if all'altro, provato molte varianti, non vuole funzionare...

Potete leggerlo qui.

Quante varianti? Le variabili di livello globale sono visibili in qualsiasi parte del programma, questo è un caso estremo.

 
AlexeyVik:

Leggete qui.

Quali sono le molte varianti? Le variabili di livello globale sono visibili in qualsiasi parte del programma, questo è un caso estremo.

Ho letto tutto, questo è il punto, non posso spostare i valori delle variabili in un'altra funzione, e non c'è modo di raccoglierli in una funzione, sono perplesso, ma il menu indicatore?
 
Craft:

Buon pomeriggio, signori.

Domanda sugli array. Come trovare il valore più grande dell'indicatore sul numero richiesto di ultime barre del grafico, e non sulla prima?

È stato discusso molte volte (non riesco a trovarlo), ma ho usato raramente gli array.

Potresti consigliarmi come risolvere il problema dell'indicizzazione, magari usando ArrayMaximum(array) in un modo più elegante?

Se c'è un errore elementare da qualche parte, mi dispiace, sono un autodidatta.

Il flusso di correzioni di bug nelle build di MQL4 non svanisce mai, quindi più ilcodice è semplice, più è affidabile .

Amax=-10000;

iAmax=-1;

for(int i=0;i<size;i++) {

se (array[i]>Amax) {iAmax=i; Amax=array[i];}

}

se (iAmax<0) ...qualcosa è sbagliato